Docker Composeを使用したシングルノードでのマルチサービスデプロイメント

一、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

タグ: Docker Docker Compose コンテナ マルチサービスデプロイメント

8月6日 15:47 投稿