Docker必须安装在CentOS7 64位机器上。
1 卸载老版本Docker
Docker老版本,docker-engine。Docker进入17.x版本后,名称发生了变化,叫做docker-ce或者docker-ee。
sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
执行该命令只会卸载Docker本身,而不会删除Docker内容,例如镜像、容器、卷以及网络。这些文件保存在/var/lib/docker 目录中,需要手动删除。
2 安装仓库
(1) 安装yum-utils ,这样我们就能使用yum-config-manager 设置Yum源。
(2) 执行以下命令,添加Yum源
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
(3) 【可选】执行以下命令,启用“edge”仓库。edge仓库其实也包含在了docker.repo文件中了,但默认是禁用的,我们可使用以下命令启用edge仓库。
sudo yum-config-manager --enable docker-ce-edge
如果想要再次禁用edge仓库,可执行以下命令。
sudo yum-config-manager --disable docker-ce-edge
Docker有两种构建方式,Stable(稳定)构建一般是一个季度发布一次;Edge(边缘)构建一般是一个月发布一次。
3 安装Docker
做好以上准备后,就可以正式安装Docker了。
(1) 执行以下命令更新Yum的包索引
sudo yum makecache fast
(2) 安装你想要的Docker版本(CE/EE)
Docker CE
sudo yum install docker-ce
Docker EE
sudo yum install docker-ee
(3) 在生产环境中,我们可能需要指定想要安装的版本。可使用以下命令列出当前可用的Docker版本。
yum list docker-ce.x86_64 --showduplicates |sort -r
(4) 启动Docker
sudo systemctl start docker
(5) 验证安装是否正确
sudo docker run hello-world
这样,Docker将会下载测试镜像,并使用该镜像启动一个容器。
升级Docker
升级Docker非常简单
(1) 执行以下命令
sudo yum makecache fast
(2) 按照安装的步骤,即可升级Docker。
Docker Compose
curl -L https://github.com/docker/compose/releases/download/$dockerComposeVersion/docker-compose-uname -s
-uname -m
> /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
[wsun@localhost docker-1-simple]$ sudo /usr/local/bin/docker-compose up
Creating network "docker1simple_default" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-a4a4ebd5d945 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
[wsun@localhost docker-1-simple]$ sudo /usr/local/bin/docker-compose up
Creating network "docker1simple_default" with the default driver
ERROR: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-7abd83608f56 -j DOCKER: iptables v1.4.21: Couldn't load target `DOCKER':No such file or directory
Try `iptables -h' or 'iptables --help' for more information.
(exit status 2
sudo ip link delete docker0
sudo systemctl restart docker
进入容器:
[wsun@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb9c5812aedb kibana "/docker-entrypoin..." 2 days ago Up 41 minutes 0.0.0.0:5601->5601/tcp elk_kibana_1
68658b7a5749 elasticsearch "/docker-entrypoin..." 2 days ago Up 41 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elk_elasticsearch_1
75a23f03e621 logstash "/docker-entrypoin..." 2 days ago Up 41 minutes 0.0.0.0:5000->5000/tcp elk_logstash_1
[wsun@localhost ~]$ sudo docker inspect --format "{{.State.Pid}}" 75a23f03e621
4327
[wsun@localhost ~]$ sudo nsenter --target 4327 --mount --uts --ipc --net --pid
root@75a23f03e621:/#