Docker和Docker-compose離線包部署全過程
適用場(chǎng)景
工作服務(wù)器有時(shí)為局域網(wǎng),不能連外網(wǎng)的情況下。
在線部署的話參考官方文檔:
https://docs.docker.com/engine/install/centos/#install-from-a-package
選擇適合的Docker靜態(tài)包版本
訪問Docker官方靜態(tài)包下載頁(yè)面
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)備腳本(示例腳本親測(cè)一直在用的)
以下腳本演示如何自動(dòng)化完成Docker和Docker Compose的離線安裝:
#!/bin/bash
#!/bin/bash
# 該腳本是以20.10.8版本為基準(zhǔn),其他版本需要改下面對(duì)應(yīng)版本號(hào)
# 定義當(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 "檢測(cè)到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 "檢測(cè)到 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)場(chǎng)
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容器無(wú)法訪問外網(wǎng),但是宿主機(jī)卻可以的問題
這篇文章主要介紹了docker容器無(wú)法訪問外網(wǎng),但是宿主機(jī)卻可以的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
在Ubuntu上使用Docker部署DeepSeek的詳細(xì)步驟
docker是容器化技術(shù)的代表,它能夠?qū)?yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的容器,在 DeepSeek 部署中,使用 docker 可以確保 deepseek - r1 在不同環(huán)境中具有一致的運(yùn)行狀態(tài),本文給大家介紹了在Ubuntu上使用Docker部署DeepSeek的詳細(xì)步驟,需要的朋友可以參考下2025-02-02
搭建docker-nginx服務(wù),訪問nginx報(bào)錯(cuò)403問題及解決
這篇文章主要介紹了搭建docker-nginx服務(wù),訪問nginx報(bào)錯(cuò)403問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Docker 教程之存出和載入鏡像,移除及鏡像實(shí)現(xiàn)原理
這篇文章主要介紹了Docker 教程之存出和載入鏡像,移除及鏡像實(shí)現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下2016-12-12
docker search 報(bào)錯(cuò)但 pull 正常的問題解析
用戶在Windows 11 WSL2 Ubuntu 20.04中使用docker search報(bào)錯(cuò),但docker pull正常,建議通過docker pull直接獲取鏡像,如搜索mysql時(shí)指向特定地址,本文給大家介紹docker search 報(bào)錯(cuò)但 pull 正常的問題解析,感興趣的朋友一起看看吧2025-07-07
Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)
這篇文章介紹了Docker向數(shù)據(jù)卷Volume寫入數(shù)據(jù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Docker環(huán)境下的Apache NiFi安裝實(shí)踐及遇到問題解決方案
由于最近用到數(shù)據(jù)同步,故打算采用中間件工具來(lái)做數(shù)據(jù)同步,誰(shuí)知第一步部署Apache NiFi環(huán)境就耽擱了好久,其中遇到一些問題,故記錄下來(lái)部署成功記錄,下面給大家詳細(xì)介紹Docker環(huán)境下的Apache NiFi安裝實(shí)踐及遇到問題解決方案,感興趣的朋友一起看看吧2025-05-05
在Linux?Docker中部署RStudio?Server實(shí)現(xiàn)遠(yuǎn)程訪問的操作
下面介紹在Linux?docker中安裝RStudio?Server并結(jié)合cpolar內(nèi)網(wǎng)穿透工具,實(shí)現(xiàn)遠(yuǎn)程訪問,docker方式安裝可以避免很多問題,一鍵安裝,如設(shè)備沒有安裝docker,需提前安裝docker,對(duì)?Docker部署RStudio?Server相關(guān)知識(shí)感興趣的朋友一起看看吧2023-12-12

