本文介绍如何在无法直接访问互联网的环境下,通过二进制包离线安装 Docker,并将其配置为系统服务,同时涵盖用户权限、镜像加速、存储驱动优化等常用设置。


一、离线安装 Docker

1. 下载 Docker 二进制包

访问 Docker 官方下载页面,选择对应操作系统架构的安装包:

https://download.docker.com/linux/static/stable/x86_64/

本文以 docker-18.06.1-ce.tgz 为例,请根据实际服务器架构(如 x86_64、aarch64 等)选择相应版本。若在离线环境,请提前在可联网机器上下载后拷贝至目标服务器。

2. 上传安装包

通过 FTP、SCP 等工具将下载好的 .tgz 文件上传至目标服务器,例如上传至 /tmp 目录。

3. 解压安装包

cd /tmp
tar zxf docker-18.06.1-ce.tgz

解压后会生成一个 docker 目录,其中包含 dockerddocker 等可执行文件。

4. 将 Docker 命令复制到系统路径

为了方便直接使用 docker 命令,将解压出的所有文件复制到 /usr/bin/ 目录:

sudo cp /tmp/docker/* /usr/bin/

5. 启动 Docker 守护进程(临时方式)

sudo dockerd &

后台运行 dockerd,此时 Docker 已可正常使用。

6. 验证安装

执行以下命令,若正常输出版本和系统信息,则表示安装成功:

docker info

二、将 Docker 注册为系统服务

为避免手动启动,建议将 Docker 配置为 systemd 管理服务。

注意:若之前已通过 dockerd & 启动,请先结束该进程:

sudo pkill dockerd

1. 创建 service 文件

/usr/lib/systemd/system/ 目录下创建 docker.service 文件:

sudo vi /usr/lib/systemd/system/docker.service

写入以下内容:

[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
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

或者使用 cat 方式快速写入:

sudo cat > /usr/lib/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
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

2. 启动并设置开机自启

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

# 启动 Docker 服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

3. 管理 Docker 服务

# 停止服务
sudo systemctl stop docker

# 重启服务
sudo systemctl restart docker

# 查看服务状态
sudo systemctl status docker

三、将 Docker 守护进程改为 docker 用户运行

为了安全,Docker 守护进程不应以 root 身份运行。我们创建一个不可登录的系统用户 docker,并配置 systemd 服务以该用户身份启动。

1. 创建 docker 系统用户

# 创建 docker 组(如果不存在)
sudo groupadd -r docker

# 创建系统用户 docker,指定 home 目录为 /home/docker,禁止登录
sudo useradd -m -r -s /sbin/nologin -g docker -d /home/docker docker
  • -r:创建系统用户
  • -s /sbin/nologin:禁止登录
  • -g docker:主组为 docker
  • -d /home/docker:主目录(可根据需要修改)

2. 重新部署 Docker 二进制文件

为了与 root 环境隔离,将 Docker 二进制文件放到 docker 用户目录下:

# 创建 bin 目录并设置权限
sudo mkdir -p /home/docker/bin
sudo chown docker:docker /home/docker/bin

# 假设之前解压的 docker 目录仍在 /tmp/docker,将其复制到新目录
cd /tmp
sudo cp -r docker/* /home/docker/bin/

# 确保二进制文件属主正确
sudo chown -R docker:docker /home/docker/bin

此时,/home/docker/bin/dockerd/home/docker/bin/docker 等文件已就位。

3. 配置 systemd 服务文件

创建自定义服务文件 /etc/systemd/system/docker.service(推荐使用此路径覆盖系统默认配置):

sudo vi /etc/systemd/system/docker.service

写入以下内容(关键:User=dockerGroup=docker):

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

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

[Install]
WantedBy=multi-user.target

或者使用 cat 方式快速写入:

sudo 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
User=docker
Group=docker
ExecStart=/home/docker/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

4. 准备数据目录权限

Docker 默认数据目录为 /var/lib/docker,该目录必须由 docker 用户可读写。创建并授权:

sudo mkdir -p /var/lib/docker
sudo chown -R docker:docker /var/lib/docker

如果后续修改了数据目录(见第六节),请确保新目录属主也为 docker

5. 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

6. 验证守护进程运行用户

ps aux | grep dockerd | grep -v grep

输出应显示进程属主为 docker


四、用户权限管理(非 root 运行 Docker 命令)

默认情况下,Docker 守护进程通过 docker 用户组进行权限控制。将普通用户加入 docker 组后,无需 sudo 即可运行 docker 命令。

1. 确认 socket 权限

Docker 守护进程会在 /var/run/docker.sock 创建 socket 文件,默认属主为 docker:docker,权限 660。

ls -l /var/run/docker.sock

输出示例:srw-rw---- 1 docker docker 0 ...

2. 将普通用户加入 docker 组

假设要让用户 john 能够使用 Docker:

sudo usermod -aG docker john

如果想让当前登录用户加入组:

sudo usermod -aG docker $USER

3. 使组权限生效

用户需要重新登录,或执行以下命令刷新组:

newgrp docker

4. 验证普通用户权限

切换至 john 用户,执行:

docker info

应正常输出信息,无需 sudo


五、配置镜像加速器(可选)

由于网络原因,建议配置国内镜像加速器,以提升镜像拉取速度。

编辑 /etc/docker/daemon.json 文件:

sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json

写入以下镜像源配置(可根据实际需要增删,推荐使用阿里云等稳定加速器):

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.baidubce.com"
  ]
}

若同时需要配置存储驱动或其他参数,可一并写入,例如:

{
  "registry-mirrors": ["https://rsbud4vc.mirror.aliyuncs.com", "https://registry.docker-cn.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

配置完成后,重新加载并重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker

注意ghcr.io 为 GitHub Container Registry,不属于国内加速器,请勿将其误用为镜像加速地址。


六、存储目录与存储驱动优化

1. 修改 Docker 数据存储目录

默认数据目录为 /var/lib/docker,若希望更改至其他位置(如大容量磁盘),可通过 data-root 指定:

{
  "data-root": "/home/dockerdata"
}

修改后需确保新目录属主为 docker 用户,并拥有读写权限:

sudo mkdir -p /home/dockerdata
sudo chown docker:docker /home/dockerdata

2. 使用 overlay2 存储驱动

overlay2 是当前推荐的存储驱动,性能更优。使用前需确保:

  • Linux 内核版本 ≥ 4.0,或 RHEL/CentOS 内核版本 ≥ 3.10.0-514
  • 底层文件系统为 ext4 或 xfs,并支持 OverlayFS

daemon.json 中指定:

{
  "storage-driver": "overlay2"
}

完整示例:

{
  "data-root": "/data/docker",
  "storage-driver": "overlay2"
}

3. 迁移现有数据(可选)

若已有数据在 /var/lib/docker,需迁移至新目录:

# 停止 Docker 服务
sudo systemctl stop docker

# 迁移数据(示例)
sudo rsync -avxP /var/lib/docker/ /data/docker/

# 修改 daemon.json 指定 data-root 后重启服务
sudo systemctl start docker

七、安装 Docker Compose(可选)

Docker Compose 用于管理多容器应用,可通过二进制方式安装。注意:在完全离线环境下,请提前在可联网机器下载好二进制文件,再拷贝至目标服务器。

1. 下载 Compose 二进制文件

在线方式(适用于可临时联网环境):

# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 或指定版本,如 v2.24.5
DOCKER_COMPOSE_VERSION="v2.24.5"
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

离线方式:在可联网机器上下载对应架构的二进制文件(例如 docker-compose-linux-x86_64),重命名为 docker-compose,然后通过 U 盘等介质拷贝至目标服务器的 /usr/local/bin/ 目录。

2. 添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

3. 验证安装

docker-compose --version

八、常用命令参考

拉取镜像(使用加速器)

docker pull docker.xuanyuan.me/nginx:latest
docker pull docker.xuanyuan.me/commanevercoma/isce:v1.2

查看 Docker 信息

docker info

查看服务日志

sudo journalctl -u docker -f
最后修改:2026 年 04 月 01 日
如果觉得我的文章对你有用,请随意赞赏