Docker和Docker-compose离线包部署全过程

 更新时间:2025年10月31日 09:41:22   作者:学无止境的宝妈  
本文介绍了在局域网内无法访问外网的工作服务器上部署Docker和Docker Compose的步骤,包括选择合适的Docker静态包版本、下载Docker官方静态包、配置Docker服务和daemon.json文件、下载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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker容器无法访问外网,但是宿主机却可以的问题

    docker容器无法访问外网,但是宿主机却可以的问题

    这篇文章主要介绍了docker容器无法访问外网,但是宿主机却可以的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 在Ubuntu上使用Docker部署DeepSeek的详细步骤

    在Ubuntu上使用Docker部署DeepSeek的详细步骤

    docker是容器化技术的代表,它能够将应用程序及其依赖项打包成一个独立的容器,在 DeepSeek 部署中,使用 docker 可以确保 deepseek - r1 在不同环境中具有一致的运行状态,本文给大家介绍了在Ubuntu上使用Docker部署DeepSeek的详细步骤,需要的朋友可以参考下
    2025-02-02
  • 搭建docker-nginx服务,访问nginx报错403问题及解决

    搭建docker-nginx服务,访问nginx报错403问题及解决

    这篇文章主要介绍了搭建docker-nginx服务,访问nginx报错403问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Docker 教程之存出和载入镜像,移除及镜像实现原理

    Docker 教程之存出和载入镜像,移除及镜像实现原理

    这篇文章主要介绍了Docker 教程之存出和载入镜像,移除及镜像实现原理的相关资料,需要的朋友可以参考下
    2016-12-12
  • docker search 报错但 pull 正常的问题解析

    docker search 报错但 pull 正常的问题解析

    用户在Windows 11 WSL2 Ubuntu 20.04中使用docker search报错,但docker pull正常,建议通过docker pull直接获取镜像,如搜索mysql时指向特定地址,本文给大家介绍docker search 报错但 pull 正常的问题解析,感兴趣的朋友一起看看吧
    2025-07-07
  • Docker向数据卷Volume写入数据

    Docker向数据卷Volume写入数据

    这篇文章介绍了Docker向数据卷Volume写入数据的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • 关于docker中 WSL 配置与修改问题

    关于docker中 WSL 配置与修改问题

    这篇文章主要介绍了docker中 WSL 配置与修改,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 详解Docker-compose networks 的例子

    详解Docker-compose networks 的例子

    这篇文章主要介绍了详解Docker-compose networks 的例子,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Docker环境下的Apache NiFi安装实践及遇到问题解决方案

    Docker环境下的Apache NiFi安装实践及遇到问题解决方案

    由于最近用到数据同步,故打算采用中间件工具来做数据同步,谁知第一步部署Apache NiFi环境就耽搁了好久,其中遇到一些问题,故记录下来部署成功记录,下面给大家详细介绍Docker环境下的Apache NiFi安装实践及遇到问题解决方案,感兴趣的朋友一起看看吧
    2025-05-05
  • 在Linux Docker中部署RStudio Server实现远程访问的操作

    在Linux Docker中部署RStudio Server实现远程访问的操作

    下面介绍在Linux docker中安装RStudio Server并结合cpolar内网穿透工具,实现远程访问,docker方式安装可以避免很多问题,一键安装,如设备没有安装docker,需提前安装docker,对 Docker部署RStudio Server相关知识感兴趣的朋友一起看看吧
    2023-12-12

最新评论