Dockerコンテナの実行
この投稿では、Dockerコンテナの実行に関するよくある質問トップ5をリストアップします。 Dockerは最もよく文書化されているサービスの1つですが、探している質問を正確に見つけるのはいつも難しいものです。 もしあなたが以下のような質問をしたことがあるなら、このリストが役に立つはずだ。
1. Dockerコンテナを実行する(イメージを実行する)コマンド [#1] ## 1.
Dockerコンテナを実行するコマンドは docker container run
です。
このコマンドは docker run
コマンドと同じ機能を実行するもので、Dockerの近代化されたコマンド構造に新しく追加されたものです。
後で説明する他のコマンドと組み合わせて使う場合でも、docker container run
の方が直感的で区別しやすいと思います、
このコマンドを使うことをお勧めします。
基本的なdocker container run
コマンドは以下のようになる。
$ docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]].
[OPTIONS]
: コンテナの実行に使用するオプションのパラメータ。 例えば、-d
はバックグラウンドでコンテナを実行し、-p
はホストとコンテナ間のポートマッピングを設定し、-v
はボリュームのマウントに使用する。IMAGE
: コンテナを実行する Docker イメージを指定する。 ローカルイメージでも Docker Hub などのリモートレジストリにあるイメージでも良い。COMMAND
: コンテナ実行時に実行するコマンド: コンテナ起動時に実行するコマンド。オプションのパラメータである、 指定した場合、IMAGE
部で指定したDockerイメージのDockerファイル内で、CMD
ディレクティブの代わりに指定したコマンドが実行される。[ARG]
:[COMMAND]
に渡す引数で、オプションパラメータです。
以下に例を示します。
$ docker container run -d -p 8080:80 --name my_container nginx
ここで使用したオプションを説明します。
-d
: コンテナをバックグラウンドで実行する(デタッチモード)。-p 8080:80
: ホストのポート8080
をコンテナのポート80
にマップする。--name my_container
: コンテナの名前をmy_container
に設定する。nginx
: コンテナの名前をmy_container
に設定する: 公式のnginx
Docker イメージの最新バージョンに基づいてコンテナを実行する。 ローカル環境にこのバージョンのnginx
イメージがない場合は、Docker Hub からダウンロードする。
つまり、上記のコマンドは nginx
イメージをベースに my_container
という名前のコンテナを作成し、ホストのポート 8080
をコンテナのポート 80
に割り当てます。
をコンテナの 80
ポートに割り当て、コンテナをバックグラウンドで実行する。
2. 起動しないコンテナのトラブルシューティング
セクション1で見たように、docker container run
コマンドを使用しているにもかかわらず、コンテナが正しく実行されず、イライラすることがあるかもしれません。
Dockerコンテナが実行されない理由は数多くありますが、ここではより一般的な理由とその解決策を紹介します。
2.1. イメージが存在しない
Dockerコンテナを実行するには、そのコンテナのイメージがローカルシステム上に存在するか、Docker Hubなどのリモートロケーションからダウンロード可能である必要があります。
イメージが存在せず、ダウンロードに失敗する場合は、ネットワークの状況を確認し、docker image pull
コマンドを使用して手動でイメージをダウンロードし、コンテナを実行してみてください。
2.2. Docker サービスが起動していない
docker サービスが起動していない場合、コンテナを実行することはできない。
この場合、Linux では systemctl start docker
を、MacOS と Windows では Docker Desktop を実行し、Docker が正常に動作しているかトレイアイコンを確認する。
2.3. コンテナのリソース不足
コンテナは多くのCPUやメモリを使用するため、システムに十分なリソースがない場合、実行できないことがあります。 この場合、不要なアプリケーションやコンテナを終了して必要なリソースを解放してから、コンテナを実行する必要があります。
2.4. コンテナ設定エラー
ockerfile
または docker container run
コマンドに誤った設定が含まれていると、コンテナが実行されないことがある。
この場合、設定を確認して問題を修正し、再度コンテナを実行する必要があります。
セクション1をもう一度読み、実行してみてください。
2.5. コンテナが即座に終了する
コンテナの実行コマンドがすぐに終了する場合(例えば、"Hello, World!)
コンテナは実行後すぐに終了し、実行されていないように見えるかもしれません。
この場合、コンテナを実行し続けるようにコマンドを修正するか、docker container logs
コマンドを使用してコンテナの出力を確認する必要がある。
これらの問題のトラブルシューティングを行っても問題が解決しない場合は、docker container logs [container_id]
コマンドを使用してコンテナのログを表示する、
docker container run
コマンドに -it
オプションを追加すると、コンテナをインタラクティブモードで実行し、問題を確認することができます。
この部分については、セクション5を参照してください。
3. コンテナ自動起動フックを実行し続ける方法
Dockerコンテナを自動起動する方法はいくつかあります。 最も一般的な方法は、Docker再起動ポリシーを使用する方法と、Docker Composeを使用する方法です。
3.1. Docker再起動ポリシー
Dockerには再起動ポリシーが用意されており、コンテナに障害が発生したときや、Dockerデーモン(バックグラウンドですべてのDockerプロセスを管理するプログラム)が起動したときに、コンテナを自動的に再起動します。 これを使用してコンテナを自動的に実行できる。
再起動ポリシーを指定するには、docker container run
コマンドに--restart
オプションを追加して設定する。
再起動ポリシーには no
、on-failure
、always
、unless-stopped
などの直感的なオプションがある。
例えば、以下のコマンドはコンテナが停止したら常に再起動するように指示する:
docker run -d --restart always my-container
3,2. Docker Compose
Docker Composeは複数のコンテナを定義・管理できるツールです。 これらのDocker Composeを使用して、コンテナを自動的に起動することができます。
Docker ComposeはYAMLファイル形式を使ってサービスを定義します。
このファイル内で、コンテナを自動的に起動するための再起動ポリシーを設定できる。
例えば、docker-compose.yml
ファイルの例を以下に示す:
version: "3"
services:
web:
image: my-web-app
restart: always
...
この設定により、my-web-app
サービスは常に自動的に起動する。
Docker SwarmやKubernetesなどのコンテナ・オーケストレーション・ツールを使って、コンテナを自動的に起動・管理することもできる。 これらのツールは、クラスタ内のコンテナのスケジューリング、スケーリング、リカバリに役立つ。
4. コンテナをidで実行する方法
質問'で見たdocker container run
コマンドは、新しいコンテナを作成して実行する。
既に作成されたコンテナを再度実行したい場合は、コンテナidによる実行方法に従う必要がある。
2つのコマンドが必要です。
まず、停止したコンテナのIDを取得するために、以下のコマンドを入力する。
docker container ls --all
見つかったコンテナIDの部分をコピーし、以下のコマンドで実行する。
docker container start [container-id].
5. コンテナ sh の実行方法 [#5].
Dockerコンテナ内でシェル(sh)スクリプトを実行するには、docker container exec
コマンドを使用する。
これにより、実行中のコンテナ内で新しいプロセスを開始できる。
以下はDockerコンテナ内でシェルを実行するコマンドである。
docker container exec -it [container_id] /bin/sh
ここで[container_id]
は実行中のDockerコンテナのIDである。
it
オプションはコンテナとの対話型ターミナルセッションを開始し、/bin/sh
は実行するコマンドである。
コンテナが /bin/sh
をサポートしておらず、/bin/bash
しかサポートしていない場合は、次のように入力する。
docker container exec -it [container_id] /bin/bash
これでコンテナ内でシェルセッションが開始され、直接コマンドを入力してファイル操作やプロセス実行などができるようになる。
6. 最終的な考察
この投稿では、Dockerコンテナを実行する方法、障害のトラブルシューティング方法、コンテナを自動的に実行または実行し続ける方法、コンテナIDで実行する方法、コンテナ内でshを含むシェルを実行する方法について学んだ。 Dockerで新しいコンテナを作成して実行する際に、この記事がお役に立てば幸いです。
