Docker与系统之间的关系
安装Docker
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
查看内核版本
uname -r
CentOS发现版本
cat /etc/centos-release
拉取镜像:
docker pull 镜像名称
删除指定镜像:
docker rmi $IMAGE_ID
删除所有镜像:
docker rmi `docker images -q`
卸载老版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
阿里云镜像安装
安装步骤
配置docker镜像加速:将下面的命令一步一步复制粘贴就可以了
docker的简单命令
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker的容器的常见命令
查看正在运行容器:
docker ps
查看所有的容器(启动过的历史容器):
docker ps –a
查看最后一次运行的容器:
docker ps –l
查看停止的容器:
docker ps -f status=exited
删除容器:
docker rm 容器名称
启动docker ,就安装完成了,然后就可以在docker中安装一些软件
创建容器常用的参数说明
具体 | 作用 |
---|---|
- i | 表示运行容器 |
- t | 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 |
- - name | 为创建的容器命名。 |
-d | 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器) |
-v | 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 |
-p | 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 |
交互式启动(前台启动)
特定:容器启动进入容器内部,exit退出时,容器停止
创建一个交互式容器并取名为mycentos1
docker run -it --name=容器名 镜像名:版本号 /bin/bash
docker run -it --name=mycentos1 centos:7 /bin/bash
守护式容器(后台启动)
特定:容器启动不会直接进入容器内部。exit退出时,容器不会停止
创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。
docker run -id --name=mycentos2 centos
登录守护式容器方式:
docker exec -it container_name (或者 container_id) /bin/bash(exit退出时,容器不会停止)
停止正在运行的容器:
docker stop $CONTAINER_NAME/ID
启动已运行过的容器:
docker start $CONTAINER_NAME/ID
文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp
需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp
容器名称:容器目录 需要拷贝的文件或目录
不能在两个容器之间直接拷贝
目录挂载:
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录
docker run -id -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos3 centos
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true
来解决挂载的目录没有权限的问题
注意:挂载成功以后是双向影响,创建容器指定目录挂载是单向覆盖:宿主机的目录覆盖容器的目录(不要覆盖有功能的目录,容器创建启动有问题)
查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect mycentos2
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
在Docker中安装Mysql
安装mysql
docker run -id --name=mysql55 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123 mysql:5.5
启动容器
docker start mysql55(容器名字)
进入容器
docker exec -it mysql55(容器名字) /bin/bash
登录数据库
root@000827395d57:/# mysql -uroot -p123
我们发现编码乱码,修改配置文件改变乱码格式
show variables like '%char%';
因为容器中没有vim命令,所以先将容器里面的配置文件cp出来,mysql55是我的名字
[root@localhost /]# docker cp mysql55:/etc/mysql/my.cnf my.cnf
然后修改
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
然后改完了在cp回去
[root@localhost /]# docker cp my.cnf mysql55:/etc/mysql/
重启mysql容器
docker restart mysql55
查看编码,发现是utf-8 即完成
在Docker中安装Tomcat
下载镜像
[root@localhost /]# docker pull tomcat:9-jdk8
创建容器:这里用宿主机的9090端口去映射容器的8080端口
docker run -id --name=tomcat9 -p 9090:8080 tomcat:9-jdk8
打开9090端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent
重启防火墙
firewall-cmd --reload
现在我们访问还是看不到猫,因为在docker下的webapps中没有界面,docker中的访问界面在webapps.dist这个文件夹的ROOT文件夹中,所以我们要将这个ROOT文件复制过去。
cp -r webapps.dist/ROOT webapps/
然后就可以访问到猫了
到这里我们就把tomcat装完了
在Docker中安装Nginx
开始用的是-v映射去安装但是报下面的错误,原因可以看这篇文章
docker run -id --name=nginx -p 90:80 -v /mydata/nginx.conf/:/etc/nginx/nginx.conf nginx
所以我们先不-v映射
docker run -id --name=nginx -p 90:80 nginx
在这里访问90
反向代理
我们可以先去看nginx.conf
这个文件
cat etc/nginx/nginx.conf
可以发现没有server
这是因为docker中的nginx是在这个路径下
cat etc/nginx/conf.d/default.conf
我们可以将它的server中内容复制出来,可以直接复制到nginx.conf中也可以直接在default.conf中更改
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
将nginx.conf
配置文件cp出来然后更改
[root@localhost mydata]# docker cp nginx:/etc/nginx/nginx.conf nginx.conf
我们准备一个接口做准备
都在http标签内(坑我半天)
upstream myweb{
server 192.168.195.157:9090;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://myweb/;
}
}
改好cp回去
docker cp nginx.conf nginx:/etc/nginx/nginx.conf
打开防火墙
firewall-cmd --zone=public --add-port=90/tcp --permanent
重启防火墙
firewall-cmd --reload
访问90即完成
场景:
运行了nginx,一开始只映射了80端口,后面载部署项目的时候,需要用到其他端口,不想重新部署容器,所以通过修改配置文件的方式给容器添加其他端口
当然。添加端口的方法是通用的,除此以外的方法比如将容器打包成镜像,再运行一个容器,或者干脆放弃当前容器,重新运行一个容器是完全不在我考虑范围内的
处理以上情况我们可以看这篇文章
负载均衡
将我们事先准备好的war包复制到linux中
然后在通过命令赋值到tomcat对应的容器中(我们这里有两个容器,复制好一个在改index中的内容),两个tomcat服务器必须用同一个war包或者jar包名字一致,内容可以不一致(我们这里就是内容不一致,因为需要看效果)。
docker cp pager.war(war包名字) tomcat9:/usr/local/tomcat/webapps(路径)
然后更改nginx配置文件与端口对应,还是在http标签内
#include /etc/nginx/conf.d/*.conf;
upstream myweb{
server 192.168.195.157:9090;
server 192.168.195.157:9091;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://myweb/;
}
}
因为我们有一个tomcat服务器对应的是9091端口,所以还需要打开9091端口,9090之前打开过
firewall-cmd --zone=public --add-port=9090/tcp --permanent
重启防火墙
firewall-cmd --reload
执行效果: