GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

DockerComposeの使用方法

Docker Composeとは何ですか?

Dockerアプリケーションに複数のコンテナー(たとえば、別々のコンテナーで実行されているWebサーバーとデータベース)が含まれている場合、別々のDockerfileからコンテナーを構築、実行、および接続することは、面倒で時間がかかります。 Docker Composeは、YAMLファイルを使用してマルチコンテナーアプリを定義できるようにすることで、この問題を解決します。必要な数のコンテナー、コンテナーの構築方法と接続方法、およびデータの保管場所を構成できます。 YAMLファイルが完成したら、1つのコマンドを実行して、すべてのコンテナーをビルド、実行、構成できます。

このガイドでは、 docker-compose.yml ファイルは整理されており、それを使用していくつかの基本的なアプリ構成を作成する方法を示しています。

注 通常、Docker Composeを使用して構築されたアプリケーションのコンテナは、すべて同じホストで実行されます。異なるホストで実行されているコンテナを管理するには、通常、DockerSwarmやKubernetesなどの追加ツールが必要です。

始める前に

DockerCEをインストールする

このガイドの手順に従うには、DockerCEがインストールされたLinodeが必要です。

Docker CE(Community Edition)をインストールするには、以下のいずれかのガイドの手順に従ってください。

  • UbuntuとDebianへのDockerのインストールと使用

  • CentOSとFedoraへのDockerのインストールと使用

さらに多くのLinuxディストリビューションの詳細については、Dockerの公式ドキュメントの「Dockerエンジンのインストール」セクションを参照してください。

DockerComposeのインストール

  1. DockerComposeの最新バージョンをダウンロードします。リリースページを確認し、 1.25.4を置き換えます 以下のコマンドで、バージョンが最新リリースとしてタグ付けされています :

     sudo curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. ファイルのアクセス許可を設定する:

     sudo chmod +x /usr/local/bin/docker-compose
    

基本的な使用法

このセクションでは、Dockerの公式ドキュメントから取得したDockerComposeファイルの例を確認します。

  1. docker-compose.ymlを開きます テキストエディタで、次のコンテンツを追加します:

    ファイル:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    version: '3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
    volumes:
        db_data:
  2. ファイルを保存し、同じディレクトリからDocker Composeを実行します:

    docker-compose up -d
    

    これにより、 dbがビルドおよび実行されます およびwordpress コンテナ。 docker runで単一のコンテナを実行する場合と同じように 、 -d フラグは、コンテナをデタッチモードで開始します。

  3. これで、WordPressコンテナとMySQLコンテナがホストで実行されます。 192.0.8.1:8000/wordpressに移動します Webブラウザーで、新しくインストールしたWordPressアプリケーションを確認します。 docker psを使用することもできます 結果の構成をさらに詳しく調べるには:

    docker ps
    
  4. コンテナを停止して削除します:

    docker-compose down
    
ファイル構文の作成

docker-compose.yml ファイルは4つのセクションで構成されています:

ディレクティブ 使用
バージョン 作成ファイルの構文バージョンを指定します。このガイドでは、全体を通してバージョン3を使用します。
サービス Dockerでは、サービスは「本番環境のコンテナー」の名前です。このセクションでは、DockerComposeインスタンスの一部として開始されるコンテナを定義します。
ネットワーク このセクションは、アプリケーションのネットワーキングを構成するために使用されます。デフォルトネットワークの設定を変更したり、外部ネットワークに接続したり、アプリ固有のネットワークを定義したりできます。
ボリューム コンテナが使用できるリンクされたパスをホストマシンにマウントします。

このガイドのほとんどは、 servicesを使用したコンテナの設定に焦点を当てています。 セクション。コンテナの設定と構成に使用される一般的なディレクティブの一部を次に示します。

ディレクティブ 使用
画像 コンテナの構築に使用されるイメージを設定します。このディレクティブの使用は、指定されたイメージがホストまたはonDockerハブのいずれかにすでに存在していることを前提としています。
ビルド このディレクティブはimageの代わりに使用できます 。このコンテナの構築に使用されるDockerfileの場所を指定します。
db サンプルのDockercomposeファイルの場合、 db 定義しようとしているコンテナの変数です。
再起動 システムが再起動した場合に再起動するようにコンテナに指示します。
ボリューム コンテナが使用できるリンクされたパスをホストマシンにマウントします
環境 Dockerrunコマンドに渡される環境変数を定義します。
dependents_on 現在のブロック定義コンテナの依存関係としてサービスを設定します
ポート 次の方法でコンテナからホストにポートをマッピングします: host:container
リンク ここで名前を指定して、このサービスをDockerComposeファイル内の他のサービスにリンクします。

他の多くの構成ディレクティブを使用できます。詳細については、作成ファイルのリファレンスを参照してください。

注意 例docker-compose.yml 上記はenvironmentを使用しています MySQLユーザーパスワードをYAMLファイルに直接保存して、環境変数としてコンテナーにインポートするディレクティブ。これは、実稼働環境の機密情報にはお勧めしません。代わりに、機密情報を別の .envに保存できます。 ファイル(バージョン管理にチェックインされていないか、公開されていない)であり、 docker-compose.yml内からアクセスされます env_fileを使用する ディレクティブ。

最初からアプリケーションを構築する

docker-compose.ymlを作成します マルチコンテナアプリケーションを構築する手順を説明するために、一度に1つのセクションを提出してください。

シンプルなサービスを定義する:

  1. 新しいdocker-compose.ymlを作成します テキストエディタで、次のコンテンツを追加します:

    ファイル:docker -compose.yml
    1
    2
    3
    4
    5
    6
    7
    8
    
    version: '3'
    
    services:
      distro:
        image: alpine
        restart: always
        container_name: Alpine_Distro
        entrypoint: tail -f /dev/null

    servicesの各エントリ docker-compose の場合、セクションは別のコンテナを作成します 実行されます。この時点で、セクションには公式のアルパインディストリビューションに基づく単一のコンテナが含まれています:

    • 再起動 ディレクティブは、コンテナを常に再起動する必要があることを示すために使用されます(たとえば、クラッシュやシステムの再起動後)。
    • container_name ディレクティブは、ランダムに生成されたコンテナ名を上書きし、覚えやすく操作しやすい名前に置き換えるために使用されます。
    • Dockerコンテナーでプロセスが実行されていない場合、デフォルトでDockerコンテナーは終了します。 tail -f は進行中のプロセスであるため、無期限に実行され、コンテナが停止するのを防ぎます。デフォルトのentrypoint コンテナを実行し続けるためにオーバーライドされます。
  2. コンテナを持ち出す:

    docker-compose up -d
    
  3. コンテナのステータスを確認します:

    docker ps
    

    出力は次のようになります。

    CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
    967013c36a27        alpine              "tail -f /dev/null"   3 seconds ago       Up 2 seconds                            Alpine_Distro
  4. コンテナを降ろします:

    docker-compose down
    

追加サービスの追加

ここから、コンテナのエコシステムの構築を開始できます。それらがどのように連携して通信するかを定義できます。

  1. docker-compos.ymlを再度開きます データベースを追加します 以下のサービス:

    ファイル:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"

    現在、2つのサービスが定義されています:

    • ディストロ
    • データベース

    Distroサービスは以前と同じです。データベースサーバーには、postgresコンテナの命令とディレクティブが含まれています: volume:-../ dumps:/ tmp およびports:-"5432:5432" 、最初のディレクティブは、コンテナ化された / dumpsをマップします ローカルの/tmpへのフォルダ フォルダ。 2番目のディレクティブは、コンテナのポートをローカルホストのポートにマップします。

  2. 実行中のコンテナを確認します:

    docker ps
    

    このコマンドは、コンテナのステータス、ポートマッピング、名前、およびコンテナで実行されている最後のコマンドを表示します。 postgresコンテナには「docker-entrypoint…」と表示されていることに注意してください。コマンドの下で。 PostgresDockerエントリポイントスクリプトは、コンテナの起動時に最後に起動するものです。

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
    ecc37246f6ef        postgres:latest     "docker-entrypoint..."   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp   postgres_db
    35dab3e712d6        alpine              "tail -f /dev/null"      About a minute ago   Up About a minute                            Alpine_Distro
  3. 両方のコンテナを停止します:

    docker-compose down
    

nginxサービスを追加する

  1. アプリケーションがウェブサイトにサービスを提供できるように、nginxコンテナを追加します:

    ファイル:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - ../dumps:/tmp/
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro

    このdocker-compose ファイルにはいくつかの新しいディレクティブが含まれています: environment およびリンク 。最初のディレクティブは、コンテナー内のランタイムレベルのオプションを設定します。 リンク コンテナ間に依存関係ネットワークを作成します。 nginxコンテナーは、実行する他の2つに依存します。さらに、対応するコンテナは、エイリアスで示されるホスト名で到達可能になります。この場合、 dbにpingを実行します webから コンテナはデータベースに到達します サービス。 リンクは必要ありませんが コンテナが相互に通信するためのディレクティブ、リンク docker-composeアプリケーションを起動するときにフェイルセーフとして機能することができます。

  2. Docker Composeを起動し、コンテナのステータスを確認します:

     docker-compose up -d
     docker ps
    

    出力は次のようになります。

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    55d573674e49        nginx:latest        "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp     nginx
    ad9e48b2b82a        alpine              "tail -f /dev/null"      3 minutes ago       Up 3 minutes                                 Alpine_Distro
    736cf2f2239e        postgres:latest     "docker-entrypoint..."   3 minutes ago       Up 3 minutes        0.0.0.0:5432->5432/tcp   postgres_db
  3. LinodeのパブリックIPアドレス、ポート 8080 に移動して、nginxをテストします ブラウザ内(例: 192.0.2.0:8080 )。デフォルトのnginxランディングページが表示されます。

永続データストレージ

PostgreSQLデータをコンテナ内に直接保存することはお勧めしません。 Dockerコンテナーは、一時的なものとして扱われることを目的としています。アプリケーションのコンテナーは、 docker-compose upを実行するときにゼロから構築されます。 docker-compose downを実行すると破棄されます 。さらに、システムで予期しないクラッシュや再起動が発生すると、コンテナに保存されているデータが失われます。

これらの理由から、データベースコンテナがデータの保存に使用する永続ボリュームをホストに設定することが重要です。

  1. ボリュームを追加します docker-compose.ymlへのセクション データベースを編集します ボリュームを参照するサービス:

    ファイル:docker -compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    version: '3'
    
    services:
      distro:
        image: alpine
        container_name: Alpine_Distro
        restart: always
        entrypoint: tail -f /dev/null
    
      database:
        image: postgres:latest
        container_name: postgres_db
        volumes:
          - data:/var/lib/postgresql
        ports:
          - "5432:5432"
      web:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./mysite.template:/etc/nginx/conf.d/mysite.template
        ports:
          - "8080:80"
        environment:
          - NGINX_HOST=example.com
          - NGINX_port=80
        links:
          - database:db
          - distro
    volumes:
      data:
        external: true
  2. external:true DockerComposeに既存の外部データボリュームを使用するように指示します。 dataという名前のボリュームがない場合 が存在する場合、アプリケーションを起動するとエラーが発生します。ボリュームを作成します:

    docker volume create --name=data
    
  3. 以前と同じようにアプリケーションを起動します:

    docker-compose up -d
    

次のステップ

Docker Composeは、連携できるコンテナーのセットを調整するための強力なツールです。アプリや開発環境のようなものは、Docker-composeを利用できます。その結果、どこにでも展開できるモジュール式の構成可能な環境が実現します。


Docker
  1. Dockerイメージ、コンテナー、およびDockerファイルを詳細に使用する方法

  2. Dockerコンテナを接続する方法

  3. DockerInspectコマンドの使用方法

  1. サービスプロファイルを使用してDockerComposeのスタックを簡素化する方法

  2. Dockerコンテナを一覧表示する方法

  3. CentOSにDockerComposeをインストールして使用する方法

  1. Ubuntu18.04にDockerComposeをインストールして使用する方法

  2. CentOS7にDockerComposeをインストールして使用する方法

  3. プロキシを使用するように docker を構成する方法