docker compose create コマンドでコンテナをビルド・作成する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker-compose.ymlファイルに基づいてコンテナを構築・作成するためにdocker compose createコマンドを効果的に使用する方法を学びます。まず、LabEx 環境で Docker Compose をインストールするための必要な手順を含め、シンプルなdocker-compose.ymlファイルを準備します。

セットアップ後、docker compose createの基本的な使用方法を確認し、その後さまざまなオプションについて掘り下げていきます。これには、--force-recreateを使用したコンテナの強制再作成、--no-buildを使用したイメージの再構築なしでのコンテナ作成、--pull alwaysで最新のイメージを確実に取得する方法などが含まれます。この実験を終える頃には、マルチコンテナアプリケーションを管理するためにdocker compose createを活用する方法について確かな理解が得られるでしょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555076{{"docker compose create コマンドでコンテナをビルド・作成する方法"}} docker/ps -.-> lab-555076{{"docker compose create コマンドでコンテナをビルド・作成する方法"}} docker/rm -.-> lab-555076{{"docker compose create コマンドでコンテナをビルド・作成する方法"}} docker/create -.-> lab-555076{{"docker compose create コマンドでコンテナをビルド・作成する方法"}} docker/pull -.-> lab-555076{{"docker compose create コマンドでコンテナをビルド・作成する方法"}} end

シンプルな docker-compose.yml ファイルの準備

このステップでは、シンプルなdocker-compose.ymlファイルを準備します。始める前に、Docker Compose をインストールしましょう。LabEx VM 環境には Docker Compose がプリインストールされていないため、手動でインストールする必要があります。Docker Compose バイナリをダウンロードし、実行可能にします。

まず、curlを使用して Docker Compose バイナリをダウンロードします。インストールされている Docker バージョンと互換性のある1.29.2バージョンをダウンロードします。

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

このコマンドは、公式 GitHub リリースページから Docker Compose バイナリをダウンロードし、/usr/local/bin/docker-composeに保存します。$(uname -s)$(uname -m)の部分は、オペレーティングシステムとアーキテクチャを自動検出し、正しいバイナリをダウンロードすることを保証します。

次に、ダウンロードしたバイナリを実行可能にする必要があります。

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

このコマンドは、docker-composeファイルに実行権限を追加し、コマンドとして実行できるようにします。

それでは、Docker Compose が正しくインストールされていることをバージョンを確認して検証しましょう。

docker-compose --version

docker-compose version 1.29.2, build 5becea4cのような出力が表示されるはずです。これで Docker Compose がインストールされ、使用準備が整ったことが確認できます。

次に、~/projectディレクトリにシンプルなdocker-compose.ymlファイルを作成します。このファイルはnginxイメージを使用した単一サービスを定義します。

nano ~/project/docker-compose.yml

このコマンドは、nanoテキストエディタを開き、docker-compose.ymlファイルを作成・編集します。エディタに以下の内容を貼り付けます:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

このdocker-compose.ymlファイルを分解してみましょう:

  • version: '3.8'は Docker Compose ファイルフォーマットのバージョンを指定します
  • services:は実行したいサービス(コンテナ)を定義します
  • web:は私たちのサービス名です。任意の名前を選択できます
  • image: nginx:latestはこのサービスで使用する Docker イメージを指定します。この場合、公式 Nginx イメージの最新バージョンを使用しています
  • ports:はホストマシンとコンテナ間のポートマッピングを行います。"80:80"はホストのポート 80 をコンテナのポート 80 にマッピングします。これにより、Web ブラウザでhttp://localhost(または VM の IP アドレス)にアクセスすることで、コンテナ内で動作する Nginx Web サーバーにアクセスできます

Ctrl + Oを押してファイルを保存し、Enterを押し、Ctrl + Xを押してエディタを終了します。

これで、Nginx イメージを使用した Web サービスを定義するシンプルなdocker-compose.ymlファイルが正常に作成されました。次のステップでは、このファイルを使用してコンテナを作成・管理します。

docker compose create を使用したコンテナの作成

このステップでは、前のステップで準備したdocker-compose.ymlファイルに基づいて、docker-compose createコマンドを使用してコンテナを作成します。docker-compose createコマンドはコンテナを作成しますが、起動はしません。サービスをすぐに実行せずにコンテナ環境をセットアップしたい場合に便利です。

コンテナを作成する前に、nginxイメージがローカルに存在することを確認しましょう。存在しない場合、Docker Compose は作成プロセス中に自動的にイメージをプルしますが、使用するイメージを把握しておくことは良い習慣です。docker pullコマンドを使用して手動でイメージをプルできます:

docker pull nginx:latest

このコマンドは Docker Hub からnginx:latestイメージをローカルマシンにダウンロードします。ダウンロードの進捗と完了を示す出力が表示されるはずです。

次に、docker-compose.ymlファイルがあるディレクトリに移動します。この場合は~/projectディレクトリです。

cd ~/project

それでは、docker-compose createコマンドを実行します:

docker-compose create

このコマンドはカレントディレクトリのdocker-compose.ymlファイルを読み込み、定義されているコンテナを作成します。webサービスのコンテナが作成されていることを示す出力が表示されるはずです。

コマンドが完了したら、docker ps -aコマンドを使用して作成されたコンテナの状態を確認できます。

docker ps -a

docker ps -aの出力には、実行されていないコンテナも含めてすべてのコンテナが表示されます。project_web_1という名前のコンテナ(名前はディレクトリ名とサービス名に基づいて生成されます)がCreatedステータスで表示されるはずです。これにより、コンテナが正常に作成されたがまだ起動されていないことが確認できます。

docker-compose createコマンドは、コンテナを事前にプロビジョニングするのに便利です。次のステップでは、これらのコンテナを起動して管理する方法を探ります。

--force-recreate によるコンテナの強制再作成

このステップでは、docker-compose create --force-recreateコマンドを使用してコンテナを強制的に再作成する方法を学びます。--force-recreateフラグは、コンテナの設定が変更されていない場合でもコンテナを再作成するために使用します。これは、Docker Compose が自動的に検知しないベースイメージの変更後など、コンテナインスタンスをリフレッシュする必要があるシナリオで便利です。

まず、docker-compose.ymlファイルがある~/projectディレクトリにいることを確認してください。

cd ~/project

次に、--force-recreateフラグを付けてdocker-compose createコマンドを実行します:

docker-compose create --force-recreate

前のステップですでにコンテナを作成しているため、Docker Compose は既存のコンテナを検知します。--force-recreateフラグにより、既存のコンテナが削除され、同じ設定で新しいコンテナが作成されます。既存コンテナが削除され、新しいコンテナが作成されていることを示す出力が表示されるはずです。

docker ps -aを使用して、再度コンテナの状態を確認しましょう。

docker ps -a

project_web_1という名前のコンテナがCreatedステータスで表示されるはずです。名前と設定は同じですが、これは--force-recreateフラグによって作成された新しいコンテナインスタンスです。

--force-recreateフラグは、docker-compose.ymlファイルの設定が変更されているかどうかに関係なく、新しいコンテナインスタンスを確実に作成したい場合に強力なオプションです。

--no-build オプションを使用したビルドなしのコンテナ作成

このステップでは、docker-compose create --no-buildオプションについて説明します。このフラグは、docker-compose.ymlファイルに Dockerfile からビルドされるサービス(build命令を使用)が含まれている場合に、イメージの再ビルドを行わずにコンテナのみを作成したい場合に便利です。現在のdocker-compose.ymlファイルは事前ビルドされたイメージ(nginx:latest)のみを使用しているため、この特定のケースでは--no-buildフラグはイメージビルドプロセスに目に見える影響を与えません。ただし、ビルドを必要とするサービスで将来使用するために、その目的を理解しておくことが重要です。

まず、~/projectディレクトリにいることを確認してください。

cd ~/project

それでは、--no-buildフラグを付けてdocker-compose createコマンドを実行しましょう。前のステップからproject_web_1コンテナが既に存在するため、新しいコンテナが確実に作成されるように--force-recreateフラグも使用します。

docker-compose create --no-build --force-recreate

docker-compose.ymlbuild命令で定義されたサービスがあるシナリオでは、このコマンドを実行すると既存のイメージ(利用可能な場合)を使用するかイメージをプルしてコンテナを作成しますが、Dockerfile で定義されたイメージビルドプロセスはスキップされます。現在のケースでは事前ビルドされたイメージを使用しているため、出力は前のステップと同様で、古いコンテナの削除と新しいコンテナの作成が示されます。

再度コンテナの状態を確認しましょう。

docker ps -a

project_web_1コンテナがCreated状態で表示されるはずです。--no-buildフラグは主に Dockerfile からビルドされるサービスに影響し、コンテナ作成時のビルドプロセスを防止します。

--pull always によるコンテナ作成とイメージ取得

このステップでは、docker-compose create --pull alwaysコマンドを使用します。--pull alwaysフラグは、ローカルにイメージのコピーが存在する場合でも、コンテナ作成前に常に最新バージョンのイメージを取得するよう Docker Compose に指示します。これはサービスのために常に最新のイメージを使用していることを保証するのに便利です。

まず、~/projectディレクトリにいることを確認してください。

cd ~/project

次に、--pull alwaysフラグを付けてdocker-compose createコマンドを実行します。project_web_1コンテナは既に存在するため、更新された可能性のあるイメージに基づいて新しいコンテナを作成するために--force-recreateフラグも使用します。

docker-compose create --pull always --force-recreate

このコマンドを実行すると、Docker Compose はまず Docker Hub 上のnginx:latestイメージの更新を確認します。新しいバージョンが利用可能な場合、それを取得します。その後、既存のproject_web_1コンテナを削除し、取得したイメージを使用して新しいコンテナを作成します。新しいイメージが利用可能な場合の取得プロセスと、それに続くコンテナの削除と作成を示す出力が表示されるはずです。

最後にコンテナの状態を確認しましょう。

docker ps -a

project_web_1コンテナがCreated状態で表示されます。ここでの重要な違いは、Docker Compose がこのコンテナインスタンスを作成する前に、積極的に新しいイメージを確認し、必要に応じて取得したことです。

--pull alwaysフラグは、最新のイメージバージョンでサービスデプロイメントを最新の状態に保つために重要であり、最新の機能、バグ修正、セキュリティ更新の恩恵を受けることができます。

まとめ

この実験では、docker-compose.ymlファイルに基づいてコンテナをビルドおよび作成するdocker compose createコマンドの使用方法を学びました。まず、Nginx サービスを定義するシンプルなdocker-compose.ymlファイルを準備し、LabEx 環境でバイナリをダウンロードして実行可能にすることで Docker Compose を手動でインストールしました。その後、インストールを確認しました。

準備が整った後、docker compose createコマンドのさまざまなオプションを検討しました。基本的なコマンドを使用してコンテナを作成する方法、--force-recreateフラグで既存のコンテナを強制的に再作成する方法、--no-buildフラグを使用してイメージを再ビルドせずにコンテナを作成する方法、そして--pull alwaysフラグで作成前に最新のイメージを確実に取得する方法を学びました。これらの手順は、コンテナライフサイクルを管理する際にdocker compose createが提供する柔軟性と制御機能を示しています。