docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker和Docker-compose离线包部署

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

作者:学无止境的宝妈

本文介绍了在局域网内无法访问外网的工作服务器上部署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/

时,需要根据操作系统架构选择正确的版本。

常见的架构类型包括:

版本命名规则示例:

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

总结

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

您可能感兴趣的文章:
阅读全文