本文介绍如何在无法直接访问互联网的环境下,通过二进制包离线安装 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 目录,其中包含 dockerd、docker 等可执行文件。
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 dockerd1. 创建 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
EOF2. 启动并设置开机自启
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动 Docker 服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker3. 管理 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=docker 和 Group=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
EOF4. 准备数据目录权限
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 docker6. 验证守护进程运行用户
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 $USER3. 使组权限生效
用户需要重新登录,或执行以下命令刷新组:
newgrp docker4. 验证普通用户权限
切换至 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/dockerdata2. 使用 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-compose3. 验证安装
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