Chapter 05

2部: コンテナの基礎操作

ほげさん
ほげさん
2022.03.21に更新

コンテナを操作するコマンドをいくつか使い、コンテナを起動したり停止したりできるようになりましょう。

コマンド一覧を暗記しても理解度向上の実感には繋がりづらいと 【 2部: Docker を理解するためのポイント 】 で言いましたが、それでも最低限の基本操作は覚えておく必要があります。

2部のここから先では、特定の用途によって使い分けたりしない Docker 操作の基礎を学びます。

このページで初登場するコマンドとオプション

コンテナを起動する - container run

新コマンド
$ docker container run [option] <image> [command]
旧コマンド
$ docker run [option] <image> [command]

コンテナ一覧を確認する - container ls

新コマンド
$ docker container ls [option]
旧コマンド
$ docker ps [option]
オプション 意味 用途
-a
--all
全てのコンテナを表示する 起動中以外のコンテナを確認する

コンテナを停止する - container stop

新コマンド
$ docker container stop [option] <container>
旧コマンド
$ docker container stop [option] <container>

コンテナを削除する - container run

新コマンド
$ docker container rm [option] <container>
旧コマンド
$ docker rm [option] <container>
オプション 意味 用途
-f
--force
実行中のコンテナを強制削除する 停止と削除をまとめて行う

コンテナを起動する

Nginx という Web サーバを、container run コマンドを使ってコンテナとして起動してみます。

新コマンド
$ docker container run [option] <image> [command]

まずはじめに最低限のオプションでコンテナを起動します。

ただ起動だけをしたいので <image>nginx を指定するのみにしたいところですが、動作確認が全くできないのは面白みにかけるので --publish オプションのみ付けることにします。
--publish オプションによりブラウザから動作確認ができるようになりますが、これの説明は【 3部: ポート 】で行います。

以上を踏まえ、次のコマンドでコンテナを起動します。

Host Machine
$ docker container run \
    --publish 8080:80  \
    nginx:1.21

2022/02/13 23:12:57 [notice] 1#1: start worker processes

start worker processes の出力とともにターミナルが操作できなくなれば、起動成功です。

ブラウザで http://localhost:8080 にアクセスしてみましょう。

次のような画面になれば、起動したコンテナの Web サーバにアクセスできています。

image

コンテナそのものは仮想サーバではありませんが、起動したコンテナ ( 隔離領域 ) の中で Nginx という Web サーバ ( nginx ) が起動しています。

イメージ から コンテナ を起動したので、今の状況は次のような図で示せます。

image

起動中のコンテナ一覧を確認する

コンテナ一覧の確認をするには container ls コマンドを使います。

新コマンド
$ docker container ls [option]

container run を実行したターミナルのタブをそのままにして、別のタブを新たに開きコンテナ一覧を確認してみます。

オプションは特に指定しなくてよいので、次のコマンドでコンテナ一覧を確認します。

Host Machine
$ docker container ls

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
7fbae1e2219d   nginx:1.21     "/docker-entrypoint.…"   6 minutes ago   Up 6 minutes   0.0.0.0:8080->80/tcp   amazing_brahmagupta

IMAGEnginx:1.21 と表示されているコンテナが1つ起動していることが確認できます。

CONTAINER ID7fbae1e2219dNAMESamazing_brahmagupta となっていますが、これは起動するたびにランダムで割り振られます。

コンテナ一覧 を確認したら CONTAINER ID7fbae1e2219d だったので、今の状況は次のような図で示せます。

image

起動中のコンテナを停止する

nginx を使い終わりコンテナを停止したくなったら、container stop コマンドでコンテナを停止します。

新コマンド
$ docker container stop [option] <container>

container stop にはオプションはほとんどないため、対象の <container>CONTAINER IDNAMES で指定するだけで実行できます。

以上を踏まえ、次のコマンドでコンテナを停止します。
( CONTAINER ID は自分のターミナルで確認した値 )

Host Machine
$ docker container stop \
  7fbae1e2219d

正常にコンテナが停止できると、もう http://localhost:8080 にアクセスしてもなにも表示されません。

起動中のコンテナ一覧の確認をしても、Nginx コンテナは確認できなくなっています。

Host Machine
$ docker container ls

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

起動中のコンテナ停止を命令をした ので、今の状況は次のような図で示せます。

image

全てのコンテナ一覧を確認する

コンテナは、停止しても削除するまでは情報としてはホストマシンに残り続け、再起動することもできます。

起動していないコンテナも含めてコンテナ一覧を確認するには、container ls--all オプションをつけて実行します。

Host Machine
$ docker container ls \
    --all
    
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS     NAMES
7fbae1e2219d   nginx:1.21     "/docker-entrypoint.…"   18 seconds ago   Exited (0) 6 seconds ago             amazing_brahmagupta

--all オプションをつけない場合の確認範囲はこのように、
image

--all オプションをつけた場合の確認範囲はこのように図で示ます。
image

停止済コンテナを削除する

停止済コンテナを削除するには container rm を行います。

新コマンド
$ docker container rm [option] <container>

container stop と同様に container rm<container> を指定するコマンドなので、container ls で確認できる CONTAINER ID を使って実行します。
( CONTAINER ID は自分のターミナルで確認した値 )

Host Machine
$ docker container rm \
    7fbae1e2219d

これでコンテナは完全に削除されました。

Host Machine
$ docker container ls \
    --all

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

停止済のコンテナ削除を命令をした ので、今の状況は次のような図で示せます。

image

起動中のコンテナを停止せずいきなり削除する

container stopcontainer rm を次のコマンドでまとめて行うことができます。

Host Machine
$ docker container rm \
    --force           \
    <container>

続けてすぐ削除するつもりのコンテナを停止するときは、このコマンドで楽ができるでしょう。

起動中のコンテナ強制削除を命令をした 場合は、状況を次のような図で示せます。

image

停止するか削除するか

停止済のコンテナは再起動ができますが、僕はほとんど再起動をすることはありません。

なので僕は container stop は使わずに container rm --force か、【 2部: コンテナ起動時の基本の指定 】で解説する container run--rm オプションを使って、コンテナはすぐ削除しています。

コンテナは軽量で使い捨てがコンセプトなので「気軽に起動して用が済んだら削除する」「また使いたくなったら起動する」というスタンスがシンプルでよいと僕は思います。

まとめ

簡潔にまとめます。

  • コンテナを起動するには container run
  • コンテナ一覧を確認するなら container ls
  • 起動中のコンテナを停止するなら container stop
  • 停止済のコンテナを削除するなら container rm
  • 起動中のコンテナを削除するなら container rm --force

混乱してしまったときは立ち返ってみてください。