Docker 安装(rpm 仓库、rpm 软件包、二进制文件、银河麒麟环境)
参考 Install Docker Engine
https://docs.docker.com/engine/install/
常规安装
使用 rpm 仓库安装
移除现有版本。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
-y
[!info]
卸载 Docker 时,存储在/var/lib/docker/
中的 images, containers, volumes, 和 networks 不会自动移除。
设置 Docker 资源库。
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker Engine、containerd 和 Docker Compose。
# yum list docker-ce --showduplicates | sort -r
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
[!info]
命令会安装 Docker,但不会启动 Docker。
它还创建了一个 docker group,但默认情况下并不向该组添加任何用户。
启动 Docker。
systemctl start docker
从软件包安装
选择对应的 CentOS 版本
https://download.docker.com/linux/centos/
[!note]
银河麒麟 V10 的上游是 OpenEuler,OpenEuler 的上游是 CentOS 8。
https://download.docker.com/linux/centos/8/x86_64/stable/Packages/
- containerd.io-1.6.9-3.1.el8.x86_64.rpm
- container-selinux >= 2:2.74
- docker-buildx-plugin-0.14.0-1.el8.x86_64.rpm
- docker-ce-26.1.3-1.el8.x86_64.rpm
- libcgroup
- container-selinux >= 2:2.74
- containerd.io >= 1.6.24
- docker-ce-cli-26.1.3-1.el8.x86_64.rpm
- docker-compose-plugin-2.6.0-3.el8.x86_64.rpm
[!question]
这里有一个依赖问题需要注意。
CentOS 8 的路径下面提供的containerd.io
最高版本是1.6.9
,但是同路径下的docker-ce-26.1.3
要求containerd.io >= 1.6.24
。
可以去 CentOS 9 的路径下选择更高版本的containerd.io
。
执行安装,同样创建了 docker group。
yum --disablerepo=* localinstall *.rpm -y
启动 Docker。
systemctl start docker
以非 root 用户身份管理 Docker
Docker 守护进程绑定的是 Unix socket,而不是 TCP 端口。
默认情况下,Unix socket 的所有者是 root 用户,其他用户只能使用 sudo 访问。
Docker daemon 始终以 root 用户运行。
如果不想在执行 docker 命令前加上 sudo,可以创建一个名为 docker 的 Unix group,并将用户添加到该组中。
当 Docker daemon 启动时,它会创建可以被 docker group 的成员访问的 Unix socket。
在某些 Linux 发行版上,系统会在使用软件包管理器安装 Docker 时自动创建该组。
在这种情况下,无需手动创建该组。
[!note]
要在没有 root 权限的情况下运行 Docker,请参阅以非 root 用户身份运行 Docker 守护进程(Rootless mode)。
https://docs.docker.com/engine/security/rootless/
# 创建 group
sudo groupadd docker
# 添加用户至 docker group
sudo usermod -aG docker $USER
# 激活更改
newgrp docker
# 确认无需 sudo 即可运行 docker 命令
docker run hello-world
如果在将用户添加到 docker group 之前,使用 sudo 运行 Docker CLI 命令,可能会出现以下错误:
WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied
这个错误说明 ~/.docker/
目录的权限设置不正确,因为之前使用了 sudo 命令。
要解决这个问题,要么删除 ~/.docker/
目录(它会自动重建,但所有的自定义设置都会丢失),要么使用以下命令更改其所有权和权限:
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R
使用 systemd 配置 Docker 在开机时启动
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
# sudo systemctl disable docker.service
# sudo systemctl disable containerd.service
卸载 Docker
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
从二进制文件安装
选择硬件平台
https://download.docker.com/linux/static/stable/
docker-27.2.1.tgz
https://download.docker.com/linux/static/stable/x86_64/docker-27.2.1.tgz
docker-compose
https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64
docker-machine
https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Linux-x86_64
[!warning]
注意 docker-machine 已弃用。
检查当前环境运行情况,停止全部容器及 docker。
# docker ps
# docker stop
# docker rm
systemctl disable docker.service
systemctl stop docker
[!info]
卸载当前环境 docker-17.09.0-ce 及 docker-compose 二进制文件。
注意不同版本的 docker 的二进制文件不同,应当仔细确认。
删除二进制文件。
rm -rf /usr/bin/docker
rm -rf /usr/bin/docker-containerd
rm -rf /usr/bin/docker-containerd-ctr
rm -rf /usr/bin/docker-containerd-shim
rm -rf /usr/bin/dockerd
rm -rf /usr/bin/docker-init
rm -rf /usr/bin/docker-proxy
rm -rf /usr/bin/docker-runc
rm -rf /usr/bin/docker-compose
# rm -rf /usr/bin/docker-machine
删除存储目录。
rm -rf /var/lib/docker
[!info]
安装 docker-27.2.1
更新二进制文件,注册系统服务。
tar --strip-components=1 -xzvf docker-27.2.1.tgz -C /usr/bin
cp docker-compose /usr/bin
chmod +x /usr/bin/docker-compose
cp docker.service /usr/lib/systemd/system/docker.service
chmod +x /usr/lib/systemd/system/docker.service
docker.service:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
启动 Docker。
systemctl enable docker.service
systemctl start docker
# sudo start &
systemctl status docker
docker version
异常处理
与 Podman 冲突
[!failure]
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: container_linux.go:318: starting container process caused “permission denied”: unknown.
卸载 podman。
yum remove podman -y