全部產品
Search
文件中心

Elastic Compute Service:安裝Docker並使用

更新時間:Sep 10, 2024

如果您需要在Elastic Compute Service上安裝Docker,可使用阿里雲提供的Docker鏡像源快速部署。本文主要介紹如何在 Linux系統的ECS中安裝Docker、使用Docker製作鏡像以及通過docker-compose更加高效地構建、部署和管理應用程式。

手動安裝Docker

準備工作

已建立一台基礎ECS執行個體,並滿足以下配置。如何建立ECS執行個體?

操作步驟

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 安裝Docker。

    Alibaba Cloud Linux 3

    1. 運行以下命令,添加docker-ce的dnf源。

      sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 運行以下命令,安裝Alibaba Cloud Linux 3專用的dnf源相容外掛程式。

      sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
    3. 運行以下命令,安裝Docker。

      sudo dnf -y install docker-ce --nobest
      說明

      安裝docker過程中如有問題請參考常見問題

    Alibaba Cloud Linux 2

    1. 運行以下命令,下載docker-ce的yum源。

      sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 運行以下命令,安裝Alibaba Cloud Linux 2專用的yum源相容外掛程式。

      sudo yum install yum-plugin-releasever-adapter --disablerepo=* --enablerepo=plus
    3. 運行以下命令,安裝Docker。

      sudo yum -y install docker-ce

    CentOS 7.x

    1. 運行以下命令,下載docker-ce的yum源。

      sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    2. 運行以下命令,安裝Docker。

      sudo yum -y install docker-ce

    CentOS 8.x

    1. 切換CentOS 8源地址。

      CentOS 8作業系統版本結束了生命週期(EOL),按照社區規則,CentOS 8的源地址http://mirror.centos.org/centos/8/內容已移除,您在阿里雲上繼續使用預設配置的CentOS 8的源會發生報錯。如果您需要使用CentOS 8系統中的一些安裝包,則需要手動切換源地址。具體操作,請參見CentOS 8 EOL如何切換源?

    2. 運行以下命令,安裝DNF。

      sudo yum -y install dnf
    3. 運行以下命令,安裝Docker儲存驅動的依賴包。

      sudo dnf install -y device-mapper-persistent-data lvm2
    4. 運行以下命令,添加穩定的Docker軟體源。S

      sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    5. 運行以下命令,檢查Docker軟體源是否已添加。

      sudo dnf list docker-ce

      出現如下圖所示回顯,表示Docker軟體源已添加。

      image..png

    6. 運行以下命令安裝Docker。

      sudo dnf install -y docker-ce --nobest

    Ubuntu(18/22/20)/Debian(11/12)

    1. 更新軟體包列表。

      sudo apt update
    2. 安裝Docker所需依賴包。

      sudo apt-get -y install ca-certificates curl
    3. 建立/etc/apt/keyrings目錄,並下載Docker的官方GPG密鑰到該目錄。

      Ubuntu 18/22/20

      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc

      Debian 11/12

      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc
    4. 將Docker倉庫添加到系統的軟體源列表。

      Ubuntu 18/22/20

      echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
        $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

      Debian 11/12

      echo \
        "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \
        $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
        sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    5. 更新軟體包列表。

      sudo apt update
    6. 安裝Docker。

      sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  3. 查看docker版本資訊。

    docker -v

    如下圖回顯資訊所示,表示Docker已安裝成功。

    image..png

  4. 啟動Docker守護進程並設定開機自啟動。

    • 執行以下命令,啟動Docker服務,並設定開機自啟動。

      sudo systemctl start docker
      sudo systemctl enable docker
    • 執行以下命令,查看Docker是否啟動。

      sudo systemctl status docker

      如下圖回顯所示,表示Docker已啟動。

      image..png

Docker基本使用

下文只列出Docker基本用法,更詳細的操作命令,請參見Docker官網

  • 您可以通過如下命令管理Docker守護進程。

    sudo systemctl start docker     #運行Docker守護進程
    sudo systemctl stop docker      #停止Docker守護進程
    sudo systemctl restart docker   #重啟Docker守護進程
    sudo systemctl enable docker    #設定Docker開機自啟動
    sudo systemctl status docker    #查看Docker的運行狀態
  • 管理鏡像

    本文以阿里雲倉庫的Apache鏡像為例,介紹如何使用Docker管理鏡像。

    • 拉取鏡像。

      sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
    • 修改標籤。如果鏡像名稱較長,您可以修改鏡像標籤以便記憶區分。

      sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
    • 查看已有鏡像。

      sudo docker images
    • 強制移除鏡像。

      sudo docker rmi -f registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
  • 管理容器

    重要
    • 下文的<鏡像ID>可通過docker images命令查詢。

    • 如果您要在容器內部運行相關命令,您可以通過在容器中運行cat /etc/os-release提前確認您的容器作業系統類型及版本,以便使用合適的命令來完成您的操作。

    • 啟動一個容器。

      您可以通過守護模式或者互動模式啟動一個容器。

      說明
      • 使用守護模式啟動的容器,退出容器後容器會保持運行狀態。

      • 使用互動模式啟動的容器,退出容器後容器狀態會變成Exited,您可以使用sudo docker start <容器ID>命令使容器恢複運行狀態。

      使用守護模式啟動容器

      sudo docker run -d --name <容器名> <鏡像ID>

      使用互動模式啟動容器

      # 使用互動模式啟動一個新容器。
      sudo docker run -it <鏡像ID> /bin/bash
    • 查看容器ID。

      sudo docker ps -a
    • 啟動停止狀態的容器。

      sudo docker start <容器ID>
    • 在一個運行中的容器中執行命令。

      sudo docker exec -it <容器ID> /bin/bash
      說明

      如果要退出容器,可以執行exit命令。

使用Docker製作鏡像

本步驟指導如何通過Dockerfile定製製作一個簡單的Nginx鏡像。

  1. 執行以下命令,拉取鏡像。本樣本以拉取阿里雲倉庫的Apache鏡像為例。

    sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
  2. 修改鏡像名稱標籤,便於記憶。

    sudo docker tag registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5:latest aliweb:v1
  3. 執行以下命令,建立並編輯Dockerfile檔案。

    1. 執行以下命令,建立並編輯Dockerfile檔案。

      vim Dockerfile
    2. i進入編輯模式,並添加以下內容,改造原鏡像。

      #聲明基礎鏡像來源。
      FROM aliweb:v1
      #聲明鏡像擁有者。
      MAINTAINER DTSTACK
      #RUN後面接容器運行前需要執行的命令,由於Dockerfile檔案不能超過127行,因此當命令較多時建議寫到指令碼中執行。
      RUN mkdir /dtstact
      #開機啟動命令,此處最後一個命令需要是可在前台持續執行的命令,否則容器後台運行時會因為命令執行完而退出。
      ENTRYPOINT ping www.aliyun.com
    3. Esc鍵,輸入:wq並按Enter鍵,儲存並退出Dockerfile檔案。

  4. 執行以下命令,基於基礎鏡像nginx構建新鏡像。

    命令格式為docker build -t <鏡像名稱>:<鏡像版本> .命令末尾的.表示Dockerfile檔案的路徑,不能忽略。以構建新鏡像aliweb:v2為例,則命令為:

    sudo docker build -t aliweb:v2 .
  5. 執行以下命令,查看新鏡像是否構建成功。

    sudo docker images 

    如下圖回顯所示,表示構建成功。

    image..png

安裝並使用docker-compose

docker-compose是Docker官方提供的用於定義和運行多個Docker容器的開源容器編排工具,可以使用YAML檔案來配置應用程式需要的所有服務,然後使用docker-compose運行命令解析YAML檔案配置,建立並啟動設定檔中的所有Docker服務,具有營運成本低、部署效率高等優勢。

關於docker-compose的更多資訊,請參見Docker官網

重要

僅Python 3及以上版本支援docker-compose,並請確保已安裝pip。

安裝docker-compose

  1. 運行以下命令,安裝setuptools。

    sudo pip3 install -U pip setuptools
  2. 運行以下命令,安裝docker-compose。

    sudo pip3 install docker-compose
  3. 運行以下命令,驗證docker-compose是否安裝成功。

    docker-compose --version

    如果回顯返回docker-compose版本資訊,表示docker-compose已安裝成功。

使用docker-compose部署應用

下文以部署WordPress為例,介紹如何使用docker-compose部署應用。

  1. 建立並編輯docker-compose.yaml檔案。

    1. 運行以下命令,建立docker-compose.yaml檔案。

      sudo vim docker-compose.yaml
    2. 按下i鍵,進入編輯模式,新增以下內容。

      本樣本以安裝WordPress為例。

      version: '3.1'             # 版本資訊
      
      services:
      
        wordpress:               # 服務名稱         
          image: wordpress       # 鏡像名稱
          restart: always        # docker啟動,當前容器必啟動
          ports:
            - 80:80              # 映射連接埠
          environment:           # 編寫環境
            WORDPRESS_DB_HOST: db
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: 123456
            WORDPRESS_DB_NAME: wordpress
          volumes:               # 映射資料卷
            - wordpress:/var/www/html
      
        db:                      # 服務名稱    
          image: mysql:5.7       # 鏡像名稱
          restart: always        # docker啟動,當前容器必啟動
          ports:
             - 3306:3306         # 映射連接埠
          environment:           # 環境變數
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: 123456
            MYSQL_RANDOM_ROOT_PASSWORD: '1'
          volumes:               # 卷掛載路徑
            - db:/var/lib/mysql
      
      volumes:
        wordpress:
        db:
    3. 按下Esc鍵,退出編輯模式,然後輸入:wq儲存並退出。

  2. 執行以下命令,啟動應用。

    sudo env "PATH=$PATH" docker-compose up -d
  3. 在瀏覽器中輸入http://Elastic Compute Service執行個體的公網IP,即可進入WordPress配置頁面,您可以根據介面提示配置相關參數後,訪問WordPress。

常見問題

Linux ECS執行個體或容器中執行systemctl相關命令報錯

  • 問題現象:在Linux系統執行個體或容器中執行systemctl命令出現類似如下報錯:

    • System has not been booted with systemd as init system (PID 1). Can't operate.

    • Failed to get D-Bus connection: xxx xxx.

  • 可能原因:沒有使用systemd作為其初始化系統(init system)。

  • 解決方案:您可以嘗試使用service命令來進行服務管理。例如,將sudo systemctl restart sshd.service,替換為sudo service sshd restar

Linux ECS執行個體中執行dnf config-manager命令報錯

  • 問題現象:在Linux系統執行個體中執行dnf config-manager命令出現如下報錯:

    • /usr/lib/python3/dist-packages/dnf/const.py:22: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives.

  • 可能原因:dnf版本太舊導致安裝失敗。

  • 解決方案:您可以嘗試使用sudo dnf update dnf來更新dnf軟體包到最新狀態,然後再嘗試安裝docker。

Linux ECS執行個體中執行dnf install docker-ce命令報錯

問題現象一:在Linux系統執行個體中執行dnf -y install docker-ce命令出現如下報錯:

(8-9/12): docker-ce-24.0.7-1.el8.x86_64.rpm 38% [================- ] 8.2 MB/s | 38 MB 00:07 ETA
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'dnf clean packages'.
Error: Error downloading packages:
containerd.io-1.6.26-3.1.el8.x86_64: Cannot download, all mirrors were already tried without success.

可能原因:軟體包緩衝太舊導致安裝失敗。

解決方案:您可以嘗試使用sudo dnf clean packages清理軟體包緩衝之後,再嘗試安裝docker

問題現象二:在Linux系統執行個體中執行dnf -y install docker-ce命令出現如下報錯:

CentOS- Base                                                                                                                         0.0  B/s |   0  B     00:30    
Errors during downloading metadata for repository 'base':
  - Curl error (6): Couldn't resolve host name for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirror.aliyuncs.com]
  - Curl error (28): Timeout was reached for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Connection timed out after 30000 milliseconds]
  - Curl error (6): Couldn't resolve host name for http://mirror.centos.org/os/BaseOS/x86_64/os/repodata/repomd.xml [Could not resolve host: mirror.cloud.aliyuncs.com]
Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

可能原因:使用了已下線的CentOS 8軟體源。

解決方案:可參考如下步驟,使用阿里提供的可用源替換已下線的CentOS 8軟體源。

# 備份到期軟體源。
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下載阿里提供的CentOS-Base.repo 到 /etc/yum.repos.d/。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.aliyuncs.com/repo/Centos-vault-8.5.2111.repo
# 將阿里源中的軟體源地址替換為ECS可訪問的源地址。
sudo sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/CentOS-Base.repo && sudo sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/CentOS-Base.repo && sudo sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo
# 清理舊緩衝並產生緩衝。
sudo yum clean all && sudo yum makecache

執行完上述步驟後再嘗試安裝docker即可。

說明

如果您不想使用阿里提供的可用源,您可以自行注釋掉原有/etc/yum.repos.d/CentOS-Base.repo中停用軟體源地址,然後再嘗試安裝docker

相關文檔

  • Docker的更多使用方法,請參見Docker官方文檔

  • 使用Docker鏡像。

    阿里雲Container RegistryACR推出了製品中心,為容器開發人員免費提供了來源於阿里雲官方、龍蜥社區的安全可信容器基礎鏡像。部署Docker後,您可以直接使用製品中心的Docker容器鏡像來實現特定業務需求,例如部署應用、開發環境、作業系統、AI/巨量資料學習架構等。

  • Docker鏡像加速。

    您可以使用P2P加速功能提升鏡像拉取速度,減少應用部署時間。具體操作,請參見在其他容器環境中使用P2P加速

  • 您可以在Docker中配置CLI來管理您的阿里雲資源。具體操作,請參見在Docker中配置阿里雲CLI

  • 您還可以選擇使用阿里雲Container RegistryACR,管理和運行容器化應用程式。