(最終更新日:2023年8月)
✔当記事は以下のような方に向けて書かれています
「docker runコマンドの機能がどういったものか確認したい」
「docker runコマンドの正しい書き方を学びたい」
「docker runコマンドの具体的な使用例を見て理解を深めたい」
✔当記事で伝えたいこと
- docker runコマンドのコアな部分
- docker runコマンドのどのように書くか、そしてそれがどのように応用されるか
- docker runコマンドの実践的な例
当記事では、docker runコマンドの基礎的な部分からオプションによる進んだ使い方まで、具体的な例を交えて丁寧に説明しています。
最後までご覧いただくことで、このコマンドの全貌が把握できます。
ぜひ最後までご覧ください。
DockerのRunとは?
こちらでは、「Docker Run」コマンドについて詳しく説明します。
「Docker Run」の概念を理解することで、Dockerのエコシステムを効果的に操作する能力が高まるでしょう。
- Docker Runの役割と目的
- Dockerのコンテナイメージとその重要性
Docker Runの役割と目的
Docker Runは、Dockerコンテナを作成し、実行するためのDockerコマンドです。
このコマンドはDockerイメージを基に、アプリケーションを実行する独立した環境(コンテナ)を提供します。
コンテナ技術を通じて、アプリケーションの開発やデプロイ、テストが効率的になります。
docker run hello-world
hello-worldというDockerの公式で準備されたイメージで、コンテナを起動する例です。
Dockerのコンテナイメージとその重要性
Dockerのコンテナイメージは、アプリケーションを実行するために必要な全ての要素をパッケージ化したものです。
- コード
- ランタイム
- ライブラリ
- 環境変数 など
コンテナ技術により、異なる環境でも同じようにアプリケーションを動作させられるのです。
この性質はDockerが提供する「Build, Ship, and Run Any App, Anywhere」の哲学を実現しています。
Docker Runの基本的な使い方
次に、Docker Runの基本的な使い方をご覧いただきます。
以下のステップでDockerイメージの取得からコンテナの実行、終了までの一連の操作を見ていきましょう。
- Dockerイメージの確認方法
- Dockerイメージの取得方法
- Dockerコンテナの生成と実行
- Dockerコンテナの終了方法
Dockerイメージの確認方法
Dockerイメージの確認は、docker images
コマンドでおこないます。
docker runで、コンテナを起動するためには、イメージが必要です。
このコマンドを実行すると、ローカルに保存されているDockerイメージの一覧が表示されます。
$ docker images
DockerHubなどに公開されているイメージであれば、PCにイメージが存在しない場合でも、docker runコマンドで自動取得してくれます。
Dockerイメージの取得方法
Dockerイメージはdocker pull
コマンドで取得しましょう。
$ docker pull ubuntu
下のコマンドは、Docker HubからUbuntuイメージを取得します。
Dockerコンテナの生成と実行
docker run
コマンドを用いて、Dockerイメージからコンテナを生成し、実行します。
以下のコマンドは、Ubuntuイメージを基に新しいコンテナを作成し、その中で/bin/bash
(ターミナル)を実行します。
$ docker run -it ubuntu /bin/bash
Dockerコンテナの終了方法
実行中のコンテナは、/bin/bash画面で、exit
コマンドを入力するか、Ctrl+D
を押すことで終了します。
もしくは以下のコマンドで終了させましょう。
docker stop <container-id>
以下の記事では複数のコンテナを一括で停止する方法なども説明しています。
Docker Runを詳しく見ていく
Docker Runの具体的な使い方を理解したところで、Dockerとその背後にある技術についてより深く理解しましょう。
Dockerと仮想化技術の違いや、コンテナ技術のメリットについて考察します。
- Dockerと仮想化技術の違い
- コンテナ技術とそのメリット
Dockerと仮想化技術の違い
従来の仮想化技術では、仮想マシン(VM)ごとにオペレーティングシステムを持つ必要がありました。
これに対し、Dockerは「コンテナ」という軽量な隔離環境を使用します。
コンテナは、ホストOSのリソースを共有しながら、各コンテナが独立して動作するように見せる技術です。
これにより、DockerはVMよりも軽量で高速に動作します。
コンテナ技術とそのメリット
コンテナ技術のメリットはその軽量性と移植性です。
アプリケーションとその依存関係をひとつのコンテナにパッケージ化することで、環境に依存せずにアプリケーションを動かせます。
またイメージのビルドからデプロイ、実行までの一連の流れを自動化することも容易です。
イメージを作るには、Dockerfileが必要です。以下の記事を参考に自身のイメージを作ってみてください。
Docker Runで活用できるオプション一覧
次に、docker run
コマンドで活用できるオプションについて解説します。
これらのオプションを活用することで、コンテナの動作を細かく制御できるでしょう。
- コンテナの名前や仮想端末の指定
- コンテナのストレージ・オプションや作業ディレクトリの設定
- ポート公開と露出、環境変数の設定
- ネットワーク接続、ボリュームマウント、デバイス追加
- メモリ制限やセキュリティの設定
- オプションまとめ一覧
コンテナの名前や仮想端末の指定
docker run
の--name
オプションでコンテナに名前をつけられます。
$ docker run --name my_container -it ubuntu /bin/bash
また、-i
と-t
オプションを組み合わせて(-it
)、コンテナの標準入力を開いたままにし、対話型シェルとして使えます。
コンテナのストレージ・オプションや作業ディレクトリの設定
$ docker run -w /path/to/workdir -v /host/dir:/container/dir ubuntu
このコマンドは、作業ディレクトリを/path/to/workdir
に設定し、ホストの/host/dir
をコンテナの/container/dir
にマウントする新しいUbuntuコンテナを生成して実行します。
ポート公開と露出、環境変数の設定
-p
または--publish
オプションでホストとコンテナのポートをマッピングできます。
また、-e
または--env
オプションでコンテナ内の環境変数を設定することが可能です。
以下のコマンドは、ホストの8080ポートとコンテナの80ポートをマッピングし、環境変数ENV_VAR
を設定します。
$ docker run -p 8080:80 -e ENV_VAR=value ubuntu
ネットワーク接続、ボリュームマウント、デバイス追加
Dockerコンテナはネットワークに接続することができ、--network
オプションを使用すると特定のネットワークに接続可能です。
また、-v
または--volume
オプションでホストとコンテナ間でデータボリュームを共有したり、--device
オプションでホストのデバイスをコンテナに追加したりもできます。
$ docker run --network=network_name -v /host/volume:/container/volume --device=/dev/device ubuntu
メモリ制限やセキュリティの設定
docker run
コマンドには、リソース制限やセキュリティ設定など、より高度なオプションも多数存在します。
例えば、-m
または--memory
オプションでコンテナのメモリ使用量を制限したり、--cap-add
や--cap-drop
オプションでLinuxケーパビリティを追加・削除したりが可能です。
$ docker run -m 512m --cap-drop ALL --cap-add NET_BIND_SERVICE ubuntu
このコマンドは、メモリ使用量を512MBに制限し、全てのLinuxケーパビリティを削除した後、NET_BIND_SERVICEケーパビリティだけを追加する新しいUbuntuコンテナを生成して実行します。
オプションまとめ一覧
docker run
コマンドには、上記のような基本的なものから高度なものまで、多くのオプションが用意されています。
以下は、上記も含めたdocker run
コマンドの一部のオプションの一覧表です。
オプション | 説明 | 例 |
---|---|---|
--name | コンテナに名前を付けます。 | docker run --name my_container ubuntu |
-it | 対話モードでコンテナを実行し、端末を割り当てます。 | docker run -it ubuntu /bin/bash |
-w | コンテナ内の作業ディレクトリを設定します。 | docker run -w /path/to/workdir ubuntu |
-v | ホストとコンテナ間でボリュームをマウントします。 | docker run -v /host/dir:/container/dir ubuntu |
-p | ホストとコンテナ間でポートを転送します。 | docker run -p 8080:80 ubuntu |
-e | 環境変数を設定します。 | docker run -e ENV_VAR=value ubuntu |
--network | コンテナを特定のネットワークに接続します。 | docker run --network=network_name ubuntu |
--device | ホストシステムのデバイスをコンテナに追加します。 | docker run --device=/dev/device ubuntu |
-m | コンテナのメモリ制限を設定します。 | docker run -m 512m ubuntu |
--cap-drop | コンテナから特定のLinuxケーパビリティを削除します。 | docker run --cap-drop ALL ubuntu |
--cap-add | コンテナに特定のLinuxケーパビリティを追加します。 | docker run --cap-add NET_BIND_SERVICE ubuntu |
-d | コンテナをバックグラウンドで実行します(デタッチモード)。 | docker run -d ubuntu |
--rm | コンテナが停止したら自動的に削除します。 | docker run --rm ubuntu |
--restart | コンテナの再起動ポリシーを設定します(例:always 、on-failure など)。 | docker run --restart=always ubuntu |
これらのオプションを組み合わせることで、コンテナの実行を高度にカスタマイズが可能です。
各オプションの詳細な説明と使用方法は、公式のDockerドキュメントで確認できます。
Docker Runの使用例と具体的な操作方法
Docker Runをより具体的に理解するために、具体的な使用例とその操作方法を見ていきましょう。
コマンドやオプションの理解を深め、実際の作業環境でのトラブルシューティングに役立ちます。
- コンテナの作成から起動までのプロセス
- オプションを使った具体的な使用例
- 一般的な問題とその解決策
コンテナの作成から起動までのプロセス
コンテナの作成から起動までの一連の流れを体験しましょう。
まずは、docker runコマンドでhello-worldイメージを実行してみてください。
$ docker run hello-world
このコマンドを実行すると、Dockerは次の順序で操作を行います。
- ローカルでhello-worldイメージを探す
- イメージがなければ、設定されたリモートレジストリ(デフォルトではDocker Hub)からイメージをダウンロードする
- イメージから新しいコンテナを生成する
- コンテナを起動し、hello-worldプログラムを実行する
オプションを使った具体的な使用例
次に、いくつかのオプションを組み合わせてコンテナを起動する例を見てみましょう。
以下のコマンドでは、Nginxサーバを起動し、ホストの8080ポートとコンテナの80ポートをマッピングします。
$ docker run -d -p 8080:80 --name my-nginx nginx
ポートのマッピングでは、以下のように指定します。
-p <PCでブラウザに打ち込むポート番号>: <コンテナで実際に使われているポート番号>
このコマンドを実行すると、以下の操作が行われます。
- NginxイメージをローカルまたはDocker Hubから取得します
- イメージから新しいコンテナを生成します
- コンテナをバックグラウンドモード(
-d
)で起動し、Nginxサーバを実行します - コンテナの名前を
my-nginx
(--name
)に設定します - ホストの8080ポートとコンテナの80ポートをマッピング(
-p
)します
一般的な問題とその解決策
Docker Runの使用中にはさまざまな問題が生じる可能性がありますが、以下にいくつかの一般的な問題とその解決策を示します。
- イメージが見つからない
ローカルまたはリモートのDockerレジストリに指定したイメージが存在しない場合、この問題が発生します。
イメージ名とタグが正しいことを確認し、必要であればdocker pull
コマンドを使用して明示的にイメージをダウンロードしてみてください。 - ポート競合
同じホストポートを複数のコンテナで使用しようとすると、ポート競合が発生します。
競合するコンテナを停止するか、異なるホストポートを使用してください。 - コンテナがすぐに終了する
コンテナが起動後すぐに終了する場合、多くの場合、コンテナ内のプログラムが何らかのエラーで終了しています。docker logs
コマンドを使用してコンテナのログを確認し、問題の原因を特定してください。
Docker操作の次のステップ
DockerはRunコマンドだけでなく、ほかにも多くの機能を持っています。
以下に、Docker操作の次のステップとして学べる内容をいくつか紹介します。
- Docker Run以外のDockerのコマンド
- Dockerのさらなる活用方法
Docker Run以外のDockerのコマンド
Dockerには、以下のような多くの他のコマンドが存在します。
- イメージのビルド(
docker build
) - イメージのプッシュとプル(
docker push
/docker pull
) - コンテナのログの表示(
docker logs
) - コンテナの一覧表示(
docker ps
)
これらのコマンドを学ぶことで、Dockerをより深く理解し、より効率的に利用できます。
Dockerのさらなる活用方法
Dockerは単体で使用するだけでなく、Kubernetesなどのコンテナオーケストレーションツールと組み合わせることで、さらにパワフルなソリューションを提供します。
また、Docker ComposeやDocker SwarmといったDocker自体の機能を使って、マルチコンテナアプリケーションのデプロイメントを管理することも可能です。
これらのツールとテクニックを学ぶことで、Dockerをさらに活用できるでしょう。
まとめ
当記事では、「Docker Run」について詳しく説明しました。
- Docker Runの役割と目的
- 基本的な使い方と詳細な説明
- 活用できるオプション一覧
- 具体的な使用例と操作方法
- Docker操作の次のステップ
Docker Runは、Dockerエコシステムの中心的なコマンドのひとつであり、コンテナの作成から起動までを一括しておこなえます。
これはDockerの柔軟性と効率性に大いに貢献しています。
当記事が、Docker Runの理解と活用の助けとなることを願っています。