■目的
こちらで記載した、「こんなテスト環境にしたい」の理想系を目指します。
各サーバのディストリビューションやバージョンは気にせず、ミドルウェアのバージョンが合っていれば良い前提とします。
■Docker Compose
今まではDockerfileを作成してイメージ作成→コンテナ起動、としていましたが、各サーバのイメージを作成して起動して...というのは面倒です。
そこで「Docker Compose」を使用して、複数のサーバを一気に操作してしまいます。Docker Composeのインストールは公式サイトに記載されています。
■ファイル構成
今回は以下のファイル構成としました。
docker-hoge-service
│
├── apache (← Apache関連フォルダ)
│ │
│ └── Dockerfile (← Apacheイメージ用のDockerfile)
│
├── docker-compose.yml (← Docker Compose設定ファイル)
│
├── java (← Java関連フォルダ)
│ │
│ ├── Dockerfile (← Javaイメージ用のDockerfile)
│ │
│ └── hoge-0.0.1.jar
│
├── mysql(← MySQL関連フォルダ)
│ │
│ ├── Dockerfile (← MySQLイメージ用のDockerfile)
│ │
│ ├── initdb.d (← 初期実行SQL格納フォルダ)
│ │ │
│ │ └── hoge.sql (← 初期実行SQLファイル)
│ │
│ └── my.cnf
│
└── var (← 永続化用データ格納フォルダ)
■ApacheのDockerfile
「apache」の「Dockerfile」の中身は以下のようにしました。
「2.4」は使用したいバージョンを指定します。指定できるバージョンはこちらで確認できます。
FROM httpd:2.4
MAINTAINER nagi244<hoge@hoge.co.jp>
# ドキュメントルート下に「hoge」フォルダを作成
RUN mkdir -m 777 /usr/local/apache2/htdocs/hoge
EXPOSE 80
■JavaのDockerfile
「java」の「Dockerfile」の中身は以下のようにしました。
Javaは公式の方はOpenJDKでしたので、今回はこちらを使用させていただきました。
FROM lwieske/java-8:jdk-8u20
MAINTAINER nagi244<hoge@hoge.co.jp>
ADD *.jar /home/hoge.jar
CMD ["java", "-jar", "/home/hoge.jar"]
■MySQLのDockerfile
「mysql」の「Dockerfile」の中身は以下のようにしました。
「5.6」は使用したいバージョンを指定します。指定できるバージョンはこちらで確認できます。
FROM mysql:5.6
MAINTAINER nagi244<hoge@hoge.co.jp>
COPY my.cnf /etc/my.cnf
# 「/docker-entrypoint-initdb.d/」にSQLファイルを置いておくと、初回起動時に実行される
COPY initdb.d/*.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
■Docker Composeのファイル
「docker-compose.yml」の中身は以下のようにしました。
volumes
のアクセスモードは未指定の場合何になるのか不明...。
(リファレンスにも記載されていないような)
hoge-mysql:
build: mysql
ports:
- "3306:3306" # [外部向けポート:内部ポート]
container_name: hoge-mysql
environment:
- MYSQL_ROOT_PASSWORD=hoge_root_pass
- MYSQL_DATABASE=hoge
- MYSQL_USER=hoge
- MYSQL_PASSWORD=hoge_pass
# MySQLのコンテナ内のDBデータ(/var/lib/mysql)を、Dockerを動かしているホスト(./var/mysql/hoge)に保存 = データの永続化
volumes:
- ./var/mysql/hoge:/var/lib/mysql # ホスト:コンテナ:アクセスモード(今回は省略)
hoge-apache:
build: apache
ports:
- "80:80"
container_name: hoge-apache
volumes:
- ./var/apache/hoge:/usr/local/apache2/htdocs/hoge
hoge-java:
build: java
ports:
- "10000:10000"
container_name: hoge-java
links:
- hoge-mysql # MySQLのコンテナ名を指定。JavaコンテナからMySQLコンテナへ「hoge-mysql」という名前でアクセスできる。
- hoge-apache # Apacheのコンテナ名を指定。JavaコンテナからApacheコンテナへ「hoge-apache」という名前でアクセスできる。
■全イメージ作成 & コンテナ起動
以下のコマンドを叩けば、「docker-compose.yml」に記載しているすべてのイメージ作成 & コンテナ起動までが実行されます。
-d
はバックグラウンドで実行させるために付けています。
$ docker-compose up -d
指定したものだけ実行したい場合は、以下のコマンドを叩きます。
$ docker-compose up -d hoge-mysql
■コンテナ起動確認
コンテナが起動したか確認する場合は、以下のコマンドを叩きます。
$ docker-compose ps
■全コンテナ停止
以下のコマンドを叩けば、すべてのコンテナが停止します。
$ docker-compose stop
指定したものだけ停止したい場合は、以下のコマンドを叩きます。
$ docker-compose stop hoge-mysql
以上で、「Webサーバ+DBサーバ+Javaアプリ」のコンテナをDockerで作成することができました!
コンテナ名とポートを変更すれば、複数のテスト環境を作成することができそうです。