Docker 安裝與換源腳本#
一鍵執行命令#
整合安裝 Docker Engine
和 Docker Compose
,支援選擇或更換軟體源(Docker 軟體倉庫)以及映像倉庫、安裝指定版本、重裝等功能,支援 ARM 架構
腳本參考官方文件使用系統套件管理工具進行安裝,不存在相容性、安全性等問題,可安裝的版本由 Docker CE 倉庫決定
-
完全取代官方安裝腳本
與 get.docker.com 邏輯一致,融合了本專案換源架構以及特性
-
支援衍生作業系統
相容於大量不受官方安裝腳本支援的衍生作業系統
-
功能強大、無與倫比
全網最實用的開源運維腳本之一,效能卓越
-
精妙絕倫的互動設計
易於理解和使用的互動式命令列介面,遙遙領先
Docker Compose 不再需要獨立安裝
Docker Compose 自 V2 版本起開始作為 Docker CLI(命令列)的一部分,腳本預設整合安裝該插件,請使用 docker compose
指令取代 docker-compose
軟體源說明
-
__Docker CE 軟體倉庫
Docker CE 全稱 Docker Community Edition(Docker 社群版),是 Docker Engine 的別稱,該倉庫用於下載並安裝 Docker 相關軟體包
-
Docker Registry 映像倉庫
用於控制拉取鏡像的預設軟體源儲存倉庫,又稱為鏡像加速器,預設為官方容器映像倉庫 Docker Hub
由於一些不可抗力的因素,中國大陸網路環境下目前無法訪問 Docker Hub 因此無法正常拉取鏡像,建議使用下方提到的中國大陸可用映像倉庫源
註:腳本內的指定 Web 協定互動僅用於控制 Docker CE
軟體源,Docker Registry
強制使用 HTTPS
協定
預設的映像倉庫源
名稱 | 位址 | 說明 |
---|---|---|
毫秒鏡像 | docker.1ms.run | 企業鏡像站,CDN智慧分送速度極快,支援付費定制,推薦使用 |
Docker Proxy | dockerproxy.net | 由 ghproxy 創建,可用性高但速度很慢,支援企業鏡像付費加速 |
DaoCloud | docker.m.daocloud.io | 老牌企業鏡像站,可用性高且速度快,現為白名單模式 |
1Panel 鏡像 | docker.1panel.live | 企業產品自用鏡像 |
本開源專案不適合採集個人自建的鏡像加速器,如有需要可搭配命令選項自行使用
註:中國大陸雲端運算企業的映像倉庫軟體源僅針對其業務,中國大陸境內實例可能仍無法造訪 Docker Hub
命令選項(進階用法)#
命令選項(名稱/含義/值):
--source 指定 Docker CE 軟體源位址(網域名稱或IP) 位址
--source-registry 指定 Docker 映像倉庫位址 (網域名稱或IP) 位址
--branch 指定 Docker CE 軟體源倉庫 (路徑) 倉庫名稱
--branch-version 指定 Docker CE 軟體源倉庫版本 版本號
--designated-version 指定 Docker Engine 安裝版本 版本號
--codename 指定 Debian 係作業系統的版本代號 代號名稱
--protocol 指定 Docker CE 源的 Web 協定 http 或 https
--use-intranet-source 是否優先使用內部網路 Docker CE 軟體源位址 true 或 false
--install-latest 是否安裝最新版本的 Docker Engine true 或 false
--close-firewall 是否關閉防火牆 true 或 false
--clean-screen 是否在運行前清除螢幕上的所有內容 true 或 false
--lang 指定腳本輸出的語言 语言
--only-registry 僅更換映像倉庫模式 無
--ignore-backup-tips 忽略覆蓋備份提示 無
--pure-mode 純淨模式,精簡列印內容 無
--help 查看幫助選單 無
名稱 | 意義 | 選項值 |
---|---|---|
--source |
指定 Docker CE 軟體源位址(網域名稱或IP) |
位址 |
--source-registry |
指定 Docker 映像倉庫位址(網域名稱或IP) |
位址 |
--branch |
指定 Docker CE 軟體源倉庫(路徑) |
倉庫名稱(詳見下方文件) |
--branch-version |
指定 Docker CE 軟體源倉庫版本 |
版本號(詳見下方文件) |
--designated-version |
指定 Docker Engine 安裝版本 |
版本號(詳見下方文件) |
--codename |
指定 Debian 係作業系統的版本代號 |
代號名稱 |
--protocol |
指定 Docker CE 源的 Web 協定 |
http 或 https |
--use-intranet-source |
是否優先使用內部網路 Docker CE 軟體源位址 |
true 或 false |
--install-latest |
是否安裝最新版本的 Docker Engine |
true 或 false |
--close-firewall |
是否關閉防火牆 | true 或 false |
--clean-screen |
是否在運行前清除螢幕上的所有內容 | true 或 false |
--lang |
指定腳本輸出的語言 | 語言ID(詳見下方文件) |
--only-registry |
僅更換映像倉庫模式 | 無 |
--ignore-backup-tips |
忽略覆蓋備份提示(即不覆蓋備份) | 無 |
--pure-mode |
純淨模式,精簡列印內容 | 無 |
--help |
查看幫助選單 | 無 |
軟體源完整格式
<WEB協定>://<軟體源位址(網域名稱或IP)>/<軟體源倉庫(路徑)>
-
指定映像倉庫位址#
-
僅更換映像倉庫#
僅更換鏡像加速器,當偵測到未安裝 Docker 時會報錯跳出
-
安裝
jq
軟體包 -
指定映像倉庫位址
請手動替換
<example.registry.com>
為映像倉庫位址後在執行,詳見上方 “專案內置的映像倉庫源” 表格中的位址列SOURCE_REGISTRY='"https://example.registry.com","https://test.registry.com"'
,注意用英文逗號分割 -
替換映像倉庫位址
-
重新啟動 Docker 服務
-
-
指定
Docker CE
軟體源位址#注意該位址路徑需要包含映像站的 Docker CE 軟體源倉庫路徑即
docker-ce
-
指定 Docker CE 軟體源倉庫#
腳本預設會自動判斷一般無需指定,除非你有特殊需求
倉庫名稱是固定的,目前只有
centos
debian
fedora
raspbian
rhel
sles
static
ubuntu
這幾個
詳情請見 官方安裝文件 及 Docker CE 官方倉庫还可以指定倉庫版本號bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant \ --branch centos \ --branch-version 9
可以使用此選項來控制安裝軟體套件的相容性(僅適用於紅帽係作業系統),具體詳見對應倉庫目錄中代表版本號的路徑名稱(正整數)。
-
指定 Docker Engine 安裝版本#
指定安裝版本時會忽略
是否安裝最新版本
的命令選項,格式為主版.次版本.補丁版本
,例如28.4.1
。如果指定的版本不存在或不支援當前作業系統,屆時腳本會報錯跳出
查看版本清單的方法
未出現在該清單中的版本則不支援透過本腳本安裝,如果取得不到版本清單說明你目前的系統環境還沒有正確配置 Docker CE 軟體軟體源(執行腳本時不存在該問題)
-
國際化(I18n)#
腳本提供多語言支持,目前內建
简体中文
、繁體中文
、English
共三種顯示語言,預設為简体中文
-
無人值守(自動化)#
不透過交互完成安裝操作,至少需要使用以下命令選項來實現,建議熟悉後再使用
参考命令bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant \ --source mirror.example.com/docker-ce \ --source-registry registry.hub.docker.com \ --protocol http \ --use-intranet-source false \ --install-latest true \ --close-firewall true \ --ignore-backup-tips
如果報錯
命令選項無效
那麼請檢查選項合法性以及空格字元編碼,在範例中一行寫一個選項是為了提高命令的可讀性 -
純淨模式#
推出此功能是為了方便開發以及运维人員使用,啟用後會精簡腳本內容輸出,建議搭配其它指令選項無互動使用
滾動輸出的命令日誌可能有無法預料的顯示問題,不過目前暫未發現異常
常見問題#
-
關於服務報錯無法啟動#
非新裝環境可能會在執行腳本後遇到
Docker
服務無法啟動的情況,建議重新安裝來解決,卸載不會刪除本機映像和容器資料卸載指令如下:
卸載完成後重新執行腳本安裝即可
-
關於不支援的作業系統#
如果提示不支援那麼請使用系統自備的套件管理工具進行安裝。因為這些軟體包由 Linux 發行版的軟體包維護者建構和維護,可能存在配置差異或由修改後的原始碼建構。
-
最佳實踐#
適用於企業產品部署以及 CI/CD 等自動化維運場景的程式碼範例(展開檢視)
如果你不想讓用戶進行任何交互,請使用 完全自動化
範例
-
完全自動化(建議)#
# !/bin/bash function install_docker() { if command -v docker &>/dev/null; then return fi # script options local script_host="linuxmirrors.cn" # official host (CDN), more host see official site local script_lang="zh-hans" # script display language: zh-hans / zh-hant / en / auto local close_firewall="true" # close firewalld service and selinux (redhat systems need) # mirrors options local source_docker_ce_address="mirrors.tencent.com/docker-ce" # global high availability address local source_docker_ce_protocol="https" # https or http local source_docker_registry_address="registry.hub.docker.com" # judge network environment local region_code="$(curl -s ipinfo.io/country)" if [[ "${region_code}" == "CN" ]]; then local source_intranet_address="" # use intranet source if possible if [ -s "/sys/class/dmi/id/sys_vendor" ]; then local sys_vendor="$(cat /sys/class/dmi/id/sys_vendor)" if [[ "${sys_vendor}" == *"Alibaba"* ]]; then source_intranet_address="mirrors.cloud.aliyuncs.com/docker-ce" elif [[ "${sys_vendor}" == *"Huawei"* ]]; then source_intranet_address="mirrors.myhuaweicloud.com/docker-ce" elif [[ "${sys_vendor}" == *"Tencent"* ]]; then source_intranet_address="mirrors.tencentyun.com/docker-ce" elif [[ "${sys_vendor}" == *"Inspur"* ]]; then source_intranet_address="mirrors.ivolces.com/docker-ce" fi else cat /etc/motd | grep "Alibaba Cloud " -q if [ $? -eq 0 ]; then source_intranet_address="mirrors.cloud.aliyuncs.com/docker-ce" fi fi # check connectivity if [ -n "${source_intranet_address}" ]; then if ping -c1 -W1 "${source_intranet_address%%/*}" >/dev/null 2>&1; then source_docker_ce_address="${source_intranet_address}" source_docker_ce_protocol="http" fi fi # registry mirror (best choice for Chinese mainland) source_docker_registry_address="docker.1ms.run" else # use official source source_docker_ce_address="download.docker.com" source_docker_registry_address="registry.hub.docker.com" fi # install docker engine bash <(curl -sSL https://${script_host}/docker.sh) \ --source "${source_docker_ce_address}" \ --source-registry "${source_docker_registry_address}" \ --protocol "${source_docker_ce_protocol}" \ --close-firewall "${close_firewall}" \ --install-latest true \ --ignore-backup-tips \ --lang "${script_lang}" \ --pure-mode } install_docker
-
簡易方式#
# !/bin/bash function install_docker() { if command -v docker &>/dev/null; then return fi bash <(curl -sSL https://${script_host}/docker.sh) \ --install-latest true \ --ignore-backup-tips \ --lang auto if command -v docker &>/dev/null; then echo -e "\n# Docker installation successful.\n# Please run this script again manually after installation." exit 0 else echo -e "\n# Docker installation failed.\n# Please check the error message above." exit 1 fi } install_docker
註:不指定
Docker CE 源
以及映像倉庫源
則會交由使用者進行互動選擇,屆時會自動清屏$ clear
,從而導致你腳本的運行日誌被清除