# 手动部署

最后更新: 2024-06-24 00:00:00

# 手动部署

# 环境支持

CentOS/RHEL 7/8/9

# 在线安装

# 参考资料

https://docs.docker.com/engine/install/centos/ (opens new window)

https://docs.docker.com/engine/install/rhel/ (opens new window)

# 卸载 docker 老版本

注意:如果预装了 podman 也需要卸载

yum remove -y \
docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

# 按需删除 /etc/docker/daemon.json
rm -f /etc/docker/daemon.json

# 安装 docker 依赖

安装 yum-utils 软件包并设置软件源

# 安装 yum-utils 软件包并设置软件源
# 官方
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 家用
yum install -y yum-utils
yum-config-manager --add-repo https://repos.oso.plus/docker-ce/linux/centos/docker-ce.repo
sed -i 's%download.docker.com%repos.oso.plus/docker-ce%g' /etc/yum.repos.d/docker-ce.repo
sed -i 's%download.docker.com%repos.oso.plus/docker-ce%g' /etc/yum.repos.d/docker-ce.repo

yum install -y checkpolicy fuse-overlayfs fuse3 fuse3-libs libcgroup libslirp slirp4netns

# 执行 docker 安装

# 安装 docker 最新版
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 如果需要安装特定版本 可通过以下命令查看有哪些特定版本可供安装
yum list docker-ce --showduplicates | sort -r

# 管理 docker 服务

# 启动 docker 服务并加入开机自启
systemctl enable --now docker

# 取消开机自启
systemctl disable docker

# 启动 docker 服务
systemctl start docker
# 关闭 docker 服务
systemctl stop docker
# 重启 docker 服务
systemctl restart docker
# 检查 docker 状态
systemctl status docker

# 验证 docker 安装

docker run hello-world

# 修改 docker 配置

以下配置是使用国内镜像源

mkdir -p /data/docker
# 默认文件 /etc/docker/daemon.json
cat > /etc/docker/daemon.json << EOF
{
  "insecure-registries": [
    "r.oso.plus",
    "r.upx.plus"
  ],
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "data-root": "/data/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "experimental": true
}
EOF

# 安装 docker-compose

以下方法适用于安装 docker-compose 的 standalone 版。

官方下载地址: https://github.com/docker/compose/releases (opens new window)

# 安装给当前用户
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins

# 下载时注意对应的平台架构
curl -SL https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 \
-o $DOCKER_CONFIG/cli-plugins/docker-compose

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# 安装给所有用户
DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker}
mkdir -p $DOCKER_CONFIG/cli-plugins

# 下载时注意对应的平台架构
curl -SL https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 \
-o $DOCKER_CONFIG/cli-plugins/docker-compose

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# 检查版本
docker compose version

# 卸载 docker-compose 插件

yum remove docker-compose-plugin

# 离线安装

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Debian 11/12

# 在线安装

# 卸载非官方版本

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do  apt remove $pkg; done

# 卸载已装版本

apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
# Add Docker's official GPG key:
apt update
apt install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg |  gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update

apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker run hello-world

# 离线安装

# 下载离线包

https://download.docker.com/linux/debian/dists/

# 执行安装

dpkg -i ./containerd.io_<version>_<arch>.deb \
./docker-ce_<version>_<arch>.deb \
./docker-ce-cli_<version>_<arch>.deb \
./docker-buildx-plugin_<version>_<arch>.deb \
./docker-compose-plugin_<version>_<arch>.deb

# 启动和测试

service docker start
docker run hello-world

# 卸载和清理

apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

# Ubuntu 20.04/22.04/24.04

# 在线安装

# 卸载非官方版本

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do apt remove $pkg; done
# Add Docker's official GPG key:
apt update -y
apt install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update -y
# ubuntu 20.04
# cat /etc/apt/sources.list.d/docker-ce.list 
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://repos.oso.plus/docker-ce/linux/ubuntu focal stable

# 离线安装

下载地址:https://download.docker.com/linux/ubuntu/dists/

dpkg -i ./containerd.io_<version>_<arch>.deb \
  ./docker-ce_<version>_<arch>.deb \
  ./docker-ce-cli_<version>_<arch>.deb \
  ./docker-buildx-plugin_<version>_<arch>.deb \
  ./docker-compose-plugin_<version>_<arch>.deb

service docker start
docker run hello-world

# 离线静态二进制版安装

下载地址:https://download.docker.com/linux/static/stable/ (opens new window)

注意:当前方式是安装在/usr/bin系统目录下。主要是为了避免一些默认路径或环境变量的问题。如果系统对应路径下存在同名文件将被覆盖。

# groupadd docker
# useradd -r -g docker -s /sbin/nologin -M docker

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

dnf install -y tar gzip curl libcgroup

tar -xf docker-26.1.4.tgz --strip-components=1 -C /usr/bin/
mkdir -p /usr/libexec/docker/cli-plugins
mv docker-compose-linux-x86_64 /usr/libexec/docker/cli-plugins/docker-compose
mv buildx-v0.15.1.linux-amd64 /usr/libexec/docker/cli-plugins/docker-buildx
chmod +x /usr/libexec/docker/cli-plugins/{docker-compose,docker-buildx}

echo 'export PATH=/usr/libexec/docker/cli-plugins:$PATH' >>/etc/profile
source /etc/profile

mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
    "insecure-registries": ["r.oso.plus"],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "data-root": "/data/docker",
    "log-driver": "json-file",
    "log-opts": {"max-size": "100m"}
}
EOF

cat > /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
#TasksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable docker
systemctl start docker
systemctl restart docker
systemctl stop docker

# 卸载
systemctl stop docker
rm -rf /usr/bin/{containerd,containerd-shim-runc-v2,ctr,docker,docker-init,docker-proxy,dockerd,runc}
rm -rf /usr/libexec/docker/cli-plugins/docker-{buildx,compose}
rm -f /etc/docker/daemon.json
rm -f /etc/systemd/system/docker.service
编撰人:yangfc