Docker和Docker-compose離線包部署全過程
適用場景
工作服務(wù)器有時(shí)為局域網(wǎng),不能連外網(wǎng)的情況下。
在線部署的話參考官方文檔:
https://docs.docker.com/engine/install/centos/#install-from-a-package
選擇適合的Docker靜態(tài)包版本
訪問Docker官方靜態(tài)包下載頁面
https://download.docker.com/linux/static/stable/
時(shí),需要根據(jù)操作系統(tǒng)架構(gòu)選擇正確的版本。
常見的架構(gòu)類型包括:
- x86_64/amd64:大多數(shù)現(xiàn)代Linux服務(wù)器的標(biāo)準(zhǔn)架構(gòu)
- aarch64/arm64:ARM架構(gòu)處理器(如樹莓派、AWS Graviton實(shí)例,大部分信創(chuàng)服務(wù)器為arm架構(gòu))
- s390x/ppc64le:IBM Power和Z系統(tǒng)架構(gòu)
版本命名規(guī)則示例:
docker-<version>.tgz(如docker-24.0.7.tgz)表示最新穩(wěn)定版docker-<version>-ce.tgz(如docker-19.03.9-ce.tgz)表示社區(qū)版

docker-compose版本的選擇,可在官網(wǎng)發(fā)行記錄下找到:
https://docs.docker.com/engine/release-notes/20.10/

離線安裝腳本示例
1、準(zhǔn)備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、準(zhǔn)備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日志把服務(wù)器磁盤吃完,max-size單文件最大限制,max-file文件最多個(gè)數(shù),registry-mirrors為加速器,有用的加速器可嘗試以下內(nèi)容
"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同目錄下。
將所有內(nèi)容打包,目錄結(jié)構(gòu)如下:

將上述文件壓縮成zip包后面復(fù)用,zip -r docker_package.zip docker_package
4、開始準(zhǔn)備腳本(示例腳本親測一直在用的)
以下腳本演示如何自動(dòng)化完成Docker和Docker Compose的離線安裝:
#!/bin/bash
#!/bin/bash
# 該腳本是以20.10.8版本為基準(zhǔn),其他版本需要改下面對應(yīng)版本號
# 定義當(dāng)前服務(wù)器最大的目錄,docker默認(rèn)是裝到根目錄下的
max_path=/workspace
max_docker_path=$max_path/docker_data/lib/
# 本機(jī)服務(wù)名寫入hosts文件,我在部署一些中間件或微服務(wù)時(shí)會(huì)提示unknown hostname的錯(cuò)誤,以下腳本可解決
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 '創(chuàng)建docker容器存放的路徑'
mkdir -p ${max_docker_path}
echo '將docker目錄移到/usr/bin目錄下...'
cp ./docker/* /usr/bin/
echo '將docker.service最大目錄進(jìn)行修改'
sed -i -e "s#ExecStart=.*#ExecStart=/usr/bin/dockerd --graph ${max_docker_path}#g" ./docker.service
# 以下命令是解決有些操作系統(tǒng)部署后 內(nèi)存不夠用的問題 以下可解決
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 '添加文件權(quán)限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加載配置文件...'
systemctl daemon-reload
echo '啟動(dòng)docker...'
systemctl start docker
echo '設(shè)置開機(jī)自啟...'
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
# 清理戰(zhàn)場
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服務(wù) systemctl stop docker #刪除docker二進(jìn)制文件 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二進(jìn)制文件 rm -f /usr/bin/docker-compose
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker給容器添加新端口映射的兩種方法及常用命令舉例詳解
Docker是一個(gè)開源的應(yīng)用容器引擎,允許開發(fā)者打包和發(fā)布應(yīng)用到任何流行的Linux機(jī)器上,并實(shí)現(xiàn)虛擬化,這篇文章主要介紹了Docker給容器添加新端口映射的兩種方法及常用命令的相關(guān)資料,需要的朋友可以參考下2025-03-03
Docker跨平臺(tái)和環(huán)境部署的過程詳解
Docker是一個(gè)開放源代碼的容器化平臺(tái),它能夠?qū)崿F(xiàn)應(yīng)用及其依賴的打包,從而實(shí)現(xiàn)跨平臺(tái)和環(huán)境的快速部署,本文介紹了Docker的基本概念、優(yōu)勢和基本使用方法,包括安裝、啟動(dòng)、構(gòu)建鏡像和部署應(yīng)用等步驟2024-11-11
win10中docker部署和運(yùn)行countly-server的流程
這篇文章主要記錄一下windows10中使用docker容器安裝和部署countly-server的整個(gè)流程,本文給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-11-11
如何將Docker的構(gòu)建時(shí)間減少40%(推薦)
這篇文章主要介紹了如何將Docker的構(gòu)建時(shí)間減少40%,本文描述了我們在優(yōu)化CI管道后獲得的一些新見解,需要的朋友可以參考下2023-11-11

