Docker - 安装
本内容基于官网的安装步骤,目前是最新的安装步骤(2021-11-19)。最新安装步骤请前往 [Docker 安装文档](https://docs.docker.com/engine/install/centos/)
2021-11-19 @Young Kbt
# 操作系统要求
要安装 Docker 引擎,您需要 CentOS 7 或 8 的维护版本。不支持或测试存档版本,并且 Linux 版本 3.10.0+,包括 3.10.0。
该 centos-extras
库必须启用。默认情况下启用此存储库,但如果您已禁用它,则需要 重新启用它 (opens new window)。
overlay2
推荐使用存储驱动。
# 卸载旧版本
旧版本的 Docker 被称为 docker
或 docker-engine
。如果安装了这些,请卸载它们以及相关的依赖项:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2
3
4
5
6
7
8
如果 yum
报告没有安装这些软件包,那也没关系,只是说明曾经没安装过,不影响任何东西。
卸载并不会全部卸载,如图像、容器、卷和网络,将被保留,以及 /var/lib/docker/
的内容
Docker 引擎包现在被称为 docker-ce
.
# 安装方法
首先说明下:Docker 安装路径是 /var/lib/docker
,安装 Docker 成功后,在该路径中有一个 image 和 containers 文件夹,分别存放镜像和实例。
您可以根据需要以不同方式安装 Docker Engine:
从 Docker 的存储库或者其他镜像库里下载,这是最推荐的方法
下载 RPM 包并手动安装并完全手动管理升级。这在某些情况下非常有用,例如在无法访问互联网的气隙系统上安装 Docker
便捷脚本安装 Docker,可以在测试和开发环境中安装
# 使用存储库安装
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。
安装软件包
安装 yum-utils
包,它提供 yum-config-manager
实用程序
sudo yum install -y yum-utils
设置存储库
设置稳定版本的仓库
官网(国外)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
2
3
阿里云(国内)
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2
3
阿里云仓库也是定期从官网仓库进行更新引用,两者仓库量无太大区别,如果配置了阿里云仓库,也要配置阿里云镜像加速,即下载速度源由官网改为阿里云。
最新版本安装
特定版本安装
安装 最新版本 的 Docker Engine 和 containerd:
sudo yum -y install docker-ce docker-ce-cli containerd.io
如果希望自己手动确认一些安装条件,则把 -y
去掉。
如果报如下错误:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
No package docker-ce available.
No package docker-ce-cli available.
No package containerd.io available.
2
3
4
5
要么你的 Linux 版本没到达 3.10.+,要么你忽略了上方的设置存储库,请设置官方或者阿里云的存储库,否则无法找到 Docker。
还有一种可能就是你的 yum 版本太低,请更新它。
# 更新 yum
yum update
# CentOS 7 更新索引
yum makecache fast
# CentOS 8 更新索引
yum makecache
2
3
4
5
6
7
8
安装 特定版本 的 Docker Engine,请在 repo 中列出可用版本,然后选择并安装
首先列出可以安装的版本:
yum list docker-ce --showduplicates | sort -r
# 例子:
docker-ce.x86_643:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_643:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_6418.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_6418.06.e.ce-3.el7 docker-ce-stable
2
3
4
5
6
7
返回的列表取决于启用的存储库,并且特定于您的 CentOS 版本(e17 就是 CentOS 7.x 版本,如果是 CentOS 8.2,则是 e18)
通过完全限定的包名称安装特定版本,即包名称 (docker-ce
) 加上从第一个冒号 (:
)开始的版本字符串(第 2 列),直到第一个连字符,由连字符 (-
)分隔。例如:docker-ce-18.09.1
。
sudo yum install docker-ce-<version> docker-ce-cli-<version> containerd.io
# 例子
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
2
3
4
此命令会安装 Docker,但不会启动 Docker。它还会创建一个 docker
组,但是,默认情况下它不会向该组添加任何用户。
启动 Docker
sudo systemctl start docker
测试是否启动成功
# 执行该命令
sudo systemctl status docker
# 执行结果,出现 active (running) 代表启动成功
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2021-11-19 15:40:03 CST; 1s ago
Docs: https://docs.docker.com
Main PID: 29970 (dockerd)
Tasks: 11
Memory: 114.0M
CGroup: /system.slice/docker.service
└─29970 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
2
3
4
5
6
7
8
9
10
11
12
其他命令:
# 查看 docker 的状态
systemctl status docker
# 重启 docker
systemctl restart docker
# 设置 docker 服务开启自启动
systemctl enable docker
2
3
4
5
6
验证安装
查看 Docker 版本
docker version
查看 Docker 信息
docker info
测试运行
通过运行 hello-world
映像验证 Docker Engine 是否已正确安装
# 执行该命令
docker run hello-world
# 执行结果
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/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
# 从包安装
如果您无法使用 Docker 的存储库来安装 Docker,您可以下载该.rpm
版本的 文件并手动安装。每次要升级 Docker Engine 时都需要下载一个新文件。
前往 https://download.docker.com/linux/centos/ (opens new window) 并选择您的 CentOS 版本。然后浏览 x86_64/stable/Packages/
并下载 .rpm
要安装的 Docker 版本的文件。
安装
安装 Docker Engine,将下面的路径更改为您下载 Docker 包的路径。
sudo yum install /path/to/package.rpm
Docker 已安装但未启动。该 docker
组被创建,但没有用户添加到组。
启动 Docker
sudo systemctl start docker
其他命令:
# 查看 docker 的状态
systemctl status docker
# 重启 docker
systemctl restart docker
# 设置 docker 服务开启自启动
systemctl enable docker
2
3
4
5
6
验证安装
查看 Docker 版本
docker version
查看 Docker 信息
docker info
测试运行
通过运行 hello-world
映像验证 Docker Engine 是否已正确安装
docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
# 便利脚本安装
Docker 在 get.docker.com (opens new window) 上提供了一个方便的脚本,可以快速且非交互式地将 Docker 安装到开发环境中。不建议将便捷脚本用于生产环境,但可以用作示例来创建适合您需求的配置脚本。
在本地运行之前,请务必检查从 Internet 下载的脚本。在安装之前,让自己熟悉便利脚本的潜在风险和限制:
- 脚本需要
root
或sudo
特权才能运行。 - 该脚本会尝试检测您的 Linux 发行版和版本并为您配置包管理系统,并且不允许您自定义大多数安装参数。
- 该脚本无需确认即可安装依赖项和建议。这可能会安装大量软件包,具体取决于主机的当前配置。
- 默认情况下,该脚本会安装 Docker、containerd 和 runc 的最新稳定版本。使用此脚本配置机器时,可能会导致 Docker 的主要版本意外升级。在部署到生产系统之前,始终在测试环境中测试(主要)升级。
- 该脚本并非旨在升级现有的 Docker 安装。使用脚本更新现有安装时,依赖项可能不会更新到预期版本,从而导致使用过时的版本。
安装
此示例从 get.docker.com (opens new window) 下载脚本并运行它以在 Linux 上安装 Docker 的最新稳定版本,另外可以通过 --mirror
选项使用国内下载源进行安装:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror
2
启动 Docker
sudo systemctl start docker
其他命令:
# 查看 docker 的状态
systemctl status docker
# 重启 docker
systemctl restart docker
# 设置 docker 服务开启自启动
systemctl enable docker
2
3
4
5
6
创建 docker 用户组
便利脚本安装不会自动创建 docker 用户组,请手动安装
sudo groupadd docker
验证测试
查看 Docker 版本
docker version
查看 Docker 信息
docker info
测试运行
通过运行 hello-world
映像验证 Docker Engine 是否已正确安装
docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
# 安装进阶
# 以非root用户管理Docker
Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。默认情况下,Unix 套接字归用户所有 root
,其他用户只能使用 sudo
. Docker 守护进程始终以root
用户身份运行。
如果您不想在 docker
命令前加上 sudo
,请创建一个 docker
用户组并向其中添加用户。当 Docker 守护进程启动时,它会创建一个可由 docker
组成员访问的 Unix 套接字。
- 创建
docker
组
sudo groupadd docker
- 将您的用户添加到
docker
组中
sudo usermod -aG docker $USER
注销并重新登录,以便重新评估您的组成员身份。
如果在虚拟机上进行测试,可能需要重新启动虚拟机以使更改生效。
在桌面 Linux 环境(例如 X Windows)上,完全注销会话,然后重新登录。
在 Linux 上,您还可以运行以下命令来激活对组的更改:
newgrp docker
1验证您可以在
docker
没有sudo
.docker run hello-world
1此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
如果您
sudo
在将用户添加到docker
组之前最初使用 Docker CLI 命令运行,您可能会看到以下错误,这表明您的~/.docker/
目录由于sudo
命令而使用不正确的权限创建。WARNING: Error loading config file: /home/user/.docker/config.json - stat /home/user/.docker/config.json: permission denied
1
2要解决此问题,请删除
~/.docker/
目录(它会自动重新创建,但所有自定义设置都将丢失),或使用以下命令更改其所有权和权限:sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod g+rwx "$HOME/.docker" -R
1
2
# 配置Docker开机启动
多数当前的 Linux 发行版(RHEL、CentOS、Fedora、Debian、Ubuntu 16.04 及更高版本)用于 systemd 管理系统启动时启动的服务(就是 systemctl
命令)。在 Debian 和 Ubuntu 上,Docker 服务默认配置为在启动时启动。要在引导时为其他发行版自动启动 Docker 和 Containerd,请使用以下命令:
# 可省略 .service
sudo systemctl enable docker.service
sudo systemctl enable containerd.servic
2
3
要禁用此开机启动,请改用为 disable
。
# 可省略 .service
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
2
3
# 仓库配置
Docker 安装好以后,我们就要开始为拉取镜像准备了;国内从 DockerHub 拉取镜像有时会特别慢,此时可以配置镜像加速器。
Docker 官方和国内很多云服务商都提供了国内加速器服务,比如:
- 阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
- 网易加速器:http://hub-mirror.c.163.com
- Docker 官方中国加速器:https://registry.docker-cn.com
- ustc 的镜像:https://docker.mirrors.ustc.edu.cn
- daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)
# Docker 官方中国的镜像加速器
对于使用 systemd 的系统(CentOS 7.x 以上),请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2
3
另一种方式
# 创建文件夹
sudo mkdir -p /etc/docker
# 下面是一个步骤,全部复制
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
2
3
4
5
6
7
8
之后重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
2
# 配置阿里云镜像加速器
访问阿里云登录自己的账号查看 docker 镜像加速服务:https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors (opens new window)
操作步骤是统一的,不存在不同用户不同的操作步骤,我已经放到下面代码块:
# 创建文件夹 sudo mkdir -p /etc/docker # 下面是一个步骤,全部复制 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://cgyf1vkq.mirror.aliyuncs.com"] } EOF
1
2
3
4
5
6
7
8之后重新启动服务
sudo systemctl daemon-reload sudo systemctl restart docker
1
2验证 docker 的镜像加速器是否生效
# 执行命令 docker info # 结果 ...... Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://cgyf1vkq.mirror.aliyuncs.com/ Live Restore Enabled: false
1
2
3
4
5
6
7
8
9
10
11
12
# 镜像查看和拉取
拉一个 docker 镜像试试吧?
拉取 hello world
# 执行该命令
docker pull hello-world:latest
# 执行结果
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
2
3
4
5
6
7
8
看本地仓库是否有这个库
# 执行该命令
docker images
# 执行结果
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 8 weeks ago 13.3kB
2
3
4
5
运行这个镜像的实例,即容器
# 执行该命令
docker run hello-world
# 执行结果
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/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
注意, 如果你在没有镜像的时候,直接
docker run hello-world
也是可以的;它会先检查本地是否有这个镜像,没有的话会先从指定仓库中拉取。
# 卸载Docker引擎
卸载 Docker Engine、CLI 和 Containerd 包
sudo yum remove docker-ce docker-ce-cli containerd.io
主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
2
您必须手动删除任何已编辑的配置文件
# 参考文章
https://www.pdai.tech/md/devops/docker/docker-02-basic.html