当前位置: 首页 > news >正文

离线环境二进制安装docker

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

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. 离线镜像管理:建议搭建私有镜像仓库管理离线镜像

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

http://www.dtcms.com/a/274786.html

相关文章:

  • uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • hbuilderx打包的应用上传苹果应用商店最简方法
  • 字节豆包又一个新功能,超级实用,4 种玩法,你肯定用得上!(建议收藏)
  • Uniapp视频聊天软件内容监控插件开发指南
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • 2-Git提交本地项目到远程仓库
  • 问有几条病狗?
  • 【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
  • 机器学习-06(Optimization-自动调整学习率)
  • consul 的安装与服务发现
  • MOSS-TTSD V2版 - 文本到语音对话生成 支持零样本多人语音克隆 一键整合包下载
  • 一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答(附教程)
  • OBB旋转框检测配置与训练全流程(基于 DOTA8 数据集)
  • 第3章 操作臂运动学(笔记总结)
  • Hangfire 调用报错解决方案总结
  • 经典的垃圾收集器!!!
  • day02-数组part02
  • day67—DFS—被围绕的区域(LeetCode-130)
  • 飞算JavaAI 实战笔记
  • Qt中QGraphicsView类应用解析:构建高效2D图形界面的核心技术
  • 迭代器(c++)、智能指针
  • 【C/C++】动态内存分配:从 C++98 裸指针到现代策略
  • PyTorch武侠演义 第一卷:初入江湖 第1章:武林新秀遇Tensor - 张量基础
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第九篇(排名不分先后)】
  • 飞书CEO谢欣:挑战巨头,打造AI新时代的Office
  • Rail开发日志_6
  • Python类型注解中的`Optional`:深入理解难点解析(进阶版)
  • EndNote快速入手指南
  • CDN 加速与安全防护:双剑合璧的技术协同