LoginSignup
54
65

More than 5 years have passed since last update.

テスト環境をDockerで作成する(Webサーバ+DBサーバ+Javaアプリ)

Last updated at Posted at 2016-01-28

■目的

こちらで記載した、「こんなテスト環境にしたい」の理想系を目指します。
各サーバのディストリビューションやバージョンは気にせず、ミドルウェアのバージョンが合っていれば良い前提とします。

■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」は使用したいバージョンを指定します。指定できるバージョンはこちらで確認できます。

Dockerfile
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でしたので、今回はこちらを使用させていただきました。

Dockerfile
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」は使用したいバージョンを指定します。指定できるバージョンはこちらで確認できます。

Dockerfile
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のアクセスモードは未指定の場合何になるのか不明...。
(リファレンスにも記載されていないような)

docker-compose.yml
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で作成することができました!
コンテナ名とポートを変更すれば、複数のテスト環境を作成することができそうです。

54
65
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
65