はじめに
コンテナ化は、近年ソフトウェア技術分野で大きな勢いを見せています。これは、Dockerのおかげと言えます。Dockerは、コンテナ内のプロセス管理を簡素化するコンテナプラットフォームです。
コンテナは、軽量で仮想化された、ポータブルな、ソフトウェア定義の標準化された環境であり、物理ホストマシン上で実行されている他のソフトウェアから隔離してソフトウェアを実行できるようにします。このポータビリティ機能により、開発者はアプリケーションを隔離されたサービスにモジュール化できます。さらに、独立して提供できるため、スケーリングの余地が生まれます。
アプリケーションを複数のサービスに分割することは間違いなく素晴らしいことですが、複数のコンテナを管理するというオーバーヘッドが伴います。コンテナ同士が通信し、同時に起動およびシャットダウンするようにしなければなりません。これを簡単にしてくれるのが、Docker Composeというツールです。Docker Composeを使用すると、開発者はYAMLファイルで定義されたルールを使用して、マルチコンテナのDockerアプリケーションを実行できます。YAMLファイルには、アプリケーションサービスと、それらがデータボリュームやネットワークを共有する方法の定義が含まれています。サービスを定義すれば、1つのコマンドですべてを起動できます。このチュートリアルでは、Ubuntu 20.04でDocker Composeをインストール、設定、および開始する方法を説明します。
前提条件
-
これは実践的なチュートリアルであるため、初期動作環境としてUbuntu 20.04がインストールされている必要があります。また、sudo権限を持つ非ルートユーザーも必要です。Ubuntuサーバーのセットアップに役立つステップバイステップのチュートリアルはこちらです。このチュートリアルに従って、sudoersファイルを設定.
-
してください。また、Dockerをインストールする必要もあります。Ubuntu 18.04にDockerをインストールして操作する方法.
に関するチュートリアルを参照してください。
Docker Composeの最新の安定版を、その公式GitHubリポジトリからダウンロードします。最新バージョンはリリース(releases)ページで確認できます。このチュートリアル執筆時点での最新バージョンは1.28.5.
です。まず、非ルートのsudoユーザーでUbuntuサーバーにログインし、次のコマンドを入力します。これにより、最新リリース(1.28.5)がダウンロードされ、実行ファイルが/usr/local/bin/docker-composeディレクトリに保存されます。これにより、docker-composeとしてグローバルにアクセスできるようになります:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
ダウンロードが完了したら、次のコマンドを入力して、docker-composeコマンドを実行可能にするための適切な権限を設定します:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
次に、以下のコマンドを実行して、インストールが成功し、コマンドが呼び出せることを確認します:
|
1 |
docker-compose –version |
以下のような出力が表示されるはずです:

これで、システムにDocker Composeが正常にインストールされたことが確認されました。
ステップ 2: docker-compose.yml ファイルの作成
の扱い方を理解するために、docker-compose.yml、公式のNginxイメージ(Docker Hub提供)を使用してWebサーバー環境を設定します。デプロイすると、コンテナから基本的なHTMLページを提供できるようになります。
作業を行うホームフォルダ内に作業ディレクトリを作成します。次のコマンドを入力してディレクトリを作成します:
|
1 |
mkdir ~/compose-example |
次に、そのディレクトリに移動します:
|
1 |
cd ~/compose-example |
ディレクトリに入ったら、Nginx環境のドキュメントルートとなるアプリケーションフォルダを作成します。このフォルダの名前はapp:
|
1 |
mkdir app |
- HTMLページの作成
テキストエディタのnanoを使用して、appフォルダ内にindex.htmlファイルを作成しましょう:
|
1 |
nano app/index.html |
次に、以下のHTMLコードをファイルに追加します:
|
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 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Composeの例</title> <!-- BootstrapコアCSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">CloudSigmaを使用した素晴らしいDocker Composeの例</h1> <p class="h4"> これは基本的な静的HTMLページです。 </p> <p class="lead text-muted"> このページは、次のツールを使用して構築されたNginx Dockerコンテナから提供されています: <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
ファイルを保存するには、CTRL + O、ENTERを押します。次に、CTRL + Xで閉じます。次に、プロジェクトのルート内にdocker-compose.yml ファイルを作成します。
- docker-composeを使用したHTMLページのホスティング
次に、以下のコマンドを入力して、ファイルをnano エディタで開きます:
|
1 |
nano docker-compose.yml |
その後、ファイル内に次のコードスニペットを追加します:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
この docker-compose.yml ファイルは、使用している設定バージョンをDocker Composeに伝えるバージョン番号から始まります。詳細については、次のリンクを参照してください:Docker Composeのバージョン管理.
バージョン番号の後には、環境を構成するサービスを含むservicesブロックがあります。このチュートリアルでは、という名前の単一のサービスのみを指定しています。webserver。この webserver サービスは、nginx:alpine イメージを使用します。また、ポートのリダイレクト 8000:80 も定義しました。これは、ホストマシンのポート 8000 からのすべてのリクエストが、ポート 80 のwebserverコンテナ(Nginxが動作している場所)にリダイレクトされることを意味します。
volumesディレクティブを使用すると、ホストマシンとコンテナの間に、データを永続化するために使用できる共有ボリュームを作成できます。私たちのyml コードスニペットでは、ローカルのapp フォルダをコンテナと共有しています。コンテナ内では、このフォルダは /usr/share/nginx/html に配置されます。したがって、Nginxのデフォルトのドキュメントルートが上書きされます。これでファイルを保存して閉じることができます。
ここまでに、サンプルのHTMLウェブページと、コンテナ化されたウェブサーバー環境を構築するための指示が含まれたdocker-compose.ymlファイルを作成しました。次のステップで、このセットアップを起動する方法を見てみましょう。
ステップ 3: Docker Composeコマンドの実行
このステップでは、コンテナ化された環境を起動するためのコマンドを実行します。以下は、Dockerイメージのダウンロードプロセスを初期化し、webserverサービスのコンテナを作成し、バックグラウンドでコンテナ化された環境を起動する単一のコマンドです。
|
1 |
docker-compose up -d |
Dockerは高速かつ効率的に動作するように設計されているため、上記のコマンドを実行すると、まずローカルシステムに定義されたイメージがあるかどうかを確認します。存在しない場合は、Docker Hubリポジトリから取得します。以下のような出力が表示されるはずです。

コマンドの実行が完了すると、バックグラウンドでコンテナ環境が起動します。実行中であることは、次のコマンドを使用して確認できます。
|
1 |
docker-compose ps |
以下のような出力が表示されるはずです。

サーバーのIPアドレスまたはドメイン名にアクセスし、ポート8000を追加すると(例: server_domain_or_IP:8000 )、作成したサンプルのHTMLページが表示されるはずです。

覚えているかと思いますが、コンテナとホストシステムの間で共有ボリュームを設定しました。これにより、コンテナ内のファイルがホストシステム上のファイルと同期されます。したがって、 index.html ファイルに変更を加えると、自動的にコンテナと同期され、ブラウザでページを再読み込みしたときに反映されます。nanoエディタで試してみることができます。次のステップで、さらにいくつかのコマンドを学びましょう。
ステップ 4: コンテナ環境を管理するための追加のDocker Composeコマンド
単一の docker-compose-up コマンドを使用してウェブページのデプロイに成功したので、コンテナ化された環境の管理に役立つ追加のコマンドをいくつか見てみましょう。
まずはlogsコマンドから始めます。ログは、アプリケーションの障害をトラブルシューティングする際に非常に重要です。まず、次のコマンドを実行して、Nginxコンテナによって生成されたログを表示します。
|
1 |
docker-compose logs |
以下はログの出力例です:

次のコマンドを使用すると、コンテナの状態を変更せずに環境の実行を一時停止できます。
|
1 |
docker-compose pause |
![]()
次に、実行を再開(一時停止を解除)するには、次のコマンドを使用します。
|
1 |
docker-compose unpause |
![]()
データを破棄せずにコンテナを停止したい場合があります。そのためには、次のコマンドを使用します。
|
1 |
docker-compose stop |
![]()
コンテナ化された環境に関連付けられているコンテナ、ネットワーク、およびボリュームを破棄するには、次のコマンドを使用します。
|
1 |
docker-compose down |
![]()
上記のコマンドは、Docker Composeが環境を起動するために使用するベースイメージを削除しないことに注意してください。これにより、ローカルマシンに一致するイメージがあるか確認されるため、環境を起動する際のビルドが高速になります。ベースイメージを完全に削除したい場合は、コマンドで指定する必要があります。この例では、nginx:alpine イメージを次のコマンドで削除できます:
|
1 |
docker image rm nginx:alpine |

最後に、公式の Docker Compose Command-line reference ドキュメントでより多くのコマンドを確認できます。
まとめ
このチュートリアルでは、Ubuntu 20.04にDocker Composeをインストールし、Nginx Webサーバーイメージに基づくコンテナ化された環境を作成し、Docker Composeコマンドを使用してさまざまなサービスを管理する方法を学びました。
複数のコンテナに依存する実際の動的アプリケーションをデプロイする方法を学びたい場合は、Docker Composeを使用したLaravel、Nginx、およびMySQLのデプロイ に関するチュートリアルをご覧ください。また、docker-composeコマンドの完全なリストは、公式の Docker Compose ドキュメントで確認できます。.
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。