离线环境二进制安装docker

发布于:2025-07-12 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、准备工作(在可联网的机器上操作)

1. 下载 Docker 二进制文件

# 创建下载目录
mkdir -p ~/docker-bin && cd ~/docker-bin

# 下载最新稳定版 Docker 二进制包 (x86_64架构)
DOCKER_VERSION="24.0.7"
wget https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz

# 下载 containerd 二进制
CONTAINERD_VERSION="1.7.11"
wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz

# 下载 runc 二进制
RUNC_VERSION="1.1.10"
wget https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64

# 下载 docker-compose
DOCKER_COMPOSE_VERSION="2.23.0"
wget https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64

# 打包所有文件
tar czvf docker-binaries.tar.gz *

2. 准备 systemd 服务文件

创建 docker.service 文件:

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

[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 创建 docker.socket 文件
cat > docker.socket <<EOF
[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

# 创建 containerd.service 文件
cat > containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
KillMode=process
Delegate=yes
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity

[Install]
WantedBy=multi-user.target
EOF

二、离线机器安装步骤

1. 上传并解压文件

# 创建安装目录
sudo mkdir -p /opt/docker-install
sudo mv docker-binaries.tar.gz /opt/docker-install
cd /opt/docker-install

# 解压文件
sudo tar xzvf docker-binaries.tar.gz

2. 安装二进制文件

# 创建目标目录
sudo mkdir -p /usr/bin/docker-bin

# 安装 Docker 二进制
sudo tar xzvf docker-${DOCKER_VERSION}.tgz -C /usr/bin/docker-bin
sudo cp /usr/bin/docker-bin/docker/* /usr/bin/

# 安装 containerd
sudo tar xzvf containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz -C /usr/bin

# 安装 runc
sudo install -m 755 runc.amd64 /usr/bin/runc

# 安装 docker-compose
sudo install -m 755 docker-compose-linux-x86_64 /usr/bin/docker-compose

# 创建符号链接
sudo ln -s /usr/bin/docker-compose /usr/bin/docker-compose

3. 配置系统服务

# 安装 systemd 服务文件
sudo cp docker.service /etc/systemd/system/
sudo cp docker.socket /etc/systemd/system/
sudo cp containerd.service /etc/systemd/system/

# 创建 docker 用户组
sudo groupadd docker

# 创建必要目录
sudo mkdir -p /etc/docker
sudo mkdir -p /var/lib/docker
sudo mkdir -p /var/run/docker

# 配置 cgroup 驱动
sudo tee /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 加载内核模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 配置系统参数
sudo tee /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

4. 启动 Docker 服务

# 重新加载 systemd
sudo systemctl daemon-reload

# 启用并启动服务
sudo systemctl enable containerd
sudo systemctl start containerd
sudo systemctl enable docker.socket
sudo systemctl start docker.socket
sudo systemctl enable docker
sudo systemctl start docker

# 验证服务状态
sudo systemctl status docker

5. 配置用户权限

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 应用组变更(需要重新登录生效)
newgrp docker

6. 验证安装

# 检查 Docker 版本
docker version

# 运行测试容器
docker run --rm hello-world

# 检查 docker-compose
docker-compose version

三、常见问题解决

1. 内核模块问题

# 检查 overlay 文件系统支持
grep overlay /proc/filesystems

# 如果缺少 overlay 支持
echo "overlay" | sudo tee -a /etc/modules
sudo modprobe overlay

2. 存储驱动问题

# 检查支持的存储驱动
docker info | grep "Storage Driver"

# 如果使用 overlay2 需要内核支持
sudo grep overlay /proc/filesystems

# 修改存储驱动(编辑 /etc/docker/daemon.json)
"storage-driver": "vfs"  # 兼容性最好但性能较差

3. 权限问题

# 修复 /var/run/docker.sock 权限
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

4. 镜像导入(可选)

# 在有网机器上导出镜像
docker save -o ubuntu-image.tar ubuntu:20.04

# 在离线机器上导入
docker load -i ubuntu-image.tar

四、卸载 Docker

# 停止 Docker 服务
sudo systemctl stop docker
sudo systemctl stop containerd
sudo systemctl disable docker
sudo systemctl disable containerd

# 删除二进制文件
sudo rm -f /usr/bin/docker*
sudo rm -f /usr/bin/containerd*
sudo rm -f /usr/bin/ctr
sudo rm -f /usr/bin/runc
sudo rm -f /usr/bin/docker-compose

# 删除服务文件
sudo rm /etc/systemd/system/docker.service
sudo rm /etc/systemd/system/docker.socket
sudo rm /etc/systemd/system/containerd.service

# 删除配置和数据
sudo rm -rf /etc/docker
sudo rm -rf /var/lib/docker
sudo rm -rf /var/run/docker

# 删除用户组
sudo groupdel docker

# 重新加载 systemd
sudo systemctl daemon-reload

五、注意事项

  1. 内核要求:Docker 需要 Linux 内核 3.10 以上,推荐 4.x 版本
uname -r  # 检查内核版本
  1. 架构兼容性:确保下载的二进制文件与系统架构匹配(x86_64/arm64)
  2. 版本兼容:保持 Docker、containerd 和 runc 版本兼容
  3. 生产环境:建议配置以下安全设置:
    • 启用用户命名空间
    • 配置 AppArmor/SELinux
    • 启用内容信任
    • 限制容器权限
  1. 离线镜像管理:建议搭建私有镜像仓库管理离线镜像

二进制安装方式适合无法使用包管理器的环境,但更新和维护相对复杂。对于生产环境,建议使用离线包管理器安装或容器化部署方案。


网站公告

今日签到

点亮在社区的每一天
去签到