ここではDockerfileを使い、設定ファイル(httpd.conf)を更新した状態のDockerイメージ を作成したいと思います。
以下の記事の続きになります。
事前準備
まずは事前準備として作成したものについて説明します。
conf/my-httpd.conf
apacheの設定を記載したファイルです。このファイルを「httpd.conf」から読み込まれるようにします。
ServerName localhost:80
Header add DUMMY_HEADER DUMMY_VALUE
直接「httpd.conf」を編集する形でも構いませんが、将来的に設定したい内容が増えた際に管理しやすいようにファイルを分ける形にしています。
Dockerfile
今回のメインのファイルです。以下のように作成しています。
FROM httpd:2.4
RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
COPY ./conf/*.conf /usr/local/apache2/conf/include/
それぞれ解説していきます。
FROM
FROMはベースとなるDockerイメージの指定です。今回は「httpd:2.4」を指定しています。
FROM httpd:2.4
RUN
RUNはイメージ作成の際に実行するコマンドです。
RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
ここでは2つのコマンドを「&&」で繋いで実行しています。このうち、
mkdir /usr/local/apache2/conf/include/
はディレクトリの作成です。設定ファイルが格納されるディレクトリになります。
echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
は「httpd.conf」に対して、作成した「include」ディレクトリ配下のファイルを読み込むような設定を追加しています。
COPY
COPYはファイルのコピーです。
COPY ./conf/*.conf /usr/local/apache2/conf/include/
「conf」ディレクトリ配下の拡張子がconfのファイルを全てDockerイメージの「include」ディレクトリにコピーします。今回は「my-httpd.conf」のみ作成しているので、これだけが格納されます。
カスタムイメージ作成
用意したDockerfileを使いカスタムイメージを作成します。
コマンド
以下のコマンドを実行します。Dockerfileを置いているディレクトリで実行します。
docker build -t my-apache2 .
実行
コマンドを実行すると以下のようになります。
$ docker build -t my-apache2 .
Sending build context to Docker daemon 8.192kB
Step 1/3 : FROM httpd:2.4
---> c562eeace183
Step 2/3 : RUN mkdir /usr/local/apache2/conf/include/ && echo 'Include conf/include/*.conf ' >> /usr/local/apache2/conf/httpd.conf
---> Running in 02ea5373def8
Removing intermediate container 02ea5373def8
---> a40753987387
Step 3/3 : COPY ./conf/*.conf /usr/local/apache2/conf/include/
---> 1d1d905ed9cb
Successfully built 1d1d905ed9cb
Successfully tagged my-apache2:latest
$
実行後に「docker image ls」で作成が確認できればOKです。
$ docker image ls my-apache2
REPOSITORY TAG IMAGE ID CREATED SIZE
my-apache2 latest 1d1d905ed9cb 2 minutes ago 165MB
$
動作確認
カスタムイメージが作成できたので、動作確認しておきます。
コンテナ起動
まずはコンテナを起動します。
コマンド
以下のコマンドでコンテナを起動します。
docker run -dit --name my-running-app -p 8080:80 my-apache2
実行
実行すると以下のようになります。
$ docker run -dit --name my-running-app -p 8080:80 my-apache2
a9196ddcbef9b792483dcb5245fe5d635a35a7a07dc21fa27634a19e0656fd68
$
ファイル配置の確認
期待の位置にファイルが作成されていることも確認してみます。まずはログインします。
$ docker exec -it my-running-app /bin/bash
root@a9196ddcbef9:/usr/local/apache2#
次にファイルが存在していることを確認します。
root@a9196ddcbef9:/usr/local/apache2# ls conf/include/
my-httpd.conf
root@a9196ddcbef9:/usr/local/apache2#
無事に配置されていることが確認できました。
HTTPアクセス
HTTPでアクセスしてみます。
$ curl http://localhost:8080/ -v
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 16 Feb 2020 10:02:42 GMT
< Server: Apache/2.4.41 (Unix)
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< ETag: "2d-432a5e4a73a80"
< Accept-Ranges: bytes
< Content-Length: 45
< DUMMY_HEADER: DUMMY_VALUE
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host localhost left intact
$
以下の通り「conf/my-httpd.conf」で設定したヘッダ情報が付与されていることが確認できました。
< DUMMY_HEADER: DUMMY_VALUE
apache再起動
設定が誤っていると警告が出ることがあるので、最後にapacheの再起動も試してみます。
root@a9196ddcbef9:/usr/local/apache2# apachectl restart
root@a9196ddcbef9:/usr/local/apache2#
特に警告なく再起動できました。
作成物
今回作成したものは以下に置いています。
https://github.com/masaki-code/docker/tree/master/apache/dockerfile
コメント