Dockerで構築したapache環境の設定ファイル更新と反映

ここではDockerを使って構築したapache環境で設定ファイル(httpd.conf)を更新し、設定を反映することをやっていきます。

前回説明した内容は省いているので以下も見てもらえればと思います。

今回試したパターン

いくつかの方法を試してみました。

  • ホスト上で編集
    • 設定ファイル(httpd.conf)をマウント
    • 作業用ディレクトリをマウントしてコピー
  • コンテナ上で編集
    • vimをインストールして編集

設定ファイルをマウント

ここでは設定ファイル(httpd.conf)を直接マウントして、ホスト上でファイルを更新したいと思います。

設定ファイル取得

まずは、設定ファイルを取得します。公式に記載のものを参考に以下のコマンドを実行します。

$ docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > httpd.conf

ここで取得したファイルは、コンテナ起動時のマウント設定で使います。

コンテナ起動

先ほど取得した設定ファイルをマウントしてコンテナを起動します。

コマンド

以下のコマンドでコンテナを起動します。

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

なお、ここで「/usr/local/apache2/conf/httpd.conf」ではなく「/usr/local/apache2/conf」のようにディレクトリをマウントしようとするとエラーになりました。

実行

実行すると以下のようになります。

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

実行後に「docker ps」で確認して以下のように表示されればOKです。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED              STATUS              PORTS                  NAMES
12abf7e970a1        httpd:2.4           "httpd-foreground"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   my-apache-app-conf
$

HTTPアクセス(設定変更前)

この時点でHTTP(curl)でアクセスしてみます。ヘッダ情報も一緒に表示しておきます。

$ curl http://0.0.0.0:8080/ -v
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 15 Feb 2020 09:52:44 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
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 0.0.0.0 left intact
$

設定更新

ホスト側(Dockerを起動している側)で設定ファイルを更新し、apacheを再起動します。

ホスト側でファイル更新

ホスト側にて設定ファイルを更新します。

$ vim httpd.conf
$ tail -2 httpd.conf
Header add HOGE FUGA

$

上記ではvimを使いましたが、好きなエディタで更新して大丈夫です。

今回は適当にヘッダ情報を追加する設定を追加しました。

apache再起動

apacheの再起動はコンテナにログインして実施します。

$ docker exec -it my-apache-app-conf /bin/bash
root@12abf7e970a1:/usr/local/apache2#

ログインしたら「apachectl restart」で再起動します。

root@12abf7e970a1:/usr/local/apache2# apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
root@12abf7e970a1:/usr/local/apache2#

これで再起動できました。今回はapacheだけ再起動したかったのでログインして実施しましたが、dockerコマンドでコンテナごと再起動をしても大丈夫です。

なお、警告が出ていますが今回の作業的には無視して大丈夫です。警告を出ないようにしたい場合は「ServerName」の設定を入れてください。以下のような形です。

ServerName app.masaki-blog.net:80

上記の設定も入れると以下のようになります。

$ docker exec -it my-apache-app-conf /bin/bash
root@12abf7e970a1:/usr/local/apache2# apachectl restart
root@12abf7e970a1:/usr/local/apache2#

HTTPアクセス(設定反映後)

設定反映後にHTTPアクセスした結果が以下になります。

$ curl http://0.0.0.0:8080/ -v
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:8080
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 15 Feb 2020 09:57:32 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
< HOGE: FUGA
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 0.0.0.0 left intact
$

最初の結果と見比べると以下ヘッダが追加されていることが分かります。

< HOGE: FUGA

設定ファイルの更新が反映されていることが確認できました。

作業用ディレクトリをマウント

ここでは作業用のディレクトリをマウントして、そこで設定ファイルを更新したいと思います。

コンテナ起動

コンテナを起動します。

コマンド

以下のコマンドでコンテナを起動します。作業用ディレクトリとして「/tmp/」を指定します。

docker run -dit --name my-apache-app-conf2 -p 8090:80 -v "$PWD":/tmp/ httpd:2.4

なお、一応、このページで記載している他のコンテナと同時に起動できるようにコンテナ名やポート番号は変えています。

実行

コマンドを実行すると以下のようになりました。

$ docker run -dit --name my-apache-app-conf2 -p 8090:80 -v "$PWD":/tmp/ httpd:2.4
43651e7c5aa5a0bc8e1807c804a66fa99bea542472f9ffe11940734a33e0cb57
$

設定更新

ホスト側で設定ファイルを更新します。その後、コンテナ側でファイルをコピーした後にapacheを再起動します。

ホスト側でファイル更新

ホスト側でファイルを更新します。違いが分かるように先ほどとは編集内容を少し変えておきます。

$ vim httpd.conf
$ tail -2 httpd.conf
Header add AAA BBB

$

なお、もし設定ファイルの取得を実施していない場合は、上記の前にファイルを取得しておいてください(コマンドは前述)。

コンテナ側でファイルコピー

次にコンテナ側でファイルをコピーします。まずはコンテナにログインし、ファイルが存在することを確認しておきます。

$ docker exec -it my-apache-app-conf2 /bin/bash
root@43651e7c5aa5:/usr/local/apache2# ls /tmp/
httpd.conf
root@43651e7c5aa5:/usr/local/apache2#

ちゃんとファイルが存在することが確認できたので、ファイルをコピーします。

root@43651e7c5aa5:/usr/local/apache2# cp /tmp/httpd.conf conf/httpd.conf
root@43651e7c5aa5:/usr/local/apache2# tail -2 conf/httpd.conf
Header add AAA BBB

root@43651e7c5aa5:/usr/local/apache2#

最後にファイルの内容も確認しましたが、ちゃんと更新されていることが確認できました。

apache再起動

apacheの再起動をします。これは先ほどと同様です。

HTTPアクセス

最後にcurlでアクセスしてみます。

$ curl http://0.0.0.0:8090/ -v
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8090 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:8090
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 15 Feb 2020 17:00:53 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
< AAA: BBB
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 0.0.0.0 left intact
$

以下のようにヘッダが付与されました。

< AAA: BBB

vimをインストール

最後にコンテナにvimをインストールして、コンテナ上で設定ファイルを更新したいと思います。

コンテナ起動

今回は特にマウントをする必要はないのでコンテナの起動は比較的簡易なコマンドになっています。

docker run -dit --name my-apache-app-conf3 -p 8000:80 httpd:2.4

上記を実行すると以下のようになりました。

$ docker run -dit --name my-apache-app-conf3 -p 8000:80 httpd:2.4
8fb0585cf88f4ce1fa2701e4a7927c4b63abf2d256d735c6f010cc72d4049465
$

vimインストール

続いてコンテナにvimをインストールします。

コンテナログイン

まずはコンテナにログインします。

$ docker exec -it my-apache-app-conf3 /bin/bash
root@8fb0585cf88f:/usr/local/apache2#

apt-get update

ログインしたら「apt-get」でvimをインストールします。先に「apt-get update」で「apt-get」自体を更新します。

root@8fb0585cf88f:/usr/local/apache2# apt-get update
Get:2 http://deb.debian.org/debian buster InRelease [122 kB]
Get:1 http://security-cdn.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [49.3 kB]
Get:4 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
Get:5 http://security-cdn.debian.org/debian-security buster/updates/main amd64 Packages [177 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [5792 B]
Fetched 8326 kB in 13s (664 kB/s)
Reading package lists... Done
root@8fb0585cf88f:/usr/local/apache2#

apt-get install vim

次に「apt-get install vim」でvimをインストールします。

root@8fb0585cf88f:/usr/local/apache2# apt-get install vim
Reading package lists... Done
Building dependency tree
Reading state information... Done

...(略)...

これでvimがインストールできました。コマンドの実行結果は少々長いため、省略しています。

なお、途中、以下のような表示が出たら「Y」を入力してください。

Do you want to continue? [Y/n] 

設定更新

設定を更新します。コンテナで設定ファイルを更新し、apacheを再起動します。

コンテナ側でファイル更新

コンテナ側でファイルを更新します。先ほどvimをインストールしたのでこれを使います。

root@8fb0585cf88f:/usr/local/apache2# vim conf/httpd.conf
root@8fb0585cf88f:/usr/local/apache2# tail -2 conf/httpd.conf
Header add hoge fuga

root@8fb0585cf88f:/usr/local/apache2#

apache再起動

apacheの再起動をします。これは今までと同様です。

HTTPアクセス

また設定変更後のHTTPアクセスを確認してみます。

$ curl http://0.0.0.0:8000/ -v
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:8000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 15 Feb 2020 18:26:22 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
< hoge: fuga
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 0.0.0.0 left intact
$

無事に以下の表示が確認できました。

< hoge: fuga

次回

今回は3種類の方法でapacheの設定の更新を試してみました。

次はDockerfileを使った設定方法をやっていこうと思います。

コメント

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