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
Centos 7 安装操作最新版docker-ce_第1张图片

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

注:安装过程中的问题:

Centos 7 安装操作最新版docker-ce_第2张图片
解决方法:
下载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
请添加内核配置参数以启用这些功能。

mkdir -p /etc/docker
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

编辑文件/etc/docker/daemon.json 添加以下代码:

{
    "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}

导入导出命令介绍

涉及的命令有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 查看镜像

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

docker rmi IMAGE ID
Centos 7 安装操作最新版docker-ce
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
Centos 7 安装操作最新版docker-ce

可以看出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

Centos 7 安装操作最新版docker-ce
可以看出,image已经被删除。

你可能感兴趣的:(运维,操作系统,json)