この記事では、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
以上!
コメント