【Docker二进制包部署完整指南】手搓配置文件部署服务

发布于:2025-08-02 ⋅ 阅读:(22) ⋅ 点赞:(0)

Docker二进制包部署完整指南

🎯 前言:本文将详细介绍如何使用Docker官方二进制包在Linux系统上手动部署Docker环境,包括Docker Engine、Docker Compose的完整安装配置过程,以及自定义存储路径的高级配置。适合运维工程师、系统管理员以及对Docker部署有深度定制需求的开发者。

📋 目录


1. 环境准备

系统要求

  • 操作系统:Linux (Ubuntu 16.04+, CentOS 7+, Debian 9+)
  • 架构:x86_64 (amd64)
  • 内核版本:3.10+ (推荐 4.0+)
  • 存储空间:至少 10GB 可用空间

检查系统信息

# 查看系统版本
cat /etc/os-release

# 查看内核版本
uname -r

# 查看系统架构
uname -m

# 检查磁盘空间
df -h

2. 下载Docker二进制包

2.1 官方下载地址

Docker Engine 二进制包下载

# 创建下载目录
mkdir -p /tmp/docker-install && cd /tmp/docker-install

# 下载最新稳定版 Docker 二进制包
# 官方下载地址:https://download.docker.com/linux/static/stable/x86_64/
wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz

# 或者使用curl下载
curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz -o docker-24.0.7.tgz

2.2 解压二进制包

# 解压下载的tar包
tar -xzf docker-24.0.7.tgz

# 查看解压后的文件
ls -la docker/

# 输出示例:
# containerd
# containerd-shim-runc-v2
# ctr
# docker
# dockerd
# docker-init
# docker-proxy
# runc

3. 安装Docker核心组件

3.1 复制二进制文件到系统路径

# 将所有Docker二进制文件复制到系统路径
sudo cp docker/* /usr/bin/

# 设置执行权限
sudo chmod +x /usr/bin/docker*
sudo chmod +x /usr/bin/containerd*
sudo chmod +x /usr/bin/ctr
sudo chmod +x /usr/bin/runc

# 验证文件复制
ls -la /usr/bin/docker*

3.2 创建Docker用户组

# 创建docker用户组
sudo groupadd docker

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

# 创建Docker工作目录
sudo mkdir -p /var/lib/docker
sudo mkdir -p /etc/docker

4. 配置系统服务

4.1 创建containerd系统服务

# 创建containerd服务配置文件
sudo tee /etc/systemd/system/containerd.service > /dev/null <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

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

[Install]
WantedBy=multi-user.target
EOF

4.2 创建Docker系统服务

# 创建docker服务配置文件
sudo tee /etc/systemd/system/docker.service > /dev/null <<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=containerd.service

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
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
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
EOF

4.3 启动Docker服务

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动containerd服务
sudo systemctl start containerd
sudo systemctl enable containerd

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 检查服务状态
sudo systemctl status docker
sudo systemctl status containerd

5. 自定义存储路径

5.1 方法一:使用daemon.json配置文件(推荐)

# 创建自定义存储目录
sudo mkdir -p /data/docker-data

# 创建Docker配置文件
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "data-root": "/data/docker-data",
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
EOF

# 重启Docker服务
sudo systemctl restart docker

5.2 方法二:修改systemd服务文件

# 修改Docker服务文件,添加--data-root参数
sudo sed -i 's|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --data-root=/data/docker-data|' /etc/systemd/system/docker.service

# 重新加载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

5.3 迁移现有数据(如果需要)

# 停止Docker服务
sudo systemctl stop docker

# 创建新的存储目录
sudo mkdir -p /data/docker-data

# 迁移现有数据
sudo rsync -aP /var/lib/docker/ /data/docker-data/

# 备份原目录
sudo mv /var/lib/docker /var/lib/docker.backup

# 重启Docker服务
sudo systemctl start docker

6. 安装Docker Compose

6.1 方法一:下载独立二进制文件(推荐)

# 获取最新版本号
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)

# 下载Docker Compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

# 或者直接指定版本(推荐)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

# 设置执行权限
sudo chmod +x /usr/bin/docker-compose

# 创建软链接(可选)
sudo ln -sf /usr/bin/docker-compose /usr/local/bin/docker-compose

6.2 方法二:安装Docker Compose V2插件

# 创建插件目录
mkdir -p ~/.docker/cli-plugins/

# 下载Compose V2插件
curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o ~/.docker/cli-plugins/docker-compose

# 设置执行权限
chmod +x ~/.docker/cli-plugins/docker-compose

# 全局安装(可选)
sudo mkdir -p /usr/local/lib/docker/cli-plugins
sudo cp ~/.docker/cli-plugins/docker-compose /usr/local/lib/docker/cli-plugins/

6.3 启用命令补全(可选)

# 下载命令补全脚本
sudo curl -L https://raw.githubusercontent.com/docker/compose/v2.23.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

# 重新加载bash补全
source /etc/bash_completion.d/docker-compose

7. 验证安装

7.1 验证Docker安装

# 检查Docker版本
docker --version
docker version

# 检查Docker系统信息
docker info

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

# 查看Docker存储路径
docker info | grep "Docker Root Dir"

7.2 验证Docker Compose安装

# 检查Docker Compose版本
docker-compose --version

# 或者检查V2版本
docker compose version

# 查看帮助信息
docker-compose --help

7.3 创建测试项目

# 创建测试目录
mkdir -p ~/docker-test && cd ~/docker-test

# 创建测试的docker-compose.yml文件
cat > docker-compose.yml <<EOF
version: '3.8'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
EOF

# 创建测试页面
mkdir html
echo "<h1>Docker 部署成功!</h1>" > html/index.html

# 启动测试服务
docker-compose up -d

# 检查服务状态
docker-compose ps

# 测试访问
curl http://localhost:8080

# 清理测试环境
docker-compose down

8. 常见问题及解决方案

8.1 权限问题

问题:Got permission denied while trying to connect to the Docker daemon socket

解决方案

# 确保用户在docker组中
sudo usermod -aG docker $USER

# 重新登录或执行
newgrp docker

# 检查docker.sock权限
sudo chmod 666 /var/run/docker.sock

8.2 服务启动失败

问题:Docker服务无法启动

解决方案

# 查看详细错误日志
sudo journalctl -u docker.service -f

# 检查配置文件语法
sudo dockerd --validate

# 重置Docker配置
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/*
sudo systemctl start docker

8.3 存储空间不足

问题:No space left on device

解决方案

# 清理无用的镜像和容器
docker system prune -a

# 查看磁盘使用情况
docker system df

# 修改存储路径到更大的磁盘
# 按照第5节的方法修改存储路径

8.4 网络连接问题

问题:无法拉取镜像或网络超时

解决方案

# 配置国内镜像源
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
EOF

# 重启Docker服务
sudo systemctl restart docker

🎉 总结

通过本文的详细步骤,您已经成功完成了Docker的二进制包部署,包括:

Docker Engine:核心容器运行时环境
containerd:容器运行时管理
Docker Compose:多容器应用编排工具
自定义存储:灵活的数据存储配置
系统服务:开机自启动和服务管理

这种部署方式的优势

  • 🔧 完全控制:对安装过程和配置有完全控制权
  • 🎯 定制化:可以根据需求进行深度定制
  • 🚀 性能优化:可以针对特定环境进行性能调优
  • 🔒 安全性:避免了包管理器可能的安全风险

注意事项

  • 定期关注Docker官方更新,及时升级版本
  • 建议在生产环境中配置日志轮转和监控
  • 根据实际需求调整存储驱动和网络配置

💡 小贴士:如果您觉得本文对您有帮助,欢迎点赞收藏!有任何问题欢迎在评论区交流讨论。

相关文章推荐


本文原创,转载请注明出处。


网站公告

今日签到

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