Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【さわって学ぶクラウドインフラ docker 基礎からのコンテナ構築】第3章 5分でWebサーバーを起動するで知らなかったことをざっくりまとめてみた

目次

概要

今回はApacheがインストールされたコンテナを実行して、Webサーバーを動かすまでの操作をやります。

(注) EC2インスタンス自体にApacheをインストールしても、WebサーバーとしてEC2インスタンスを機能させることができます。コンテナを使うことで、EC2インスタンスに直接Apacheをインストールしなくても良くなります。

dockerコマンドの書式

dockerコマンドは、次のような書式を取ります。

docker コマンド 操作対象 オプション

Docker操作の大まかな流れ

今回は、下記の流れでDockerを操作します。

  1. イメージを探す
    Docker Hubから、目的のコンテナの元となるイメージを探します。

  2. コンテナを作成する
    dockerコマンドでイメージからコンテナを作成します。これでWebサーバーが起動します。

  3. コンテンツを作る
    Webサーバーで見せたいコンテンツとしてindex.htmlを作成します。

  4. コンテナの停止と再開
    コンテナはいつでも停止することができ、また再開できます。停止中はWebサーバーとして機能しないことを確認し、再開すれば、また動き出すことを確認します。

  5. ログの確認
    コンテナを運用する上では、ログを確認する必要があります。起動したWebサーバーのログを確認してみます。

  6. コンテナを破棄する
    使用しないコンテナは破棄します。

  7. イメージを破棄する
    ディスクを消費するので、最後にダウンロードしたイメージを削除しておきます。

作業手順

手順1:
Docker HubのサイトでApacheを検索して、httpdというDockerイメージが存在するかを確認します。 Image from Gyazo

手順2:
以下のコマンドを実行して、DockerイメージをDocker Hubからプルしてきて、Dockerコンテナを起動します。nameの部分には命名したいコンテナ名を指定します。

docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

↓ コマンドを実行した時のログ

ubuntu@ip-10-0-12-65:~$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
Unable to find image 'httpd:2.4' locally
2.4: Pulling from library/httpd
e9995326b091: Pull complete 
ee55ccd48c8f: Pull complete 
bc66ebea7efe: Pull complete 
5d0f831d3c0b: Pull complete 
e559e5380898: Pull complete 
Digest: sha256:5fa96551b61359de5dfb7fd8c9e97e4153232eb520a8e883e2f47fc80dbfc33e
Status: Downloaded newer image for httpd:2.4
141390abadd3e74a4f379557236891b159bc42551b71946debcef02320b4c758
ubuntu@ip-10-0-12-65:~$ 

手順3:
「docker ps」と入力すると、稼働中のコンテナの一覧が表示されます。「STATUS」の部分が「Up」と表示されていれば、コンテナが起動しています。

ubuntu@ip-10-0-12-65:~$ docker ps
CONTAINER ID   IMAGE       COMMAND              CREATED         STATUS         PORTS                                   NAMES
141390abadd3   httpd:2.4   "httpd-foreground"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   my-apache-app

手順4:
EC2インスタンスIPアドレスでEC2インスタンスにアクセスすると、ApacheのWebページが表示されます。

手順5:
コンテナを停止するためには、「docker stop」コマンドを使用します。 stopコマンドにはコンテナ名 or コンテナIDを指定します。

docker stop コンテナ名 or コンテナID

docker psは稼働中のコンテナしか表示しないので、稼働中ではないものを含むすべてのコンテナを表示したい場合は-aオプションを指定します。 STATUSが「Exited」になっていれば、終了していることが分かります。

ubuntu@ip-10-0-12-65:~$ docker ps -a
CONTAINER ID   IMAGE       COMMAND              CREATED          STATUS                      PORTS     NAMES
141390abadd3   httpd:2.4   "httpd-foreground"   16 minutes ago   Exited (0) 19 seconds ago             my-apache-app

(注) docker stopコマンドはコンテナを停止させるだけであって、コンテナは残り続けるので、注意が必要です。

手順6:
コンテナを再開させるためには、docker startコマンドを使用します。

docker start コンテナ名 or コンテナID

手順7:
実行中のコンテナのログを確認したい場合、docker logsコマンドを使用します。

docker logs コンテナ名 or コンテナID

手順8:
docker stopしてもコンテナは停止するだけで残り続けます。そのため、ディスクを圧迫します。コンテナを使わないのであれば、コンテナを停止するのではなく、docker rmコマンドでコンテナを削除します。コンテナを削除するためには、docker stopコマンドでコンテナを一旦停止させる必要があります。

手順9:
実際にどのようなイメージをダウンロードしたのかは、docker image lsコマンドで確認できます。

ubuntu@ip-10-0-12-65:~$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
httpd        2.4       fe8735c23ec5   2 weeks ago   145MB

コンテナを破棄しても、ダウンロードしたイメージは残ったままです。これは同じDockerイメージからコンテナを作るときに再ダウンロードしないようにするためです。Dockerイメージはディスクを消費するので、使わない場合は削除しましょう。 docker image rmコマンドでDockerイメージを削除します。 削除したいイメージ名を指定します。イメージ名は「REPOSITORY:TAG」の書式で指定します。

docker image rm REPOSITORY:TAG

参考記事

さわって学ぶクラウドインフラ docker基礎からのコンテナ構築 | 大澤 文孝, 浅居 尚 |本 | 通販 | Amazon

Docker Hub