DockerでTomcatを複数立ち上げる方法!docker-composeで複数コンテナを起動する

docker docker
スポンサーリンク

この記事では、Dockerで簡単にtomcatを2つ立ち上げる方法を紹介します。

Dockerfileを二つ用意してdocker-composeで一気に起動したり、Dockerfileなしでdocker-compose.ymlで全て完結させる方法などがあります。

DockerでTomcatを2つ立ち上げる方法

1. Dockerのインストール

まだお使いの環境にDockerがない場合はインストールします。

この記事を参考にしてインストールしてください。

Docker Desktopをインストールすると、dockerコマンドとdocker-composeコマンドが使用できるようになります。

バージョン確認コマンドが動作するかチェックしてください。

docker version
docker-compose version

それぞれバージョン情報が返って来ればOKです。

2. docker-compose.ymlファイルの作成

Tomcatをビルドするには、Dockerfile+docker-compose.ymlのパターンとdocker-compose.ymlだけのパターンがあります。

Dockerfile + docker-compose.ymlの場合

1. フォルダ構成

フォルダ構成は下記のようにしています。

.
├── docker-compose.yml
├── tomcat1
│   ├── Dockerfile
│   └── webapps
│       └── デプロイするwarファイル
└── tomcat2
    ├── Dockerfile
    └── webapps
        └── デプロイするwarファイル

デプロイするwarファイルには、TomcatのSample Applicationを使用しました。Sample Applicationのページからsample.warがダウンロードできますので、webappsフォルダに配置して使用します。

2. Dockerfileの作成

Dockerfileでは、Docker imageの設定とwarファイルのデプロイを行います。

FROM tomcat:9.0.46
COPY ./webapps $CATALINA_HOME/webapps

tomcat1もtomcat2も同じ内容のDockerfileでOKです。

ここでのDockerfileの書き方は下の記事で詳しく記載したので、参考にしてください。

3. docker-compose.ymlの作成

docker-compose.ymlでDockerfile のあるディレクトリのパスとポートを指定します。

version: '3'

services: 
  tomcat1:
    container_name: tomcat1
    build: ./tomcat1
    ports:
      - "8088:8080"

  tomcat2:
    container_name: tomcat2
    build: ./tomcat2
    ports:
      - "8080:8080"

Docker Composeでは、複数のコンテナを定義し実行することができます。

各設定の意味は、下記の通りです。

version: '3'

services:                   #サービスの定義するオブジェクト
  tomcat1:                  #tomcat1というサービスを定義
    container_name: tomcat1 #コンテナ名を指定
    build: ./tomcat1        #Dockerfile のあるディレクトリのパスを指定
    ports:                  #ポートを公開
      - "8080:8080"         #ホストOSの8080をコンテナの8080ポートに転送

  tomcat2:                  #tomcat2というサービスを定義
    container_name: tomcat2 #コンテナ名を指定
    build: ./tomcat2        #Dockerfile のあるディレクトリのパスを指定
    ports:                  #ポートを公開
      - "8088:8080"         #ホストOSの8088をコンテナの8080ポートに転送

docker-compose.ymlのみの場合

1. フォルダ構成

Dockerfileは必要ありません。docker-compose.ymlとwarファイルがあればOKです。

.
├── docker-compose.yml
├── tomcat1
│   └── webapps
│       └── デプロイするwarファイル
└── tomcat2
    └── webapps
        └── デプロイするwarファイル
2. docker-compose.ymlの作成

imageにDocker Image、volumesにwarファイルのあるディレクトリを指定します。

version: '3'

services: 
  tomcat1: 
    container_name: tomcat1
    image: tomcat:9.0.46
    volumes:
      - ./tomcat1/webapps:/usr/local/tomcat/webapps
    ports:
      - "8080:8080"  

  tomcat2:
    container_name: tomcat2
    image: tomcat:9.0.46
    volumes:
      - ./tomcat1/webapps:/usr/local/tomcat/webapps
    ports:
      - "8088:8080"

それぞれの設定項目の説明はこんな感じ。

version: '3'

services:                   #サービスの定義するオブジェクト
  tomcat1:                  #tomcat1というサービスを定義
    container_name: tomcat1 #コンテナ名を指定
    image: tomcat:9.0.46    #起動するDocker Imageを指定
    volumes:                #ホストOSのwarをコンテナにデプロイ
      - ./tomcat1/webapps:/usr/local/tomcat/webapps
    ports:                  #ポートを公開
      - "8080:8080"         #ホストOSの8080をコンテナの8080ポートに転送

  tomcat2:                  #tomcat2というサービスを定義
    container_name: tomcat2 #コンテナ名を指定
    image: tomcat:9.0.46    #起動するDocker Imageを指定
    volumes:                #ホストOSのwarをコンテナにデプロイ
      - ./tomcat1/webapps:/usr/local/tomcat/webapps
    ports:                  #ポートを公開
      - "8088:8080"         #ホストOSの8088をコンテナの8080ポートに転送

3. docker-compose upで起動

起動するには、docker-compose.ymlファイルがあるディレクトリでコマンドを実行します。

docker-compose up

バックグラウンドで実行したい時は、-dのオプションをつけます。

docker-compose up -d 

-fオプションで、docker-compose.ymlファイルのパスを指定して実行することも可能です。

docker-compose -f <docker-compose.ymlへのパス> up -d 

Docker Desktopで起動チェックをします。

Docker Desktopで起動チェックをします。コンテナが2つ起動していることがわかります。

次に、http://localhost:8080/sample/とhttp://localhost:8088/sample/にアクセスして、TomcatのSample Applicationが表示されることを確認します。

4. 個別のサービスを起動するには

docker-compose.ymlで定義したサービスを個別に起動するには、サービス名を指定します。

docker-compose up -d <サービス名>

サービス名とは、docker-compose.ymlのserviceオブジェクト下で定義したものです。
ここでは、tomcat1とtomcat2がそれに当たります。

例
docker-compose up -d tomcat1
docker-compose up -d tomcat2

5. docker-compose downで停止

停止するときはdownです。

docker-compose down

オプションでイメージの削除もできます。

docker-compose down --rmi local

docker-compose.ymlのimageで取得したDocker Imageは–rmi allで削除できます。

docker-compose down --rmi all

以上!

コメント

タイトルとURLをコピーしました