独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【AWS】【Docker】【Java】Amazon Linux 2 でJavaのWebアプリケーションをデプロイするまで(Docker編)

以前、AWS EC2のAmazon Linux 2の環境にJavaのWebアプリケーションをデプロイするまでの手順解説の記事を書きました。
[Amazon Linux 2でJavaのWebアプリケーション動作環境を構築してデプロイするまで]https://case10.hateblo.jp/entry/2020/10/06/165543 今回はJava, TomcatをDockerで動かす場合の手順になります。
※DBはDocker使わずにホストに直接インストールする前提。

Dockerのインストール

# Dockerのインストール
$ sudo yum install -y docker
# サービスの起動
$ sudo systemctl start docker
# 確認
$ sudo docker version
# ユーザーの追加(必要ない??)
$ sudo usermod -a -G docker ec2-user
# システムの自動起動設定
$ sudo systemctl enable docker

マウント用のディレクトリの作成

Docker上のTomcatとマウントする用のディレクトリを作成しておく。
マウントしておくと、ここにファイルをおけばコンテナ上にもファイルが配置される。
また、コンテナを削除してもファイルが削除されないようになる。

# Tomcat用のディレクトリ作成
$ sudo mkdir /opt/tomcat

Tomcatのコンテナを起動

# TomcatのDockerイメージ取得
$ sudo docker pull tomcat
# 取得できたか確認
$ sudo docker images

# ホスト側の/opt/tomcat/gropAディレクトリを/usr/local/tomcat/にマウントする
# --nameオプションではコンテナ名を指定。任意。
$ sudo docker run -d -p 8080:8080 -v /opt/tomcat:/usr/local/tomcat --name tomcatA tomcat

# 起動したか確認
$ duso docker ps

# インスタンスを再起動した時に自動でコンテナが起動するように設定
$ sudo docker update --restart=always tomcatA

Tomcatの設定

tomcatではwebapps配下にデプロイするファイルを配置する。
しかしコンテナのTomcatではデフォルトではWebappsの中身は空で、webapps.distに必要なファイルが入っているので、中身をコピーする。
※リネームしても良いかも。
リネームの場合は、どこのディレクトリとマウントしているかによって、リネームができなくなる場合があるので注意。

# Docker(Tomcat)に入り込む
$ sudo docker exec -it tomcatA bash
# Webapps.distの中身をWebappsにコピー
$ cp -r webapps.dist/* webapps
# Dockerから抜ける
$ exit

動作検証

ブラウザから

http://<パブリックDNS>:8080  

にアクセスしてTomcatのホーム画面が出るかを確認する。

マウントができているか確認したい場合は、ホスト側でtomcat/webappsの中に適当なディレクトリを作成し、index.htmlを適当に作成する。
ブラウザから

http://<パブリックDNS>:8080/<作成したディレクトリ>  

にアクセスして、index.htmlの内容が表示されていればOK。

あとは必要に応じてwarファイルを配置してデプロイすればWebアプリケーションが動作する。