方案概述
使用官方发布的"已编译二进制包"部署Docker,该方案相比使用rpm或deb包在离线环境下部署Docker有如下优势:
- 静态二进制文件包含了应用程序及其所有依赖的库和组件,在部署时不需要担心依赖关系的管理。这简化了部署过程,减少了因依赖关系问题而导致的部署失败的可能性。
- 静态二进制文件是自包含的,可以在不同的环境中轻松部署,而无需担心目标环境中是否安装了特定的库或组件,使其更容易在不同发行版类型和版本的操作系统中部署 。
相关链接
Install Docker Engine from binaries
Download static binaries
部署步骤
- 创建
/etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo cat <<EOF > /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"icc": true,
"iptables": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "10",
"mode": "non-blocking"
},
"registry-mirrors": ["https://cu2yw19m.mirror.aliyuncs.com"],
"default-ulimits": {
"core": {
"Name": "core",
"Hard": 0,
"Soft": 0
}
}
}
EOF
- 创建目录
/var/lib/docker
- 创建名为
docker
的 User和Group
sudo useradd -M -s /usr/sbin/nologin -U docker
sudo usermod -a -G docker $USER
- 将static binary文件解压到
/usr/bin/
目录下 - 部署containerd
- 创建
/etc/containerd/config.toml
- 创建
/lib/systemd/system/containerd.service
- 启动containerd
sudo systemctl enable containerd
sudo systemctl start containerd
- 部署Docker
- 创建
/lib/systemd/system/docker.service
- 创建
/lib/systemd/system/docker.socket
- 启动Docker
- 创建
sudo systemctl enable docker.service
sudo systemctl start docker
- 部署bash-completion
- 创建
/usr/share/bash-completion/completions/docker
- 创建
- 将当前账号加入docker Group
sudo usermod -a -G docker $USER
解析rpm
- 通过解析rpm部署包提取
config.toml
,containerd.service
,docker.service
,docker.socket
等配置文件
配置Docker Repo
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum repolist && yum repolist
下载rpm包
yum list docker-ce --showduplicates | sort -r | head -n50
VERSION_STRING=$(dnf list docker-ce --showduplicates | grep docker | sort -k 2 -r | grep '24.0' | head -n 1 | awk '{print $2}' | awk -F':' '{print $2}') && echo $VERSION_STRING
rm -rf rpms-docker && mkdir -pv rpms-docker && cd rpms-docker
repotrack docker-ce-$VERSION_STRING docker-ce-cli-$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
解析rpm包
ls -alh | grep -E 'docker|container'
# 查看rpm包中文件清单
rpm -qpl docker-ce-*
# 提取rpm包文件
rpm2cpio docker-ce-* | cpio -idmv