Dockerfileを使って設定ファイルをカスタマイズしたapache環境の構築

ここではDockerfileを使い、設定ファイル(httpd.conf)を更新した状態のDockerイメージ を作成したいと思います。

以下の記事の続きになります。

Dockerで構築したapache環境の設定ファイル更新と反映
ここではDockerを使って構築したapache環境で設定ファイル(httpd.conf)を更新し、設定を反映することをやっていきます。 前回説明した内容は省いているので以下も見てもらえればと思います。 今回試したパターン いくつかの方法を...

事前準備

まずは事前準備として作成したものについて説明します。

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

コメント

タイトルとURLをコピーしました