Docker Run コマンドのパラメータ

DockerDockerBeginner
オンラインで実践に進む

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

はじめに

この実験では、docker run コマンドとそのさまざまなパラメータにのみ焦点を当てます。docker run コマンドは Docker 操作の基本であり、特定の構成でコンテナを作成して起動することができます。

このコマンドのパラメータをマスターすることで、コンテナ化されたアプリケーションをより制御できるようになり、Docker コンテナを効果的に展開および管理する能力が向上します。

名前付け、デタッチドモード、ポートマッピング、ボリュームマウント、環境変数、リソース制約など、幅広いパラメータをカバーします。

パラメータの一部は既にご存知かもしれませんが、他のパラメータは初めての方もいらっしゃるかもしれません。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 95.42%です。学習者から 98.39% の好評価を得ています。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/ls -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/exec -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/inspect -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/port -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/volume -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} docker/network -.-> lab-389228{{"Docker Run コマンドのパラメータ"}} end

基本的な Docker 実行とコンテナの名前付け

まずは docker run の基本を学び、コンテナに名前を付ける方法を探ってみましょう。

まず、基本的な Nginx コンテナを実行します。

docker run nginx

このコマンドは、Nginx コンテナをフォアグラウンドで実行します。端末にログ出力のストリームが表示されます。これは、コンテナがフォアグラウンドで実行されており、直接ログを表示しているためです。

このコンテナを停止するには、Ctrl+C を押します。停止に数秒かかることがありますが、これは正常で、Docker がコンテナにグレースフルにシャットダウンする時間を与えているためです。

次に、デタッチドモードで実行して名前を付けてみましょう。

docker run -d --name my-nginx nginx

このコマンドを分解してみましょう。

  • docker run:コンテナを実行する基本コマンドです。
  • -d:このオプションは、デタッチドモードでコンテナを実行します。つまり、バックグラウンドで実行されます。端末には出力が表示されません。
  • --name my-nginx:これは、コンテナに「my-nginx」という名前を割り当てます。名前を指定しない場合、Docker はランダムな名前を割り当てます。
  • nginx:コンテナを作成するために使用するイメージの名前です。

このコマンドを実行すると、長い文字列が表示されます。これはコンテナ ID です。Docker はバックグラウンドでコンテナを起動しました。

名前が既に使用されているというエラーが表示された場合は、その名前のコンテナが既に存在することを意味します。別の名前を選ぶか、既存のコンテナを削除することができます(後の実験で学びます)。

ポートマッピング

docker run-p パラメータを使うと、コンテナ内のポートをホストにマッピングできます。これは、ホストマシンからコンテナ内で実行されているサービスにアクセスするために重要です。

ポートマッピング付きで Nginx コンテナを実行します。

docker run -d --name nginx-mapped -p 8080:80 nginx

このコマンドの新しい部分を分解しましょう。

  • -p 8080:80:これは、ホストの 8080 番ポートをコンテナ内の 80 番ポートにマッピングします。形式は常に host_port:container_port です。

デフォルトでは、Nginx はコンテナ内の 80 番ポートで実行されます。ホストの 8080 番ポートにマッピングすることで、Web ブラウザで localhost:8080 にアクセスすることでアクセスできます。

次に、Nginx のウェルカムページがアクセス可能かどうかを確認しましょう。コマンドラインから HTTP リクエストを行うことができる curl コマンドを使います。

curl http://localhost:8080

Nginx のウェルカムページの HTML コンテンツが表示されるはずです。curl がインストールされていない場合は、以下のコマンドでインストールできます。

sudo apt-get update && sudo apt-get install -y curl

まだページにアクセスできない場合は、以下の点を確認してください。

  1. コンテナが実行されていることを確認する:docker ps | grep nginx-mapped
  2. ポートが実際にマッピングされているかどうかを確認する:docker port nginx-mapped
  3. クラウドサーバを使用している場合は、ファイアウォールが 8080 番ポートのトラフィックを許可していることを確認する。

ボリュームマウント

docker run-v パラメータを使うと、ボリュームをマウントして、ホストとコンテナ間でデータを共有できます。これは、データを永続化するためや、コンテナに設定ファイルを提供するために非常に便利です。

まず、ホスト上に簡単なディレクトリ構造を作成しましょう。

mkdir -p ~/project/nginx-data
echo "<html><body><h1>Hello from mounted volume</h1></body></html>" > ~/project/nginx-data/index.html

これらのコマンドは以下のことを行います。

  1. ホームディレクトリの project フォルダ内に新しいディレクトリ nginx-data を作成します。
  2. この新しいディレクトリ内に簡単な HTML ファイル index.html を作成します。

次に、Nginx コンテナを実行してこのディレクトリをマウントしましょう。

docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx

このコマンドを分解しましょう。

  • docker run:新しいコンテナを実行するコマンドです。
  • -d:これは、デタッチドモード(バックグラウンド)でコンテナを実行します。
  • --name nginx-volume:これは、コンテナに「nginx-volume」という名前を割り当てます。
  • -p 8081:80:これは、ホストの 8081 番ポートをコンテナ内の 80 番ポートにマッピングします。
  • -v ~/project/nginx-data:/usr/share/nginx/html:これは、ホストの nginx-data ディレクトリをコンテナ内の /usr/share/nginx/html ディレクトリにマウントします。ここが Nginx がコンテンツを提供するために探す場所です。
  • nginx:コンテナを作成するために使用するイメージの名前です。

次に、カスタムページが表示されているかどうかを確認しましょう。

curl http://localhost:8081

カスタム HTML ファイルのコンテンツ「Hello from mounted volume!」が表示されるはずです。

カスタムコンテンツが表示されない場合は、以下の点を確認してください。

  1. ホストシステム上の ~/project/nginx-data/index.html ファイルが存在することを確認します。
  2. コンテナが実行されていることを確認する:docker ps | grep nginx-volume
  3. Nginx のログを確認してエラーがないかどうかを確認する:docker logs nginx-volume

ホストディレクトリをコンテナにマウントするこの方法は、バインドマウントと呼ばれます。ホストとコンテナ間でファイルを共有する簡単な方法です。忘れないでください。

  1. ホストディレクトリパスは絶対パスでなければなりません。
  2. ホストディレクトリが存在しない場合、Docker は自動的に作成します。
  3. このディレクトリ内のファイルに対して行われた変更(ホストまたはコンテナのどちらかで)は、ホストとコンテナの両方に即座に表示されます。
  4. パーミッションに注意してください。コンテナはデフォルトで root として実行されるため、ホストユーザが変更できないファイルが作成される可能性があります。

この方法を使うことで、「not a directory」エラーを回避できます。なぜなら、ディレクトリをマウントしているからです。このアプローチにより、コンテナを再作成することなく、ファイルを追加、削除、または変更する柔軟性が増えます。

環境変数

docker run-e パラメータを使うと、コンテナ内で環境変数を設定できます。これは、コンテナ内で実行されているアプリケーションをコードを変更することなく設定するのに便利です。

環境変数付きでコンテナを実行します。

docker run -d --name nginx-env -e NGINX_HOST=mywebsite.com -e NGINX_PORT=80 nginx

新しい部分を分解しましょう。

  • -e NGINX_HOST=mywebsite.com:これは、値 mywebsite.comNGINX_HOST という名前の環境変数を設定します。
  • -e NGINX_PORT=80:これは、値 80 で別の環境変数 NGINX_PORT を設定します。

環境変数は、コンテナ内で実行されているプロセスによってアクセスできるキーと値のペアです。多くの Docker イメージは、設定に特定の環境変数を使用するように設計されています。

環境変数を確認できます。

docker exec nginx-env env | grep NGINX_

このコマンドは以下のことを行います。

  • docker exec nginx-env:これは、実行中の nginx-env コンテナでコマンドを実行するように Docker に指示します。
  • env:このコマンドはすべての環境変数を表示します。
  • | grep NGINX_:これは、出力をフィルタリングして、「NGINX_」を含む行のみを表示します。

2 つの環境変数が表示されるはずです。

環境変数が表示されない場合は、以下を確認してください。

  1. コンテナが実行されていますか?docker ps | grep nginx-env で確認します。
  2. docker run コマンドで環境変数の名前を正しく入力しましたか?

リソース制限

Docker を使用すると、docker run のさまざまなパラメータを使ってコンテナにリソース制限を設定できます。これは、特に複数のコンテナを実行している場合に、ホストシステムのパフォーマンスと安定性を管理するために重要です。

メモリと CPU の制限付きでコンテナを実行します。

docker run -d --name nginx-limited --memory 256m --cpus 0.5 nginx

新しい部分を分解しましょう。

  • --memory 256m:これは、コンテナのメモリを 256 メガバイトに制限します。「m」はメガバイトを表します。ギガバイトを表すには「g」も使えます。
  • --cpus 0.5:これは、コンテナが使用できる CPU コアを最大半分に制限します。

これらの制限により、コンテナが指定された以上のリソースを使用することが防止され、単一のコンテナがホストのリソースを独占することを防ぐことができます。

これらの制限が正しく適用されたことを確認できます。

docker inspect -f '{{.HostConfig.Memory}}' nginx-limited
docker inspect -f '{{.HostConfig.NanoCpus}}' nginx-limited

最初のコマンドの出力は 268435456(256MB をバイト数に変換した値)で、2 番目のコマンドの出力は 500000000(0.5 CPU をナノ単位に変換した値)でなければなりません。

異なる値が表示された場合は、docker run コマンドを再度確認して、制限を正しく指定していることを確認してください。

注:リソース制限を設定すぎると、コンテナのパフォーマンスが低下したり、クラッシュする可能性があります。コンテナに問題がある場合は、これらの制限を増やしてみてください。

ネットワーク設定

docker run--network パラメータを使うと、コンテナをネットワークに接続できます。これは、コンテナ同士の通信や、コンテナのグループを分離する際に便利です。

まず、カスタムブリッジネットワークを作成します。

docker network create my-custom-network

これにより、my-custom-network という名前の新しいブリッジネットワークが作成されます。ブリッジネットワークは Docker で最も一般的なネットワークタイプです。

次に、このネットワークに接続されたコンテナを実行します。

docker run -d --name nginx-networked --network my-custom-network nginx

--network my-custom-network オプションにより、コンテナが先ほど作成したネットワークに接続されます。

同じネットワーク上のコンテナは、ホスト名としてコンテナ名を使用して相互に通信できます。これにより、サービスを簡単にリンクできます。

ネットワークが存在しないというエラーが表示される場合は、docker network create コマンドで正しくネットワークを作成したことを確認してください。

再起動ポリシー

docker run--restart パラメータを使うと、コンテナの再起動ポリシーを指定できます。これは、コンテナがクラッシュしたり、Docker デーモンが再起動したりした場合でも、コンテナが稼働し続けるようにするのに役立ちます。

再起動ポリシー付きでコンテナを実行します。

docker run -d --name nginx-restart --restart unless-stopped nginx

--restart unless-stopped オプションは、再起動ポリシーを「unless-stopped」に設定します。これは、コンテナがユーザによって明示的に停止されない限り、自動的に再起動することを意味します。

他の再起動ポリシーには以下があります。

  • no:デフォルト。コンテナを自動的に再起動しません。
  • on-failure:コンテナがゼロ以外のステータスで終了した場合のみ再起動します。
  • always:終了ステータスに関係なく、常にコンテナを再起動します。

再起動ポリシーを確認できます。

docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' nginx-restart

このコマンドの出力は unless-stopped になるはずです。

期待する出力が表示されない場合は、docker run コマンドを再度確認して、再起動ポリシーを正しく指定していることを確認してください。

作業ディレクトリとコマンド

このステップでは、コンテナ内の作業ディレクトリを設定し、コンテナ起動時にカスタムコマンドを実行する方法を学びます。

docker run-w パラメータを使って、コンテナ内の作業ディレクトリを設定し、イメージ名の後に実行するコマンドを指定できます。

これらの概念を組み合わせてみましょう。

docker run -d --name nginx-custom -w /app nginx sh -c "touch newfile.txt && nginx -g 'daemon off;'"

このコマンドを分解しましょう。

  • -d:コンテナをデタッチドモード(バックグラウンド)で実行します。
  • --name nginx-custom:コンテナの名前を「nginx-custom」に設定します。
  • -w /app:コンテナ内の作業ディレクトリを /app に設定します。
  • nginx:使用するイメージの名前。
  • sh -c "...":シェルコマンドを実行します。
    • touch newfile.txtnewfile.txt という名前の空のファイルを作成します。
    • &&:前のコマンドが成功した場合、次のコマンドを実行します。
    • nginx -g 'daemon off;':Nginx をフォアグラウンドで起動し、コンテナを稼働させ続けます。

次に、コンテナが実行されていることと、ファイルが作成されたことを確認しましょう。

docker ps | grep nginx-custom
docker exec nginx-custom ls -l /app/newfile.txt

最初のコマンドはコンテナが実行されていることを示し、2 番目のコマンドはコンテナの /app ディレクトリ内の newfile.txt ファイルの詳細を一覧表示します。

まとめ

この実験では、docker run コマンドを深く掘り下げ、そのさまざまなパラメータとオプションを調べました。以下の内容をカバーしました。

  1. 基本的なコンテナの実行と命名
  2. ホストからコンテナサービスにアクセスするためのポートマッピング
  3. ホストとコンテナ間でデータを共有するためのボリュームマウント
  4. コンテナ構成用の環境変数の設定
  5. コンテナのリソース使用を制限するためのリソース制限の適用
  6. コンテナ通信のためのネットワーク設定
  7. コンテナの信頼性のための再起動ポリシー
  8. コンテナ起動時の作業ディレクトリとコマンドの指定

docker run のこれらのパラメータは、Docker コンテナを構成および管理するための強力なツールを提供します。これらのオプションをマスターすることで、より洗練されたカスタマイズされたコンテナ展開を作成できます。コンテナがホストシステムとどのように相互作用するか、どのようなリソースを消費できるか、さらにはさまざまなシナリオでどのように振る舞うかを制御できます。

OSZAR »