docker run の使い方
コンテナを作って動かす
書き方
docker run [オプション] イメージ [コマンド] -d(裏で)--name 名前 -p ホスト:コンテナ -e KEY=値 -v 場所:パス -it(入って操作)--rm(終わったら消す)--network ネット --restart 方針
イメージが手元になければ pull してから、新しいコンテナを作って起動します。イメージの後ろにコマンドを書くと CMD の代わりに実行します。
よく使うオプション
| オプション | 意味 |
|---|---|
-d | 裏で動かす(すぐにプロンプトに戻る) |
--name 名前 | コンテナに名前をつける(付けないと自動の名前になる) |
-p ホスト:コンテナ | ホストのポートをコンテナのポートにつなぐ |
-e KEY=値 | 環境変数を渡す(--env-file ファイル でまとめて渡せる) |
-v 名前やパス:パス | ボリュームやホストのディレクトリをつなぐ |
-it | キーボードをつないで端末として操作する(シェルに入るとき) |
--rm | 終わったらコンテナを自動で消す |
--restart 方針 | no・on-failure・always・unless-stopped から、止まったときの再起動の方針を選ぶ |
--network 名前 | つなぐネットワークを指定する |
-m 256m / --cpus 0.5 | メモリと CPU の上限を決める |
例
$ docker run -d --name web -p 8080:80 nginx3f2a9c1d8e7b4a6f0c5d2e1b9a8f7c6d5e4b3a2f1c0d9e8b7a6f5c4d3e2b1a0fnginx のコンテナを web という名前で裏で動かし、ホストの 8080 番をコンテナの 80 番につなぎます。ブラウザで http://サーバー:8080 を開くと nginx のページが出ます。
$ docker run --rm alpine echo hellohelloalpine のコンテナで echo を 1 回だけ動かし、終わったらコンテナを消します。試しに動かすときに便利です。
$ docker run -it --rm ubuntu bash
ubuntu のコンテナの中のシェルに入ります。exit で抜けるとコンテナは止まり、--rm があるので消えます。
$ docker run -d --name queue --restart on-failure:3 redis:7
redis を動かし、エラーで落ちたときだけ 3 回まで起動し直すようにします。ずっと動かしておくサービスには unless-stopped を使います。
$ docker run -d --name db -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data postgres:17
環境変数でパスワードを渡し、データをボリューム pgdata に置いて PostgreSQL を動かします。コンテナを消してもデータは残ります。
よくある間違い・注意
- オプションはイメージ名より前に書きます。docker run nginx -d のように後ろに書くと、コンテナの中で動かすコマンドの引数になります。
- 同じ名前のコンテナがあると「Conflict. The container name is already in use」になります。docker rm で消すか、別の名前にします。
- -p 80:8080 は「ホストの 80 番 → コンテナの 8080 番」です。左がホスト、右がコンテナです。
実際に打って練習する
Docker コースの Lv6「はじめての船出 docker run」で覚えます(第1章 はじめてのコンテナ)。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜7 はログインすると無料で試せます(それより先はゴールド以上のプランで遊べます)。