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安装minio功能不全问题解决方法

    docker安装minio功能不全问题解决方法

    这篇文章主要介绍了docker安装minio功能不全问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • docker 安装Consul的教程 (最新版2023)

    docker 安装Consul的教程 (最新版2023)

    ​consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,内置了服务注册与 发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其 他工具,这篇文章主要介绍了最新版2023 docker 安装Consul,需要的朋友可以参考下
    2023-12-12
  • docker如何部署etcd集群

    docker如何部署etcd集群

    这篇文章主要介绍了docker如何部署etcd集群问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Docker给容器添加新端口映射的两种方法及常用命令举例详解

    Docker给容器添加新端口映射的两种方法及常用命令举例详解

    Docker是一个开源的应用容器引擎,允许开发者打包和发布应用到任何流行的Linux机器上,并实现虚拟化,这篇文章主要介绍了Docker给容器添加新端口映射的两种方法及常用命令的相关资料,需要的朋友可以参考下
    2025-03-03
  • 如何使用docker部署lnmp多站点

    如何使用docker部署lnmp多站点

    本文给大家介绍如何使用docker部署lnmp多站点,创建一个 Docker 网络以便容器可以在同一网络上进行通信,本文给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • 教你Docker安装GitLab功能

    教你Docker安装GitLab功能

    Gitlab是一个开源分布式版本控制系统,由Ruby开发,有管理项目源代码、版本控制、代码复用与查找等功能,这篇文章主要介绍了Docker安装GitLab,需要的朋友可以参考下
    2022-04-04
  • Docker部署安装Nginx的详细过程

    Docker部署安装Nginx的详细过程

    Nginx 是一款高性能的 web 服务器、反向代理服务器以及电子邮件(IMAP/POP3/SMTP)代理服务器,这篇文章主要介绍了Docker部署安装Nginx,需要的朋友可以参考下
    2024-04-04
  • Docker跨平台和环境部署的过程详解

    Docker跨平台和环境部署的过程详解

    Docker是一个开放源代码的容器化平台,它能够实现应用及其依赖的打包,从而实现跨平台和环境的快速部署,本文介绍了Docker的基本概念、优势和基本使用方法,包括安装、启动、构建镜像和部署应用等步骤
    2024-11-11
  • win10中docker部署和运行countly-server的流程

    win10中docker部署和运行countly-server的流程

    这篇文章主要记录一下windows10中使用docker容器安装和部署countly-server的整个流程,本文给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • 如何将Docker的构建时间减少40%(推荐)

    如何将Docker的构建时间减少40%(推荐)

    这篇文章主要介绍了如何将Docker的构建时间减少40%,本文描述了我们在优化CI管道后获得的一些新见解,需要的朋友可以参考下
    2023-11-11

最新评论