Osmanthus

空想具現化


  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo

Docker 安装(rpm 仓库、rpm 软件包、二进制文件、银河麒麟环境)

发布于 2024-09-11 Docker 

参考 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

 上一篇: JSch 的使用(SSH、SFTP) 下一篇: Peewee:简单、轻量化的 ORM 

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo