「コンテナ」を活用してアプリを開発・運用できる「Docker」の「概念・仕組み」を学ぼう!
「サーバー」などのソフトウェアを「コンテナ」として稼働させることができる「Docker」ですが、「コンテナ」が何なのかや、どのように「コンテナ」を操作するのかについて見ていきたいと思います。
「WEBアプリケーション開発」では、「Docker」を利用した開発も増えてきているため、今後「WEBアプリケーション開発」に取り組みたいという方は「身に付けておきたいスキル」の1つでもあります。
「コンテナ」の概念
コンテナは、「Linux」などの「OS」で起動させることができます。
「Windows」でも「Docker」を利用することができますが、「Windows」の「コンテナ実行環境」は複数あり、「Windows独自実装」の「コンテナ」などもあるため、複雑になっています。
上図のように、「1つのOS」の中で複数の「コンテナ」を起動させることができ、内部ネットワークを通してそれぞれの「コンテナ」は通信できるようになっています。
「WEBアプリケーション開発」を例に考えると、
- WEBサーバー
- AP(アプリケーション)サーバー
- DB(データベース)サーバー
などを、コンテナ内で起動させることが多いのではないでしょうか。
「コンテナ」を起動するために必要な「イメージ」とは?
「コンテナ」は「イメージ」と呼ばれるファイルから作成されます。
そのため、「コンテナ」を利用するためには「イメージ」を先に作る必要がありますが、「Docker Hub」で「イメージ」が公開されているため、これらの「イメージ」を利用することや、「イメージ」の内容をアレンジして「コンテナ」を起動することもできます。
一つの「イメージ」から「複数のコンテナ」を起動することもできます。
「WEBサーバー」を例にすると、下図のようになります。
「コンテナ」の操作
「コンテナ」を作成するためには、まず「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オプション」を追加すると、「コンテナ」を停止した際に「コンテナ」が削除されます。
コンテナの削除
コンテナを削除するには、
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」コマンドを実行します。