今回は、Dockerfile を使ってWebサーバーのイメージを作成して、それからコンテナを起動してみる。
Dockerfile とは?
Docker イメージの構成情報を記述したテキストファイル。Dockerfile をビルドすることにより、イメージを作成することができる。
手作業でコンテナを修正(パッケージをインストールする等)してからイメージ化するのに比べて、イメージの構成内容が把握できる、テキストなのでGitなどでバージョン管理できる、手作業によるイメージ作成時のミスが減る、などのメリットがある。
準備
まず、前回と同じように、EC2のインスタンスを立ち上げて Docker をインストールする。
次に作業用のディレクトリを作成(どこに作ってもよい)。
$ mkdir ~/workdir
Webサーバーで使うHTMLファイルや画像を作業ディレクトリ以下に配置。今回は、site というサブディレクトリを作って、次のようにファイルを置いた。
~/workdir/site/
├─ index.html
└─ img
├─ apple.jpg
├─ kitten.jpg
└─ sakura.jpg
Dockerfile の作成
作業ディレクトリ(~/workdir)に Dockerfile を作成。
$ vi ~/workdir/Dockerfile
Dockerfile の中身は以下のようなもの。httpd をインストールして、ファイルをコピーしてるだけ。
FROM centos:6.6
MAINTAINER arturias <arturias@example.com>
RUN yum install httpd -y
ADD site /var/www/html
ENTRYPOINT /usr/sbin/apachectl -DFOREGROUND
Dockerfile 中の命令の簡単な説明。
- FROM : ベースとなるイメージの指定
- RUN : イメージ作成中に実行したいコマンド
- Add : イメージに追加するファイルやディレクトリ
- ENTRYPOINT : docker run でコンテナを起動した際に、コンテナ内で実行されるコマンド。
(補足) 上記の ADD コマンドでは、EC2インスタンス側の site ディレクトリの中身がイメージ内の /var/www/html 以下にコピーされる。なので、イメージ内では /var/www/html/site/index.html ではなくて /var/www/html/index.html というようにファイルが配置される。
イメージのビルド
docker build コマンドでイメージをビルドする。など、docker build コマンドの一番最後のピリオドは、Dockerfile が置かれているディレクトリを表している。
$ cd ~/workdir
$ docker build -t arturias/myweb2 .
# イメージが出来たか確認してみる。
$ docker images
コンテナの起動
作成したイメージを使ってコンテナを起動。なお、Dockerfile 内で ENTRYPOINT を指定したので、コンテナ内で実行するコマンドを docker run に渡す必要は無い。
$ docker run -d -p 80:80 arturias/myweb2
AWS のセキュリティグループの設定で、EC2インスタンスにHTTPでのアクセス(TCP 80) ができるように設定する。