跳轉至

Docker 安裝與換源腳本#

一鍵執行命令#

bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/DockerInstallation.sh) --zh-hant
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) --zh-hant

即時同步、無延遲,中國大陸網路環境建議使用

bash <(curl -sSL https://raw.gitcode.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) --zh-hant

同步存在1小時延遲

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh) --zh-hant
bash <(curl -sSL https://edgeone.linuxmirrors.cn/docker.sh) --zh-hant

不建議在中國大陸網路環境下使用

整合安裝 Docker EngineDocker Compose,支援選擇或更換軟體源(Docker 軟體倉庫)以及映像倉庫、安裝指定版本、重裝等功能,支援 ARM 架構

腳本參考官方文件使用系統套件管理工具進行安裝,不存在相容性、安全性等問題,可安裝的版本由 Docker CE 倉庫決定

bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --only-registry
bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/DockerInstallation.sh) --zh-hant --only-registry
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) --zh-hant --only-registry

即時同步、無延遲,中國大陸網路環境建議使用

bash <(curl -sSL https://raw.gitcode.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) --zh-hant --only-registry

同步存在1小時延遲

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh) --zh-hant --only-registry
bash <(curl -sSL https://edgeone.linuxmirrors.cn/docker.sh) --zh-hant --only-registry

不建議在中國大陸網路環境下使用

  • 完全取代官方安裝腳本


    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 企業產品自用鏡像

本開源專案不適合採集個人自建的鏡像加速器,如有需要可搭配命令選項自行使用

其它

名稱 位址 名稱 位址
Alibaba Cloud (Hangzhou) registry.cn-hangzhou.aliyuncs.com Alibaba Cloud (Japan - Tokyo) registry.ap-northeast-1.aliyuncs.com
Alibaba Cloud (Shanghai) registry.cn-shanghai.aliyuncs.com Alibaba Cloud (Singapore) registry.ap-southeast-1.aliyuncs.com
Alibaba Cloud (Qingdao) registry.cn-qingdao.aliyuncs.com Alibaba Cloud (Malaysia - Kuala Lumpur) registry.ap-southeast-3.aliyuncs.com
Alibaba Cloud (Beijing) registry.cn-beijing.aliyuncs.com Alibaba Cloud (Indonesia - Jakarta) registry.ap-southeast-5.aliyuncs.com
Alibaba Cloud (Zhangjiakou) registry.cn-zhangjiakou.aliyuncs.com Alibaba Cloud (Germany - Frankfurt) registry.eu-central-1.aliyuncs.com
Alibaba Cloud (Hohhot) registry.cn-huhehaote.aliyuncs.com Alibaba Cloud (UK - London) registry.eu-west-1.aliyuncs.com
Alibaba Cloud (Ulanqab) registry.cn-wulanchabu.aliyuncs.com Alibaba Cloud (US Western - Silicon Valley) registry.us-west-1.aliyuncs.com
Alibaba Cloud (Shenzhen) registry.cn-shenzhen.aliyuncs.com Alibaba Cloud (US Eastern - Virginia) registry.us-east-1.aliyuncs.com
Alibaba Cloud (Heyuan) registry.cn-heyuan.aliyuncs.com Alibaba Cloud (United Arab Emirates - Dubai) registry.me-east-1.aliyuncs.com
Alibaba Cloud (Guangzhou) registry.cn-guangzhou.aliyuncs.com Google Cloud(North America) gcr.io
Alibaba Cloud (Chengdu) registry.cn-chengdu.aliyuncs.com Google Cloud(Asia) asia.gcr.io
Alibaba Cloud (Hong Kong) registry.cn-hongkong.aliyuncs.com Google Cloud(Europe) eu.gcr.io
Tencent Cloud mirror.ccs.tencentyun.com Docker Hub registry.hub.docker.com

註:中國大陸雲端運算企業的映像倉庫軟體源僅針對其業務,中國大陸境內實例可能仍無法造訪 Docker Hub

命令選項(進階用法)#

bash <(curl -sSL https://linuxmirrors.cn/main.sh) --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 指定腳本輸出的語言 语言
--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 協定 httphttps
--use-intranet-source 是否優先使用內部網路 Docker CE 軟體源位址 truefalse
--install-latest 是否安裝最新版本的 Docker Engine truefalse
--close-firewall 是否關閉防火牆 truefalse
--clean-screen 是否在運行前清除螢幕上的所有內容 truefalse
--lang 指定腳本輸出的語言 語言ID(詳見下方文件)
--only-registry 僅更換映像倉庫模式
--ignore-backup-tips 忽略覆蓋備份提示(即不覆蓋備份)
--pure-mode 純淨模式,精簡列印內容
--help 查看幫助選單

軟體源完整格式 <WEB協定>://<軟體源位址(網域名稱或IP)>/<軟體源倉庫(路徑)>

  • 指定映像倉庫位址#

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --source-registry registry.example.com
    
  • 僅更換映像倉庫#

    僅更換鏡像加速器,當偵測到未安裝 Docker 時會報錯跳出

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --only-registry
    
    • 安裝 jq 軟體包

      apt-get install -y jq
      

      Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS   openKylin

      新裝系統需要先執行一次更新 apt-get update

      dnf install -y jq || yum install -y jq
      

      Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    • 指定映像倉庫位址

      請手動替換 <example.registry.com> 為映像倉庫位址後在執行,詳見上方 “專案內置的映像倉庫源” 表格中的位址列

      SOURCE_REGISTRY='"https://<example.registry.com>"'
      
      也可以指定多個映像倉庫,如 SOURCE_REGISTRY='"https://example.registry.com","https://test.registry.com"',注意用英文逗號分割

    • 替換映像倉庫位址

      [ -s "/etc/docker/daemon.json" ] || echo "{}" >/etc/docker/daemon.json
      jq '.["registry-mirrors"] = ['"${SOURCE_REGISTRY}"']' /etc/docker/daemon.json >/etc/docker/daemon.json.tmp && mv /etc/docker/daemon.json.tmp
      
    • 重新啟動 Docker 服務

      systemctl daemon-reload
      [[ $(systemctl is-active docker) == "active" ]] && systemctl restart docker || systemctl enable --now docker
      
  • 指定 Docker CE 軟體源位址#

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --source mirror.example.com/docker-ce
    

    注意該位址路徑需要包含映像站的 Docker CE 軟體源倉庫路徑即 docker-ce

  • 指定 Docker CE 軟體源倉庫#

    腳本預設會自動判斷一般無需指定,除非你有特殊需求

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --branch centos
    

    倉庫名稱是固定的,目前只有 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

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --designated-version 28.0.0
    

    如果指定的版本不存在或不支援當前作業系統,屆時腳本會報錯跳出

    查看版本清單的方法
    apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" | sort -t '.' -k1,1nr -k2,2nr -k3,3nr
    

    Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS

    dnf list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" | sort -t '.' -k1,1nr -k2,2nr -k3,3nr
    

    Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    未出現在該清單中的版本則不支援透過本腳本安裝,如果取得不到版本清單說明你目前的系統環境還沒有正確配置 Docker CE 軟體軟體源(執行腳本時不存在該問題)

  • 國際化(I18n)#

    腳本提供多語言支持,目前內建 简体中文繁體中文English 共三種顯示語言,預設為 简体中文

    • 指定語言#

      bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --lang xxx
      
      類型
      简体中文 zh-hans zh-cn zh
      繁體中文 zh-hant zh-tw zh-hk
      English en en-us

      也可以直接作為指令選項使用

      bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --en
      

      --en --en-us --zh --zh-cn --zh-hans --zh-hant

    • 透過互動進行選擇#

      bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --lang auto
      
  • 無人值守(自動化)#

    不透過交互完成安裝操作,至少需要使用以下命令選項來實現,建議熟悉後再使用

    参考命令
    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
    

    如果報錯 命令選項無效 那麼請檢查選項合法性以及空格字元編碼,在範例中一行寫一個選項是為了提高命令的可讀性

  • 純淨模式#

    推出此功能是為了方便開發以及运维人員使用,啟用後會精簡腳本內容輸出,建議搭配其它指令選項無互動使用

    bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --zh-hant --pure-mode
    

    滾動輸出的命令日誌可能有無法預料的顯示問題,不過目前暫未發現異常

常見問題#

  • 關於服務報錯無法啟動#

    非新裝環境可能會在執行腳本後遇到 Docker 服務無法啟動的情況,建議重新安裝來解決,卸載不會刪除本機映像和容器資料

    卸載指令如下:

    apt-get remove -y docker* containerd.io runc && apt-get autoremove
    

    Debian   Ubuntu   Kali   Linux Mint   Deepin   Zorin OS   Armbian   Proxmox VE   Raspberry Pi OS

    yum remove -y docker* containerd.io podman* runc
    

    Red Hat Enterprise Linux   CentOS   Rocky Linux   AlmaLinux   Fedora   openEuler   OpenCloudOS   Anolis OS

    卸載完成後重新執行腳本安裝即可

  • 關於不支援的作業系統#

    如果提示不支援那麼請使用系統自備的套件管理工具進行安裝。因為這些軟體包由 Linux 發行版的軟體包維護者建構和維護,可能存在配置差異或由修改後的原始碼建構。

    也可以使用   Docker Desktop

  • 最佳實踐#

適用於企業產品部署以及 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,從而導致你腳本的運行日誌被清除