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のインストール
-
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
-
ファイルのアクセス許可を設定する:
sudo chmod +x /usr/local/bin/docker-compose
基本的な使用法
このセクションでは、Dockerの公式ドキュメントから取得したDockerComposeファイルの例を確認します。
-
docker-compose.yml
を開きます テキストエディタで、次のコンテンツを追加します:- ファイル:docker -compose.yml
-
ファイルを保存し、同じディレクトリからDocker Composeを実行します:
docker-compose up -d
これにより、
db
がビルドおよび実行されます およびwordpress
コンテナ。docker run
で単一のコンテナを実行する場合と同じように 、-d
フラグは、コンテナをデタッチモードで開始します。 -
これで、WordPressコンテナとMySQLコンテナがホストで実行されます。
192.0.8.1:8000/wordpress
に移動します Webブラウザーで、新しくインストールしたWordPressアプリケーションを確認します。docker ps
を使用することもできます 結果の構成をさらに詳しく調べるには:docker ps
-
コンテナを停止して削除します:
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つのセクションを提出してください。
シンプルなサービスを定義する:
-
新しい
docker-compose.yml
を作成します テキストエディタで、次のコンテンツを追加します:- ファイル:docker -compose.yml
services
の各エントリdocker-compose
の場合、セクションは別のコンテナを作成します 実行されます。この時点で、セクションには公式のアルパインディストリビューションに基づく単一のコンテナが含まれています:再起動コード> ディレクティブは、コンテナを常に再起動する必要があることを示すために使用されます(たとえば、クラッシュやシステムの再起動後)。
-
container_name
ディレクティブは、ランダムに生成されたコンテナ名を上書きし、覚えやすく操作しやすい名前に置き換えるために使用されます。 - Dockerコンテナーでプロセスが実行されていない場合、デフォルトでDockerコンテナーは終了します。
tail -f
は進行中のプロセスであるため、無期限に実行され、コンテナが停止するのを防ぎます。デフォルトのentrypoint
コンテナを実行し続けるためにオーバーライドされます。
-
コンテナを持ち出す:
docker-compose up -d
-
コンテナのステータスを確認します:
docker ps
出力は次のようになります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 967013c36a27 alpine "tail -f /dev/null" 3 seconds ago Up 2 seconds Alpine_Distro
-
コンテナを降ろします:
docker-compose down
追加サービスの追加
ここから、コンテナのエコシステムの構築を開始できます。それらがどのように連携して通信するかを定義できます。
-
docker-compos.yml
を再度開きますデータベース
を追加します 以下のサービス:- ファイル:docker -compose.yml
現在、2つのサービスが定義されています:
- ディストロ
- データベース
Distroサービスは以前と同じです。データベースサーバーには、postgresコンテナの命令とディレクティブが含まれています:
volume:-../ dumps:/ tmp
およびports:-"5432:5432"
、最初のディレクティブは、コンテナ化された/ dumps
をマップします ローカルの/tmp
へのフォルダ フォルダ。 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
-
両方のコンテナを停止します:
docker-compose down
nginxサービスを追加する
-
アプリケーションがウェブサイトにサービスを提供できるように、nginxコンテナを追加します:
- ファイル:docker -compose.yml
この
docker-compose
ファイルにはいくつかの新しいディレクティブが含まれています: environment およびリンク 。最初のディレクティブは、コンテナー内のランタイムレベルのオプションを設定します。リンク
コンテナ間に依存関係ネットワークを作成します。 nginxコンテナーは、実行する他の2つに依存します。さらに、対応するコンテナは、エイリアスで示されるホスト名で到達可能になります。この場合、db
にpingを実行しますweb
から コンテナはデータベース
に到達します サービス。リンク
は必要ありませんが コンテナが相互に通信するためのディレクティブ、リンク
docker-composeアプリケーションを起動するときにフェイルセーフとして機能することができます。 -
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
-
LinodeのパブリックIPアドレス、ポート
8080
に移動して、nginxをテストします ブラウザ内(例:192.0.2.0:8080
)。デフォルトのnginxランディングページが表示されます。
永続データストレージ
PostgreSQLデータをコンテナ内に直接保存することはお勧めしません。 Dockerコンテナーは、一時的なものとして扱われることを目的としています。アプリケーションのコンテナーは、 docker-compose up
を実行するときにゼロから構築されます。 docker-compose down
を実行すると破棄されます 。さらに、システムで予期しないクラッシュや再起動が発生すると、コンテナに保存されているデータが失われます。
これらの理由から、データベースコンテナがデータの保存に使用する永続ボリュームをホストに設定することが重要です。
-
ボリューム
を追加しますdocker-compose.yml
へのセクションデータベース
を編集します ボリュームを参照するサービス:- ファイル:docker -compose.yml
-
external:true
DockerComposeに既存の外部データボリュームを使用するように指示します。data
という名前のボリュームがない場合 が存在する場合、アプリケーションを起動するとエラーが発生します。ボリュームを作成します:docker volume create --name=data
-
以前と同じようにアプリケーションを起動します:
docker-compose up -d
次のステップ
Docker Composeは、連携できるコンテナーのセットを調整するための強力なツールです。アプリや開発環境のようなものは、Docker-composeを利用できます。その結果、どこにでも展開できるモジュール式の構成可能な環境が実現します。