docker container runコマンドの概要
コンテナの作成と起動を行うコマンドです。
「docker run」と「docker container run」は同じ意味。
docker container runコマンドは、内部で3つのコマンドが実行されています。
① docker image pull [イメージの取得]
② docker container create [コンテナの作成]
③ docker container start [コンテナの起動]
起動するコンテナのイメージを持っていない場合は、Docker Hubからダウンロードします。
以下はUbuntuコンテナを起動した例です。DockerHubからダウンロードしている様子がわかります。
docker container runコマンド の使い方
docker container runコマンドのフォーマット
起動したい「イメージ名」を指定します。
例えば、nginxのコンテナを起動する場合は、次のようにコマンドを実行します。
“nginx”がイメージ名
“-d -p 8080:80″がオプション
docker container run -d -p 8080:80 nginx
docker container runコマンドのオプション
主要なオプションの一覧と使い方を解説します。
※オプション名の各セル2行目は省略形を表す
オプション名 | 説明、オプションの書式 |
–name | コンテナ名を指定する。 –name コンテナ名 |
–publish -p |
ポート番号を指定する。 –p ホストのポート番号:コンテナのポート番号 |
–volume -v |
ボリュームをマウントする。 -v ホストのディスク:コンテナのフォルダ |
–network | コンテナをネットワークに接続する。 –network=ネットワーク名 |
–detach -d |
バッググラウンドで実行する。 |
–interactive -i |
キーボード操作を行う。 -tと合わせて”-it”と指定することが一般的 |
–tty -t |
特殊キーを使用する |
–name オプション
起動するコンテナのコンテナ名を設定します。
–name オプションのフォーマット
–name オプションの実行例
docker container run -d –name test01 mysql
「docker ps」コマンドでコンテナ情報を確認すると”test01″となっています。
–nameオプションを指定しない場合は、ランダムなコンテナ名が設定されます。
コンテナ名は何のため使うの?
コンテナの操作はコンテナ名かコンテナIDを指定して操作をします。コンテナ名があらかじめ決まっていれば、そのコンテナ名を指定するだけです。
コンテナ名を設定していない場合、ランダムな名前が割り当てらるため、操作対象のコンテナ名を都度、調べる必要があり手間がかかってしまいます。
以下はコンテナ名を指定して、コンテナの停止と削除を行う例
# コンテナ名(test01)を指定して、コンテナを停止
docker container stop test01
# コンテナ名(test01)を指定して、コンテナを削除
docker container rm test01
ちなみに、renameコマンドでコンテナ名は後から変更することができます。
# コンテナ名を"test01" -> "test02" へ変更
docker container rename test01 test02
–publish, -p オプション
コンテナのポート番号を設定します。
–publish オプションのフォーマット
–publish, -pオプションの実行例
例) nginxコンテナのポート80を、ホストマシンの8080として設定する。
docker container run –publish 8080:80 nginx
何故ポートの設定が必要なのか?
ホストマシンからコンテナへアクセスするためには「ポート」の設定が必要です。
例えば、nginx-はポート80番でWebサイトのアクセスを待ち構えています。
しかし、コンテナの中のnginxは、直接外とつながっていないため通信できません。
そこで、ホストマシンのポート8080とコンテナのポート80をつなぎます。
この設定が -p(–publish)オプションです。
–detach, -d オプション
コンテナの実行をバックグラウンドで行います。
nginxのような常駐するようなコンテナはフォアグラウンドで実行され、ターミナルは固まったままの状態となります。
以下は、nginxをフォアグラウンドで実行した場合。実行後にターミナルは固まった状態となる。
–detach, -dオプションの実行例
バッググラウンドで実行したい場合は”-d”オプションでコンテナを実行します。
docker container run -d nginx
–interactive, –tty, -itオプション
–interactiveオプションは、bashのような標準入力・対話操作を行う場合に使用します。
「–interactive(-i), –tty(-t)」をつなげて「-it」と指定することが一般的です。
-it オプションの実行例
例) ubuntuコンテナで、bash操作を行う場合
docker container run -it ubuntu
コマンド実行後は、プロンプトが”#”に変わるので、bash操作が実行できるようになります。
bash操作を終了する場合は、”exit”で抜けます。
–volume, -v オプション
–volumeオプションは、ボリュームのマウントを行います。
マウント方法は「バインドマウント」「ボリュームマウント」の2種類あり、それぞれオプションの指定方法が異なります。
ボリュームのマウントの仕組みについては「第5回 ボリュームとマウントの使い方」を参照。
ボリュームマウント
Docker Engineで管理しているボリュームをコンテナにマウントします。
–volumeオプションのフォーマット
–volume, -vオプション(ボリュームマウント)の実行例
例) volume001というボリュームを、MySQLコンテナの/var/lib/mysqlへマウントする。
docker container run -v volume001:/var/lib/mysql mysql
バインドマウント
ホストマシンのDocker Engine管理外の場所をコンテナにマウントする仕組みです。
簡単に言うと、ホストマシンとDocker Engineでファイルやフォルダを共有しています。
–volumeオプションのフォーマット
–volume, -vオプション(バインドマウント)の実行例
例)「./nginx_dir」というフォルダを、nginxコンテナの/usr/share/nginx/htmlフォルダへマウントする。
docker container run -v ./nginx_dir:/usr/share/nginx/html nginx
–network オプション
コンテナをDockerネットワークに接続します。
Dockerネットワークは、複数のコンテナ間で通信するためのネットワークです。
Dockerネットワークの仕組みは「入門 第6回 Dockerネットワークの基本」の解説を参照ください。
–networkオプションのフォーマット
ブリッジネットワークの設定例
例)MySQLコンテナに、ユーザー定義ブリッジネットワークの設定を行います。
例)MySQLコンテナ起動時に[wordpress-net]というDockerネットワークを指定する。
Dockerネットワークの作成
docker network create wordpress-netDockerネットワークの設定
docker container run -dit ¥
–network wordpress-net ¥
-e MYSQL_ROOT_PASSWORD=1234 ¥
-e MYSQL_DATABASE=testdb ¥
-e MYSQL_USER=myuser ¥
-e MYSQL_PASSWORD=1234 ¥
mysql