在企业生产环境中,服务器往往处于内网隔离状态,无法直接访问互联网。这种环境下,离线安装Docker成为了一项必备技能。我最近有在ubuntu24上离线部署,正好坐下记录。本文将详细介绍Linux系统下离线安装Docker的完整流程,涵盖准备工作、安装步骤、常见问题及优化配置。

v2-a62710d971c47422f25eca254b2add8a_1440w.png
离线安装Docker
下载安装包
离线安装包下载地址:download.docker.com/linux/stati...
我此处下载的是 x86_64/docker-28.4.0.tgz
准备安装文件
- 创建 docker.service
我们将下载后的文件放到我们的服务器上,在安装包同级目录下创建docker.service 文件,内容如下:
ini
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
此文件有些旧版本不兼容
- 创建安装脚本
在安装包同级目录下创建instll.sh 脚本文件,内容如下:
bash
#!/bin/sh
echo '解压tar包......'
tar -xvf $1 --overwrite
echo '将docker目录移到/usr/bin目录下.....'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录.....'
cp docker.service /etc/systemd/system/
echo '添加文件权限.....'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件.....'
systemctl daemon-reload
echo '启动docker.....'
systemctl start docker
echo '设置开机自启.....'
systemctl enable docker.service
echo 'docker安装成功.....'
docker -v
- 创建卸载脚本
在安装包同级目录下创建uninstall.sh 脚本文件,内容如下:
bash
#!/bin/sh
echo '删除docker.service......'
rm -f /etc/systemd/system/docker.service
echo '删除docker文件......'
# 删除 docker
sudo rm -rf /usr/bin/docker*
# 删除 containerd
sudo rm -rf /usr/bin/containerd*
# 删除 docker 运行时 ID
sudo rm -rf /var/run/docker*
# 卸载 docker-compose
sudo rm -rf /usr/local/bin/docker-compose
sudo rm -rf /var/lib/docker*
sudo rm -rf /var/lib/containerd*
echo '重新加载配置文件'
systemctl daemon-reload
echo '卸载成功...'
创建完之后给脚本赋权限
bash
chmod +x install.sh uninstall.sh
安装
执行部署脚本install.sh,使用root权限执行
bash
sudo ./install.sh docker-28.4.0.tgz
出现如下信息则代表成功

_20251204_131322.png
如果不想用脚本安装的家人们可以挨条执行脚本中的命令进行安装
测试
我们可以从别的服务器上copy一个镜像tar文件过来,使用以下命令将镜像保存未tar文件
docker save -o nginx.tar nginx:1.21.5
执行完之后会有一个nginx.tar文件,将此文件拷贝到我们刚刚安装了docker的服务器上,使用以下命令加载镜像
css
sudo docker load -i nginx.tar
加载完之后我们就可以使用以下名称查看到镜像了
sudo docker images
使用以下命令启动容器服务
arduino
sudo docker run -p 80:80 nginx:1.21.5
启动之后我们就可以在浏览器中查看服务了。
到此,如果没有问题的话说明我们离线安装docker成功了
配置Docker用户组
Docker 利用 Linux 的用户和组权限来管理对 Docker 守护进程的访问权限。一般情况下,只有 root 用户和属于 docker 用户组的用户才被允许访问 Docker 守护进程。在 Linux 系统上使用 Docker 时,如果您尚未配置 docker 用户组,那么作为非 root 用户执行 Docker 相关命令将要求使用 sudo 来提升权限。
默认情况下,Docker 在安装过程中会创建一个名为 docker 的用户组,用于管理 Docker 容器。
- 您可以使用以下命令来查看是否存在 docker 用户组:
csharp
getent group docker
-
如果不存在,则使用以下命令创建docker用户组
sudo groupadd docker
-
将用户添加到 Docker 用户组
sudo usermod -aG docker your_username
或者
css
sudo gpasswd -a your_username docker
-
为了使更改生效,使用以下命令更新用户组。
newgrp docker
docker-compose安装
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。
从github上下载docker-compose二进制文件安装
- 下载最新版的docker-compose文件
官方文档地址:docs.docker.com/compose/ins...
下载地址:github.com/docker/comp...
- 添加可执行权限
bash
cd /usr/local/bin/
mv docker-compose-linux-x86_64 docker-compose
sudo chmod +x docker-compose
- 测试安装结果
css
docker-compose --version
Docker Compose version v2.5.0
结语
离线安装Docker虽然比在线安装复杂,但掌握了正确的方法和工具后,可以大大提高在内网环境部署的效率。关键是要做好前期规划,确保所有依赖包的完整性,并建立完善的镜像管理机制。实践是最好的老师。建议先在测试环境多次演练,熟练掌握后再在生产环境部署。
本文使用 mdnice 排版