Centos 7 安装操作最新版docker-ce

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos 7 安装操作最新版docker-ce相关的知识,希望对你有一定的参考价值。

使用非Root用户前要增加sudo 命令

卸载旧版本Docker

旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

使用yum 安装docker依赖包

执行以下命令安装依赖包:
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

配置国内镜像站

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
执行下面的命令添加 yum 软件源:
阿里云:
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
163:
yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

官方源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装Docker CE或者指定版本安装

如果需要最新版本的 Docker CE 请使用以下命令:
sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test

更新 yum 软件源缓存,并安装 docker-ce。
yum makecache fast
yum install docker-ce

安装指定版本的Docker:
yum list docker-ce --showduplicates | sort -r
技术图片

yum install docker-ce-18.06.3.ce-3.el7.centos.x86_64

注:安装过程中的问题:

技术图片
解决方法:
下载container-selinux:
wget http://mirrors.atosworldline.com/public/centos/7/extras/x86_64/Packages/container-selinux-2.68-1.el7.noarch.rpm
安装container-selinux(使用–nodeps --force跳过依赖检查):
rpm -ivh container-selinux-2.68-1.el7.noarch.rpm --nodeps --force
然后重新安装Docker

启动Docker CE

systemctl enable docker
systemctl start docker

建立Docker用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:
groupadd docker
将当前用户加入 docker 组:
usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。

测试docker是否正确安装

docker run hello-world

Unable to find image ‘hello-world:latest‘ locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:

  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
  3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

镜像加速

如果在使用过程中发现拉取 Docker 镜像十分缓慢,可以配置 Docker 国内镜像加速。
添加内核参数
如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
请添加内核配置参数以启用这些功能。
tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
然后重新加载 sysctl.conf 即可
sysctl -p

导入导出命令介绍

涉及的命令有export、import、save、load
Save 命令 :
docker save [options] images [images...]
示例 :
docker save -o nginx.tar nginx:latest

docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
Load 命令 :
docker load [options]
示例
docker load -i nginx.tar

docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
Export 命令 :
docker export [options] container
示例
docker export -o nginx-test.tar nginx-test
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
import命令:
docker import [options] file|URL|- [REPOSITORY[:TAG]]
示例
docker import nginx-test.tar nginx:imp

cat nginx-test.tar | docker import - nginx:imp
区别
export命令导出的tar文件略小于save命令导出的

export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。
建议:
可以依据具体使用场景来选择命令
若是只想备份images,使用save、load即可
若是在启动容器后,容器内容有变化,需要备份,则使用export、import

Docker中如何删除image(镜像)

docker中删除images的命令是docker rmi,但有时候执行此命令并不能删除images;(确认删除竟像时镜像没有在容器中运行,为停止状态)

docker images 查看镜像

技术图片

docker rmi IMAGE ID
技术图片
docker images 重新查看镜像列表

发现image并没有被删除,只是他的tag被删除了,再次执行docker rmi IMAGE_ID只会报错
docker rmi 53912975086f
Error: image_delete: Conflict, 53912975086f wasn‘t deleted
2019/07/20 16:16:27 Error: failed to remove one or more images

查看docker的帮助会发现有两个与删除有关的命令rm和rmi
rm Remove one or more containers
rmi Remove one or more images

这里有两个不同的单词,images和container。其中images很好理解,跟平常使用的虚拟机的镜像一个意思,相当于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。 如果你退出了一个container而忘记保存其中的数据,你可以使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image然后运行。
回到之前的问题,由于image被某个container引用(拿来运行),如果不将这个引用的container销毁(删除),那image肯定是不能被删除。
所以想要删除运行过的images必须首先删除它的container。继续来看刚才的例子,
执行命令 docker ps -a
技术图片

可以看出53912975086f的image被cc6b344ed27f的container使用着,所以必须首先删除该container
docker rm cc6b344ed27f
Error: container_delete: Impossible to remove a running container, please stop it first
2019/07/20 16:36:44 Error: failed to remove one or more containers
现错误,这是因为该container正在运行中(运行docker ps查看),先将其关闭
docker stop cc6b344ed27f

docker rm cc6b344ed27f

docker rmi 53912975086f

docker images

技术图片
可以看出,image已经被删除。

以上是关于Centos 7 安装操作最新版docker-ce的主要内容,如果未能解决你的问题,请参考以下文章

[TimLinux] docker CentOS7安装docker-ce最新版

centos7.2 64位 安装最新版 docker-ce-18.05.0

安装最新docker-ce失败解决

centos 7 安装docker教程

centos7 安装docker-ce ,最新版本docker

安装docker-ce与卸载(centos 7)