Docker和Docker-compose离线包部署全过程
适用场景
工作服务器有时为局域网,不能连外网的情况下。
在线部署的话参考官方文档:
https://docs.docker.com/engine/install/centos/#install-from-a-package
选择适合的Docker静态包版本
访问Docker官方静态包下载页面
https://download.docker.com/linux/static/stable/
时,需要根据操作系统架构选择正确的版本。
常见的架构类型包括:
- x86_64/amd64:大多数现代Linux服务器的标准架构
- aarch64/arm64:ARM架构处理器(如树莓派、AWS Graviton实例,大部分信创服务器为arm架构)
- s390x/ppc64le:IBM Power和Z系统架构
版本命名规则示例:
docker-<version>.tgz(如docker-24.0.7.tgz)表示最新稳定版docker-<version>-ce.tgz(如docker-19.03.9-ce.tgz)表示社区版

docker-compose版本的选择,可在官网发行记录下找到:
https://docs.docker.com/engine/release-notes/20.10/

离线安装脚本示例
1、准备docker.service
vi 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 # 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 --graph /workspace/docker_data/docker/lib/ 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
2、准备daemon.json文件
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "512m",
"max-file": "10",
"compress": "true"
},
"storage-driver": "overlay2",
"registry-mirrors" : [
"https://ot2k4d59.mirror.aliyuncs.com/"
],
"insecure-registries": ["xx.xx.xx.xx"]
}
log-opts为日志限制,以防docker日志把服务器磁盘吃完,max-size单文件最大限制,max-file文件最多个数,registry-mirrors为加速器,有用的加速器可尝试以下内容
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.mybacc.com",
"https://dytt.online",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://docker.yomansunter.com",
"https://aicarbon.xyz",
"https://666860.xyz",
"https://docker.zhai.cm",
"https://a.ussh.net",
"https://hub.littlediary.cn",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://dockerproxy.net"
],
3、下载docker和docker-compose文件
按照开头说的地址下载docker和docker-compose文件
放到上面docke.service和daemon.json同目录下。
将所有内容打包,目录结构如下:

将上述文件压缩成zip包后面复用,zip -r docker_package.zip docker_package
4、开始准备脚本(示例脚本亲测一直在用的)
以下脚本演示如何自动化完成Docker和Docker Compose的离线安装:
#!/bin/bash
#!/bin/bash
# 该脚本是以20.10.8版本为基准,其他版本需要改下面对应版本号
# 定义当前服务器最大的目录,docker默认是装到根目录下的
max_path=/workspace
max_docker_path=$max_path/docker_data/lib/
# 本机服务名写入hosts文件,我在部署一些中间件或微服务时会提示unknown hostname的错误,以下脚本可解决
grep "127.0.0.1 $(hostname)" /etc/hosts >/dev/null || echo "127.0.0.1 $(hostname)" >> /etc/hosts
if which docker >/dev/null; then
echo "检测到docker已安装,跳过安装步骤"
else
unzip docker_package.zip
mv ./docker_package/* ./
mkdir -p /etc/docker
cp ./daemon.json /etc/docker/
echo '解压tar包...'
tar -xvf $(pwd)/docker-20.10.8.tgz
echo '创建docker容器存放的路径'
mkdir -p ${max_docker_path}
echo '将docker目录移到/usr/bin目录下...'
cp ./docker/* /usr/bin/
echo '将docker.service最大目录进行修改'
sed -i -e "s#ExecStart=.*#ExecStart=/usr/bin/dockerd --graph ${max_docker_path}#g" ./docker.service
# 以下命令是解决有些操作系统部署后 内存不够用的问题 以下可解决
kernel_real=`uname -r`
if [[ $kernel_real == *oe* ]]; then
sed -i -e "s#LimitNOFILE=.*#LimitNOFILE=65535#g" ./docker.service
sed -i -e "s#LimitNPROC=.*#LimitNPROC=65535#g" ./docker.service
sed -i -e "s#LimitCORE=.*#LimitCORE=65535#g" ./docker.service
fi
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
fi
if which docker-compose >/dev/null; then
echo "检测到 Docker Compose 已安装,跳过安装步骤"
else
echo 'docker-compose 安装'
cp ./docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
echo 'docker-compose安装成功...'
docker-compose -v
fi
# 清理战场
rm -rf docker_package.zip
rm -rf docker_package
rm -rf docker-compose-linux-x86_64
rm -rf docker.service
rm -rf daemon.json
rm -rf docker-20.10.8.tgz
rm -rf docker
卸载docker和docker-compose
原路卸载
#停止docker服务 systemctl stop docker #删除docker二进制文件 rm -f /usr/bin/containerd rm -f /usr/bin/containerd-shim rm -f /usr/bin/containerd-shim-runc-v2 rm -f /usr/bin/ctr rm -f /usr/bin/docker rm -f /usr/bin/dockerd rm -f /usr/bin/docker-init rm -f /usr/bin/docker-proxy rm -f /usr/bin/runc #卸载docker-compose二进制文件 rm -f /usr/bin/docker-compose
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
在Ubuntu上使用Docker部署DeepSeek的详细步骤
docker是容器化技术的代表,它能够将应用程序及其依赖项打包成一个独立的容器,在 DeepSeek 部署中,使用 docker 可以确保 deepseek - r1 在不同环境中具有一致的运行状态,本文给大家介绍了在Ubuntu上使用Docker部署DeepSeek的详细步骤,需要的朋友可以参考下2025-02-02
搭建docker-nginx服务,访问nginx报错403问题及解决
这篇文章主要介绍了搭建docker-nginx服务,访问nginx报错403问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-03-03
docker search 报错但 pull 正常的问题解析
用户在Windows 11 WSL2 Ubuntu 20.04中使用docker search报错,但docker pull正常,建议通过docker pull直接获取镜像,如搜索mysql时指向特定地址,本文给大家介绍docker search 报错但 pull 正常的问题解析,感兴趣的朋友一起看看吧2025-07-07
Docker环境下的Apache NiFi安装实践及遇到问题解决方案
由于最近用到数据同步,故打算采用中间件工具来做数据同步,谁知第一步部署Apache NiFi环境就耽搁了好久,其中遇到一些问题,故记录下来部署成功记录,下面给大家详细介绍Docker环境下的Apache NiFi安装实践及遇到问题解决方案,感兴趣的朋友一起看看吧2025-05-05
在Linux Docker中部署RStudio Server实现远程访问的操作
下面介绍在Linux docker中安装RStudio Server并结合cpolar内网穿透工具,实现远程访问,docker方式安装可以避免很多问题,一键安装,如设备没有安装docker,需提前安装docker,对 Docker部署RStudio Server相关知识感兴趣的朋友一起看看吧2023-12-12


最新评论