すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Dockerのインストールと使用

最終更新日:Sep 09, 2024

Alibaba Cloudが提供するDockerリポジトリを使用して、Elastic Compute Service (ECS) インスタンスにDockerをすばやくインストールできます。 このトピックでは、Linux ECSインスタンスにDockerをインストールする方法、Dockerを使用してイメージを作成する方法、およびDocker Composeを使用してアプリケーションの構築、デプロイ、および管理のプロセスを合理化する方法について説明します。

Dockerのインストール

前提条件

次の要件を満たすECSインスタンスが作成されます。 ECSインスタンスの作成方法については、「カスタム起動タブでインスタンスを作成する」をご参照ください。

  • オペレーティングシステム: Alibaba Cloud Linux 3 64ビット、Alibaba Cloud Linux 2 64ビット、CentOS 7.x 64ビット、CentOS 8.x 64ビット、Ubuntu 22、Ubuntu 20、Debian 11、またはDebian 12。

  • ネットワークタイプ: Virtual Private Cloud (VPC)

  • IPアドレス: インスタンスに静的パブリックIPアドレス (自動割り当てまたはシステム割り当てパブリックIPアドレスとも呼ばれます) が割り当てられるか、elastic IPアドレス (EIP) に関連付けられます。 静的パブリックIPアドレスをECSインスタンスに割り当てる方法、またはEIPをECSインスタンスに関連付ける方法については、「ECSインスタンスのパブリック帯域幅の有効化」をご参照ください。

  • セキュリティグループ: インバウンドルールは、インスタンスが属するセキュリティグループに追加され、ポート22と80のトラフィックを許可します。 インバウンドセキュリティグループルールを追加する方法の詳細については、「セキュリティグループルールの追加」をご参照ください。

手順

  1. ECS インスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. Dockerをインストールします。

    Alibaba Cloud Linux 3

    1. 次のコマンドを実行して、Docker Community Edition (Docker-CE) のDandified YUM (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インストールの問題を解決する方法については、このトピックのFAQセクションを参照してください。

    Alibaba Cloud Linux 2

    1. 次のコマンドを実行して、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. 次のコマンドを実行して、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リポジトリのアドレスを変更します。

      CentOS8はEOLに到達しました。 Linuxコミュニティルールに従って、すべてのコンテンツが次のCentOS 8リポジトリアドレスから削除され http://mirror.centos.org/centos/8/ た。 Alibaba CloudでデフォルトのCentOS 8リポジトリを引き続き使用すると、エラーが報告されます。 CentOS 8の特定のインストールパッケージを使用するには、CentOS 8リポジトリアドレスを変更します。 詳細については、「CentOS 8リポジトリアドレスの変更」をご参照ください。

    2. 次のコマンドを実行してDNFをインストールします。

      sudo yum -y install dnf
    3. 次のコマンドを実行して、Dockerストレージドライバの依存関係パッケージをインストールします。

      sudo dnf install -y device-mapper-persistent-data lvm2
    4. 次のコマンドを実行して、安定したDockerリポジトリを追加します。

      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、Ubuntu 22、Ubuntu 20、Debian 11、またはDebian 12

    1. 次のコマンドを実行して、ソフトウェアパッケージのリストを更新します。

      sudo apt update
    2. 次のコマンドを実行して、Dockerに必要な依存関係をインストールします。

      sudo apt-get -y install ca-certificates curl
    3. /etc/apt/keyringsディレクトリを作成し、Dockerの公式GNU Privacy Guard (GPG) キーをディレクトリにダウンロードします。

      Ubuntu 18、Ubuntu 20、またはUbuntu 22

      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またはDebian 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、Ubuntu 20、またはUbuntu 22

      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またはDebian 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デーモンを設定します。

    • 次のコマンドを実行してDockerを起動し、システム起動時にDockerを起動するように設定します。

      sudo systemctl start docker
      sudo systemctl enable docker
    • 次のコマンドを実行して、Dockerが起動しているかどうかを確認します。

      sudo systemctl status docker

      次のコマンド出力は、Dockerが開始されたことを示します。

      image..png

Dockerの基本操作

このセクションでは、Dockerの基本的な使用方法についてのみ説明します。 Dockerの使用方法の詳細については、Dockerの公式Webサイトをご覧ください。

  • 次のコマンドを実行して、Dockerデーモンを管理します。

    sudo systemctl start docker # Run the Docker daemon.
    sudo systemctl stop docker      # Stop the Docker daemon.
    sudo systemctl restart docker   # Restart the Docker daemon.
    sudo systemctl enable docker   # Configure the Docker daemon to start on system startup.
    sudo systemctl status docker # Check the status of the Docker daemon.
  • 画像の管理

    この例では、Alibaba Cloud Container RegistryのApacheイメージを使用して、Dockerを使用してイメージを管理する方法を説明します。

    • 画像を引き出します。

      sudo docker pull registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5
    • タグを変更します。 Alibaba Cloud Container Registryのイメージの名前は長いです。 タグを使用して画像を簡単に識別できます。

      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
  • コンテナーの管理

    重要
    • 次のコードスニペットで使用する <Image ID> 値を照会するには、docker imagesコマンドを実行します。

    • コンテナーでコマンドを実行する前に、コンテナーでcat /etc/os-releaseコマンドを実行して、オペレーティングシステムのタイプとバージョンを表示します。 次に、オペレーティングシステムのタイプとバージョンに適したコマンドを決定します。

    • コンテナーを起動します。

      デーモンモードまたは対話モードでコンテナを起動できます。

      説明
      • コンテナーがデーモンモードで起動されている場合、コンテナーを終了した後もコンテナーは実行中の状態のままです。

      • コンテナがインタラクティブモードで起動された場合、コンテナを終了すると、コンテナのステータスは [終了] に変わります。 コンテナを再開するには、sudo docker start <container ID> コマンドを実行します。

      デーモンモードでコンテナを起動する

      sudo docker run -d --name <Container name> <Image ID>

      インタラクティブモードでコンテナを起動する

      # Start a new container in interactive mode. 
      sudo docker run -it <Image ID> /bin/bash 
    • コンテナーIDを照会します。

      sudo docker ps -a
    • コンテナーを停止状態で起動します。

      sudo docker start <Container ID>
    • 実行中のコンテナでコマンドを実行します。 例:

      sudo docker exec -it <Container ID> /bin/bash
      説明

      コンテナーを終了するには、exitコマンドを実行します。

Dockerを使用したイメージの作成

ここでは、Dockerfileから単純なカスタムNGINXイメージを作成する方法について説明します。

  1. 次のコマンドを実行してイメージをプルします。 この例では、Alibaba Cloud Container Registryから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キーを押してInsertモードに入り、次のコンテンツをファイルに追加します。

      #Specify a base image. 
      FROM aliweb:v1
      #Specify the owner of the base image. 
      MAINTAINER DTSTACK
      #Specify the command that you want to run before the container starts. Append the command to the end of the RUN command. To run many commands, we recommend that you write the commands to a script. Each Docker image can contain up to 127 layers. 
      RUN mkdir /dtstact
      #Specify the commands that are run on system startup. The last command must be a frontend command that constantly runs. This prevents the container from immediately exiting after starting up. 
      ENTRYPOINT ping www.aliyun.com
    3. Escキーを押して :wqと入力し、enterキーを押してDockerfileを保存して閉じます。

  4. 次のコマンドを実行して、ベースNGINXイメージに基づいてイメージを作成します。

    次の形式でコマンドを実行します。docker build -t <イメージ名 >:< イメージバージョン> 。. コマンドの最後にあるピリオド (.) は、Dockerfileのディレクトリを示します。 ピリオド (.) が必要です。 たとえば、次のコマンドを実行して、バージョンv2でaliwebという名前のイメージをビルドします。

    sudo docker build -t aliweb:v2 .
  5. 次のコマンドを実行して、イメージがビルドされているかどうかを確認します。

    sudo docker images 

    次のコマンド出力は、イメージがビルドされたことを示します。

    image..png

Docker Composeのインストールと使用

Docker Composeは、Dockerチームによって開発され、複数のコンテナを定義および実行するために使用されるオープンソースのコンテナーオーケストレーションツールです。 Docker Composeでは、YAMLファイルを使用してアプリケーションのサービスを設定し、コマンドを実行してYAMLファイルの設定を解析し、設定からすべてのサービスを作成して開始します。 Docker Composeは、O&Mコストの削減とデプロイ効率の向上に役立ちます。

Docker Composeの詳細については、Dockerの公式Webサイトをご覧ください。

重要

Docker ComposeはPython 3以降でのみサポートされます。 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を使用したアプリケーションのデプロイ

このセクションでは、Docker Composeを使用してWordPressをデプロイする方法について説明します。

  1. docker-compose.yamlファイルを作成して編集します。

    1. 次のコマンドを実行して、docker-compose.yamlファイルを作成します。

      sudo vim docker-compose.yaml
    2. Iキーを押してInsertモードに入り、次のコンテンツをファイルに追加します。

      この例では、WordPressのインストールに使用するコンテンツが追加されます。

      version: '3.1'             # Specify the version of Docker Compose.
      
      services:
      
        wordpress:               # Specify a service name.         
          image: wordpress       # Specify an image name.
          restart: always        # Configure the container to start each time Docker starts.
          ports:
            - 80:80              # Specify a port mapping.
          environment:           # Configure environment variables.
            WORDPRESS_DB_HOST: db
            WORDPRESS_DB_USER: wordpress
            WORDPRESS_DB_PASSWORD: 123456
            WORDPRESS_DB_NAME: wordpress
          volumes:               # Configure mappings between containers and ECS volumes.
            - wordpress:/var/www/html
      
        db:                      # Specify a service name.    
          image: mysql:5.7       # Specify an image name.
          restart: always        # Configure the container to start each time Docker starts.
          ports:
             - 3306:3306         # Specify a port mapping.
          environment:           # Configure environment variables.
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: 123456
            MYSQL_RANDOM_ROOT_PASSWORD: '1'
          volumes:               # Configure mappings between containers and ECS volumes.
            - db:/var/lib/mysql
      
      volumes:
        wordpress:
        db:
    3. Escキーを押して挿入モードを終了し、:wqと入力し、enterキーを押してファイルを保存して閉じます。

  2. 次のコマンドを実行して、アプリケーションを起動します。

    sudo env "PATH=$PATH" docker-compose up -d
  3. ブラウザのアドレスバーにhttp:// <ECSインスタンスのパブリックIPアドレス> 形式のアドレスを入力し、WordPress設定ページに移動します。 このページでは、WordPressにアクセスするためのプロンプトに従ってパラメーターを設定できます。

よくある質問

Linux ECSインスタンスまたはLinux ECSインスタンスのコンテナーでsystemctlコマンドを実行したときにエラーが発生した場合はどうすればよいですか。

  • 問題の説明: Linux ECSインスタンスまたはLinux ECSインスタンスのコンテナでsystemctlコマンドを実行すると、次のエラーメッセージが表示されます。

    • システムは、systemd as init System (PID 1) でブートされていません。 操作できません。

    • D-Bus接続の取得に失敗しました: xxx xxx。

  • 原因: systemdプロセスは、システム (init system) の初期化に使用されていません。

  • 解決策: serviceコマンドを実行してサービスを管理します。 たとえば、sudo systemctl restart sshd.serviceコマンドの代わりに、sudo service sshd restarコマンドを実行します。

Linux ECSインスタンスでdnf config-managerコマンドを実行したときにエラーが発生した場合はどうすればよいですか。

  • 問題の説明: Linux ECSインスタンスでdnf config-managerコマンドを実行すると、次のエラーメッセージが表示されます。

    • /usr/lib/python3/dist-packages/dnf/const.py:22: DeprecationWarning: distutilsパッケージは廃止され、Python 3.12で削除される予定です。 setuptoolsを使用するか、PEP 632をチェックして、

  • 原因: DNFバージョンが古くなっています。

  • 解決策: sudo dnf update dnfコマンドを実行して、DNFパッケージを最新バージョンに更新し、Dockerを再インストールします。

Linux ECSインスタンスでdnf install docker-ceコマンドを実行したときにエラーが発生した場合はどうすればよいですか。

問題の説明1: Linux ECSインスタンスで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を再インストールします。

問題の説明2: Linux ECSインスタンスで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リポジトリをAlibaba Cloudが提供する利用可能なリポジトリに置き換えます。

# Back up the expired repository. 
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# Download the CentOS-Base.repo file provided by Alibaba Cloud to the /etc/yum.repos.d/ directory. 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.aliyuncs.com/repo/Centos-vault-8.5.2111.repo
# Replace the repository addresses in the Alibaba Cloud repository with repository addresses that are accessible to the ECS instance. 
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
# Clear the existing installation package in the cache and generate a new installation package in the cache based on the repository that you specified. 
sudo yum clean all && sudo yum makecache

上記の操作を実行した後、Dockerを再インストールします。

説明

Alibaba Cloudが提供するリポジトリを使用しない場合は、/etc/yum.repos.d/CentOS-Base.repoファイルで使用できないリポジトリアドレスをコメントアウトし、Dockerを再インストールします。

関連ドキュメント

  • Dockerの使用方法については、「Dockerドキュメント」をご参照ください。

  • Dockerイメージを使用します。

    Alibaba Cloud Container RegistryはArtifact Centerをリリースし、Alibaba Cloud WebサイトとOpenAnolisコミュニティから安全で信頼できるベースコンテナイメージをコンテナ開発者に無料で提供します。 Dockerをインストールした後、Artifact CenterのDockerコンテナイメージを使用して、アプリケーションデプロイ、環境開発、オペレーティングシステムのセットアップ、AIまたはビッグデータ学習フレームワークの構築などの特定のビジネス要件を満たすことができます。

  • Dockerイメージのプルを高速化します。

    P2Pアクセラレーション機能を使用して、イメージのプルとアプリケーションのデプロイを高速化できます。 詳細については、「DockerがインストールされているホストでのP2Pアクセラレーション機能の使用」をご参照ください。

  • DockerでCLIツールを設定して、Alibaba Cloudリソースを管理できます。 詳細については、「DockerコンテナーでAlibaba Cloud CLIを実行する」をご参照ください。

  • Alibaba Cloud Container Registryを使用して、コンテナ化されたアプリケーションを実行および管理することもできます。