Chapter 01

Dockerコンテナ(Apache+Tomcat)の設定ファイルを作成

井上嵩章@駆け出しエンジニア
井上嵩章@駆け出しエンジニア
2021.02.24に更新

目標

以下の構成図を目指す。

※目標説明

・ブラウザから80番ポートでリクエストを送るとApache(virtualhost1)を経由してTomcat1のサーバにアクセスする
・ブラウザから81番ポートでリクエストを送るとApache(virtualhost2)を経由してTomcat2のサーバにアクセスする

前提条件

・ssh接続可能なCentOSサーバーがあること
・Windows10Pro端末(ローカル開発環境)にDockerDesktopがインストールされていること

必要なフォルダとファイルを作成

以下のディレクトリ構成でファイルを作成する。各ファイルの設定は後ほど説明する。

workspace/
  ├ apache/
  │  ├ Dockerfile
  │  ├ run-httpd.sh
  │  └ httpd.conf
  ├ tomcat/
  │  ├ Dockerfile
  │  ├ tomcat-user.xml
  └ docker-compose.yml

docker-compose.ymlを作成

構成図のコンテナを作成するための3つのサービスの設定を記したファイルであり、docker-composeコマンド実行時の参照ファイルでもある。

docker-compose.yml
version: '3'
services:
  httpd:
    container_name: httpd-container
    build: ./apache
    ports:
      - "80:80"
      - "81:81"
  tomcat1:
    container_name: tomcat-container1
    build: ./tomcat
    expose:
      - "8009"
  tomcat2:
    container_name: tomcat-container2
    build: ./tomcat
    expose:
      - "8009"

ymlファイル解説

version

ymlファイルのバージョンを指定

services

サービス名を明記(httpd、tomcat1、tomcat2)

container_name

コンテナ名を指定

build

Dockerfileまでのパスを明記

ports

コンテナのポートバインドを設定(80番ポートと81番ポートをバインド)

expose

開放するポートを設定(tomcatは8009番ポートで待ち受ける)

Dockerfileを作成

ApacheのDockerfileとTomcatのDockerfileを作成

Dockerfile(Apache)
FROM centos:7
RUN yum -y update && yum clean all
RUN yum -y install httpd httpd-devel gcc* make && yum clean all
COPY httpd.conf /etc/httpd/conf/
COPY run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
CMD ["/run-httpd.sh"]

Dockerfile(Apache)解説

FROM

ベースとなるイメージを設定(CentOS7)

RUN

ビルド時に実行するコマンドを設定(Apacheのインストールとシェルファイルの権限変更)

COPY

ローカルのファイルをコンテナ内にコピー(Apacheの設定ファイルと起動用シェルファイルをコンテナ内にコピー)

CMD

起動したときにコンテナ内でデフォルトで実行されるコマンドを設定(Apache起動コマンド)

Dockerfile(Tomcat)
FROM tomcat:9.0.1-alpine
LABEL com.example.vendor="testvendor" \
      com.example.maintainer="testuser@gmail.com"
COPY tomcat-users.xml /usr/local/tomcat/conf/
RUN rm -rf /usr/local/tomcat/webapps/ROOT
CMD ["catalina.sh", "run"]

Dockerfile(Tomcat)解説

FROM

ベースとなるイメージを設定(Tomcat9)

LABEL

ベンダーとメンテナーを設定

RUN

ビルド時に実行するコマンドを設定(ディレクトリを削除)

COPY

ローカルのファイルをコンテナ内にコピー(Tomcatの設定ファイルをコンテナ内にコピー)

CMD

起動したときにコンテナ内でデフォルトで実行されるコマンドを設定(Tomcat起動コマンド)

Apacheの設定ファイルを作成

デフォルトのhttpd.confのListen部分に以下のコードを追加する

httpd.conf
Listen 80
<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    ServerName test_server_1.com:80
    ErrorLog logs/test_server_1_error_log
    CustomLog logs/test_server_1_access_log combined env=!no_log
    ProxyPass /test_server_1 ajp://tomcat1:8009/test_server_1
</VirtualHost>
Listen 81
<VirtualHost *:81>
    DocumentRoot "/var/www/html"
    ServerName test_server_2.com:81
    ErrorLog logs/test_server_2_error_log
    CustomLog logs/test_server_2_access_log combined env=!no_log
    ProxyPass /test_server_2 ajp://tomcat2:8009/test_server_1
</VirtualHost>

httpd.confファイル解説

Listen

Apacheが待ち受けるポートを設定(80番ポートと81番ポート)

VirtualHost

待ち受けポートに対するバーチャルホスト設定を記すためのタグ

ErrorLog

エラーログの吐き出し場所を設定

CustomLog

アクセスログの吐き出し場所を設定

ProxyPass

Tomcatに接続する設定を記述「"リクエストURL" ajp://"実際のURL"」

localhost:80/test⇒localhost:80/tomcat:8009/test

Apacheの起動シェルを作成

run-httpd.shのシェルファイルの中身を以下のようにする

run-httpd.sh
rm -rf /run/httpd/* /tmp/httpd*

exec /usr/sbin/apachectl -DFOREGROUND

run-httpd.shファイル解説

古いhttpdデーモンを削除し、フォアグラウンドでApacheを起動する

Tomcatの設定ファイルを作成

Tomcatユーザ設定ファイル「tomcat-users.xml」を作成する

tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-script"/>
  <user username="admin" password="testpassword" roles="manager-script"/>
</tomcat-users>