docker container run の使い方

Dockerコマンド

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コマンドのフォーマット
起動したい「イメージ名」を指定します。

docker container run [option] イメージ名 [引数]

例えば、nginxのコンテナを起動する場合は、次のようにコマンドを実行します。
“nginx”がイメージ名
“-d -p 8080:80″がオプション

ホストPCのターミナル : nginxコンテナの起動
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 コンテナ名

–name オプションの実行例

ホストPCのターミナル : “test01″というコンテナ名を設定
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 [ホストPCのPort] : [コンテナのPort]

–publish, -pオプションの実行例

例) nginxコンテナのポート80を、ホストマシンの8080として設定する。

ホストPCのターミナル 
docker container run –publish 8080:80 nginx

何故ポートの設定が必要なのか?

ホストマシンからコンテナへアクセスするためには「ポート」の設定が必要です。
例えば、nginx-はポート80番でWebサイトのアクセスを待ち構えています。

しかし、コンテナの中のnginxは、直接外とつながっていないため通信できません。
そこで、ホストマシンのポート8080とコンテナのポート80をつなぎます。
この設定が -p(–publish)オプションです。

–detach, -d オプション

コンテナの実行をバックグラウンドで行います。
nginxのような常駐するようなコンテナはフォアグラウンドで実行され、ターミナルは固まったままの状態となります。
以下は、nginxをフォアグラウンドで実行した場合。実行後にターミナルは固まった状態となる。

–detach, -dオプションの実行例

バッググラウンドで実行したい場合は”-d”オプションでコンテナを実行します。

ホストPCのターミナル : バックグラウンドでnginxを実行
docker container run -d nginx

以下は実際に-dオプションで実行した例です。
バッググラウンドで実行されていることがわかります。

–interactive, –tty, -itオプション

–interactiveオプションは、bashのような標準入力・対話操作を行う場合に使用します。
「–interactive(-i), –tty(-t)」をつなげて「-it」と指定することが一般的です。

-it オプションの実行例

例) ubuntuコンテナで、bash操作を行う場合

ホストPCのターミナル
docker container run -it ubuntu

コマンド実行後は、プロンプトが”#”に変わるので、bash操作が実行できるようになります。
bash操作を終了する場合は、”exit”で抜けます。

–volume, -v オプション

–volumeオプションは、ボリュームのマウントを行います。

マウント方法は「バインドマウント」「ボリュームマウント」の2種類あり、それぞれオプションの指定方法が異なります。
ボリュームのマウントの仕組みについては「第5回 ボリュームとマウントの使い方」を参照。

ボリュームマウント

Docker Engineで管理しているボリュームをコンテナにマウントします。

 

–volumeオプションのフォーマット

–volume [ボリューム名] : [マウント先]

–volume, -vオプション(ボリュームマウント)の実行例

例) volume001というボリュームを、MySQLコンテナの/var/lib/mysqlへマウントする。

ホストPCのターミナル
docker container run -v volume001:/var/lib/mysql mysql

バインドマウント

ホストマシンのDocker Engine管理外の場所をコンテナにマウントする仕組みです。
簡単に言うと、ホストマシンとDocker Engineでファイルやフォルダを共有しています。

–volumeオプションのフォーマット

–volume [HostPCのFile/Folder] : [マウント先]

–volume, -vオプション(バインドマウント)の実行例

例)「./nginx_dir」というフォルダを、nginxコンテナの/usr/share/nginx/htmlフォルダへマウントする。

ホストPCのターミナル
docker container run -v ./nginx_dir:/usr/share/nginx/html nginx

–network オプション

コンテナをDockerネットワークに接続します。

Dockerネットワークは、複数のコンテナ間で通信するためのネットワークです。
Dockerネットワークの仕組みは「入門 第6回 Dockerネットワークの基本」の解説を参照ください。

–networkオプションのフォーマット

–network [Dockerネットワーク]

ブリッジネットワークの設定例

例)MySQLコンテナに、ユーザー定義ブリッジネットワークの設定を行います。

例)MySQLコンテナ起動時に[wordpress-net]というDockerネットワークを指定する。

ホストPCのターミナル
Dockerネットワークの作成
docker network create wordpress-net
Dockerネットワークの設定
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

 

タイトルとURLをコピーしました