プログラミングライフスタイル

「コンテナ」を活用してアプリを開発・運用できる「Docker」の「概念・仕組み」を学ぼう!

「サーバー」などのソフトウェアを「コンテナ」として稼働させることができる「Docker」ですが、「コンテナ」が何なのかや、どのように「コンテナ」を操作するのかについて見ていきたいと思います。

「WEBアプリケーション開発」では、「Docker」を利用した開発も増えてきているため、今後「WEBアプリケーション開発」に取り組みたいという方は「身に付けておきたいスキル」の1つでもあります。

「コンテナ」の概念

コンテナは、「Linux」などの「OS」で起動させることができます。

「Windows」でも「Docker」を利用することができますが、「Windows」の「コンテナ実行環境」は複数あり、「Windows独自実装」の「コンテナ」などもあるため、複雑になっています。

「Docker」と「コンテナ」の関係性

上図のように、「1つのOS」の中で複数の「コンテナ」を起動させることができ、内部ネットワークを通してそれぞれの「コンテナ」は通信できるようになっています。

「WEBアプリケーション開発」を例に考えると、

  • WEBサーバー
  • AP(アプリケーション)サーバー
  • DB(データベース)サーバー

などを、コンテナ内で起動させることが多いのではないでしょうか。

「Docker」と「コンテナ」の関係性2

「コンテナ」を起動するために必要な「イメージ」とは?

「コンテナ」は「イメージ」と呼ばれるファイルから作成されます。

そのため、「コンテナ」を利用するためには「イメージ」を先に作る必要がありますが、「Docker Hub」で「イメージ」が公開されているため、これらの「イメージ」を利用することや、「イメージ」の内容をアレンジして「コンテナ」を起動することもできます。

→「Docker Hub」

一つの「イメージ」から「複数のコンテナ」を起動することもできます。

「WEBサーバー」を例にすると、下図のようになります。

「Docker」と「コンテナ」の関係性3

「コンテナ」の操作

「コンテナ」を作成するためには、まず「Docker」を起動する必要があります。

「Docker」の起動方法はOSによって変わりますが、例えば「Linux OS」の「CENT OS」であれば、

sudo service docker start

のように起動することができます。

お使いのOSに応じて起動方法を調べながら「Docker」の起動を先に行っていきましょう。

コンテナの作成

次に「コンテナ」を作成するためのコマンドを実行します。

docker container run オプション イメージ名 コンテナで実行するコマンド

のように書いていきます。

「Docker」を起動しないとコンテナを利用できないため、もし「Docker」を起動していない状態で、「Dockerコマンド」を実行しようとすると

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

のようにエラーが発生します。

そのため、「Docker」を実行し、「コンテナ」を作成するイメージは、下図のようになります。

コンテナの起動

「コンテナ」を作成し起動すると、起動直後にすぐに「コンテナ」が停止してしまいます。

「コンテナ」を停止しないようにするためには、

docker container run -d イメージ名 コンテナで実行するコマンド

のように、「コンテナ」を起動する際に「dオプション」を追加します。

例えば、nginxのイメージをダウンロードしてコンテナを作成するには、

docker container run -d nginx

のように実行します。

コンテナの確認

「現在稼働しているコンテナ」の状況を確認するためには、

docker container ls

を実行します。

「現在停止しているコンテナ」も含めて状況を確認するためには、

docker container ls -a

のように「aオプション」を追加します。

コンテナの詳細を確認

コンテナの「詳細」を確認したい場合は、

docker container inspect コンテナ名orID

のように実行します。

コンテナの統計情報を確認

下記のコマンドを実行すると「コンテナの統計情報(CPU・メモリ・ネットI/O)」を確認することができます。

docker container stats

コンテナの停止

現在起動しているコンテナを停止するためには、

docker container stop コンテナ名orID

を実行します。

このコマンドでは、「停止後のコンテナ」はOS内に残ることになります。

そのため、どんどん「コンテナ」を作成していくと「コンテナ」はOS内に増え続けることになってしまいます。

コンテナ停止前
下矢印
コンテナ停止後

「コンテナ」を停止させた後に残らないようにするためには、

docker container run -d --rm イメージ名 コンテナで実行するコマンド

のように「rmオプション」を追加すると、「コンテナ」を停止した際に「コンテナ」が削除されます。

コンテナ停止前
下矢印
コンテナ停止後2

コンテナの削除

コンテナを削除するには、

docker container rm コンテナID

のように実行します。

現在起動していないコンテナを削除するには、

docker container prune

を実行します。

「削除確認」のメッセージをスキップしたい場合は「fオプション」を追加します。

docker container prune -f

コンテナに入る

「コンテナ」内のOSを操作したい場合には、「コンテナの中に入る」ことができます。

例えば、「コンテナのbash」を実行する場合は、

docker container exec -it コンテナID bash

のように、「コンテナID」の右に実行したいコマンドを書きます。

「iオプション」は、「STDIN」を開き続けるオプションで、「tオプション」は、疑似的なターミナルを割り当てるオプションです。

コンテナから出る場合は「exit」コマンドを実行します。

HOMEへ