このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】Dockerの処理の流れ(ライフサイクル)

ここでは、Dockerの処理の流れであるライフサイクルについて詳しく解説していきます。

コンテナのライフサイクルは下図の流れとなります。

コンテナのライフサイクルは、次のように遷移します。

①イメージのダウンロード(pull)
   ↓
②コンテナの作成
   ↓
③コンテナの実行
   ↓
④コンテナの停止
   ↓
⑤コンテナの削除

各ステップを1つずつ順に詳しく解説していきます。

①イメージのダウンロード(pull)

まず、必要なDockerイメージをダウンロード(pull)します。

ライフサイクルでは、下図の①に該当します。

「docker pull nginx」コマンドを実行して、nginxのイメージをpull します。

既にnginxのイメージを取得している場合は、この操作は必要ありません。

PS C:\Users\joeac> docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:c26ae7472d624ba1fafd296e73cecc4f93f853088e6a9c13c0d52f6ca5865107
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview nginx

 これまでの操作で、既にnginxのイメージはpull しているため、あっという間にコマンドの処理は終わります。

pull したイメージの確認

pull したイメージを確認します。

 ホストマシン上にあるDockerイメージの一覧を確認するには「docker image ls」コマンドを実行します。

PS C:\Users\joeac> docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    e4720093a3c1   3 weeks ago   187MB

項目の内容は下表のとおりです。

項目説明
REPOSITORY(レポジトリ)イメージの名前
TAGそのイメージの種類を識別するための文字列です。一般的にはバージョンを表すことが多い。
IMAGE IDイメージID、イメージを識別するための文字列です。
CREATED作成された日時、上の例では3週間前に作成された。
SIZEイメージの容量
「docker image ls」の項目

②コンテナの作成と③コンテナの実行

「docker container run」コマンドを使って、コンテナの作成と実行を行います。

「-d」オプションを指定してデタッチモードで、コンテナを実行します。

以下のコマンドを実行します。

docker container run --name webserver3 -d -p 8080:80 nginx

コマンドの意味は以下のとおりです。

docker container run--name webserver3-d -p 8080:80nginx
コマンド本体コンテナの名前:webserver3
(オプション)
-d:デタッチモード、-p:ポート番号
(オプション)
イメージ名:nginx
(パラメータ)
コマンドの意味

 「--name」オプションでコンテナの名前を、「-d」オプションでデタッチモードの指定、「-p」オプションでホストとコンテナのポート番号の関連付けを定義しています。また、パラメータを「nginx」としてイメージ名を指定しています。

「-d」オプション:デタッチモード

「-d」オプションは、デタッチモードでコンテナを起動をさせたい時につけるオプションです。このモードは、バックグラウンドでコンテナを起動させることができます。

 このオプションを指定することで、PowerShellで引き続き、他のコマンドを実行したり、サービスを同時に実行させることができるようになります。Web サーバーなどのようなサービスで利用します。

「-p」オプション:ポート番号の関連付け

「-p」オプションは、ポート番号を指定するためのものです。

ホストのポート番号とコンテナのポート番号を関連付けます。

「 8080:80 」の指定の意味ですが、

「 8080:80 」・・・ホストが 8080 番、コンテナが 80 番

となります。

docker container run --name webserver3 -d -p 8080:80 nginx」コマンドを実行します。

PS C:\Users\joeac> docker container run --name webserver3 -d -p 8080:80 nginx
736ea5bbbe21140fe33e4226d1fde717f3f76a3b2d513356525689bab95c7818
PS C:\Users\joeac>

動作確認

Webブラウザを起動します。

URLに「http://localhost:8080/」と入力します。

下図の画面が表示されたら成功です。

④コンテナの停止

webserver3コンテナを停止させます。

「docker stop」コマンド

実行中のコンテナを停止させるには、「docker stop」コマンドを使用します。

「docker stop webserver3」コマンドを実行します。

PS C:\Users\joeac> docker stop webserver3
webserver3

Webブラウザをリーロードします。

 コンテナが停止しているため、Webserver3に接続できず、下図のように「Welcome to nginx!」と表示されなくなります。

③コンテナの実行

再び、webserver3コンテナを実行します。

「docker start」コマンド

停止中のコンテナを実行させるには、「docker start」コマンドを使用します。

「docker start webserver3」コマンドを実行します。

PS C:\Users\joeac> docker start webserver3
webserver3

Webブラウザでリロードします。

webserver3に接続できるようになったため、下図のように再び「Welcome to nginx!」が表示されます。

⑤コンテナの削除

作成したwebserver3コンテナを削除します。

「docker container ls -a」コマンドでコンテナの一覧を確認します。

PS C:\Users\joeac> docker container ls -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                      PORTS                  NAMES
736ea5bbbe21   nginx     "/docker-entrypoint.…"   35 minutes ago   Up 14 minutes               0.0.0.0:8080->80/tcp   webserver3
facb8262f20f   nginx     "/docker-entrypoint.…"   7 hours ago      Exited (0) 41 minutes ago                          webserver2
18cbe71fe4a8   nginx     "/docker-entrypoint.…"   7 hours ago      Exited (0) 7 hours ago                             webserver1

コンテナを削除する前にコンテナを停止させる。

コンテナを削除するには、その削除するコンテナを停止しておく必要があります。

「docker stop webserver3」コマンドを実行します。

PS C:\Users\joeac> docker stop webserver3
webserver3

「docker container rm(コンテナ名)」コマンド

コンテナを削除するには「docker container rm (コンテナ名)」コマンドを実行します。

「 docker container rm webserver3」を実行します。

PS C:\Users\joeac> docker container rm  5aee81e0ad0c
5aee81e0ad0c

「 docker container rm -f(コンテナ名)」コマンド

今回は、すんなりとコンテナを削除することができましたが、削除できない場合もあります。

その場合は、強制削除を行います。

強制削除を行うには、「-f」オプションを指定します。

 「docker container rm -f(コンテナ名)」コマンド、もしくは「docker container rm -f(コンテナ名)」コマンドで強制削除します。

これで、nginxイメージを使ったコンテナのライフサイクルの確認は終わりです。

 コンテナのライフサイクルの各ステップには対応したコマンドがあり、dockerコマンドで状態を遷移させることができます。