一、Docker Composeのインストール
# GitHubからのダウンロード(速度が遅い場合)
curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 高速ミラーサイトからのダウンロード
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 実行権限の付与
chmod +x /usr/local/bin/docker-compose
# バージョン確認
docker-compose -v
# アンインストール
rm /usr/local/bin/docker-compose
二、プロジェクト設定
2.1 プロジェクト構造
各プロジェクトにはDockerfileを配置し、プロジェクトのpomファイルと同じ階層に配置します。docker-compose.ymlファイルはプロジェクトのルートディレクトリに配置します。
2.2 プロジェクト1のDockerfile
# JDK8ベースのイメージ
FROM java:8
# メンテナ情報
MAINTAINER tech-team
# システムエンコーディング設定
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# ボリュームのマウント
VOLUME /tmp
# JARファイルのコピー
COPY target/service1-app-0.0.1-SNAPSHOT.jar /service1-app.jar
# ポートの公開
EXPOSE 8080
# コンテナ起動時のコマンド
ENTRYPOINT ["java", "-jar", "/service1-app.jar"]
2.3 プロジェクト2のDockerfile
# JDK8ベースのイメージ
FROM java:8
# メンテナ情報
MAINTAINER tech-team
# システムエンコーディング設定
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# ボリュームのマウント
VOLUME /tmp
# JARファイルのコピー
COPY target/service2-app-0.0.1-SNAPSHOT.jar /service2-app.jar
# ポートの公開
EXPOSE 8080
# コンテナ起動時のコマンド
ENTRYPOINT ["java", "-jar", "/service2-app.jar"]
2.4 docker-compose.yml設定
# Composeファイルのバージョン
version: "3"
# 複数のサービスを定義
services:
# サービス1
service1:
# イメージの指定
image: registry.example.com/tech-repo/production/service1:1.0
# コンテナ名の指定
container_name: service1-container
# 常に再起動する設定
restart: always
# ポートのマッピング
ports:
- "8080:8080"
# サービス2
service2:
# イメージの指定
image: registry.example.com/tech-repo/production/service2:1.0
# コンテナ名の指定
container_name: service2-container
# 常に再起動する設定
restart: always
# ポートのマッピング
ports:
- "8081:8081"
# サービス3、4、5...
三、プロジェクトデプロイ
プロジェクト1とプロジェクト2はそれぞれのDockerfileを使用してイメージをビルドし、コンテナレジストリにプッシュします。
2.4で作成したdocker-compose.ymlファイルをサーバーの/home/deploy/ディレクトリにアップロードします。
[root@server deploy]# cd /home/deploy/
[root@server deploy]# ls
docker-compose.yml
[root@server deploy]# docker-compose up -d
Creating network "deploy_default" with the default driver
Creating service1-container ... done
Creating service2-container ... done
[root@server deploy]# docker ps -a | grep service
a7b3c4d5e6f7 registry.example.com/tech-repo/production/service1:1.0 "java -jar /service…" 18 seconds ago Up 17 seconds 0.0.0.0:8080->8080/tcp service1-container
h8i9j0k1l2m3 registry.example.com/tech-repo/production/service2:1.0 "java -jar /service…" 18 seconds ago Up 17 seconds 8080/tcp, 0.0.0.0:8081->8081/tcp
四、ブラウザでのテスト
デプロイが完了したら、ブラウザから以下のURLにアクセスして各サービスの動作を確認します:
- http://サーバーのIPアドレス:8080
- http://サーバーのIPアドレス:8081