Dockerでnginxとspring bootを連携

今までDockerを触ったことがなかったので、

NginxとSpriing bootをDockerで作り、連携させることにしました。

基本的にはサーバー上でNginxとSpriing bootを連携させる手順とほぼいっしょであることが分かりました。

 

【前提】

Eclipseなどでspring bootのjarファイルを作成していること。

 

手順

1.以下のようにフォルダ構成を作成する。

【Dockerfileのフォルダ構成】

f:id:rikues2012:20210910181008p:plain

フォルダ構成

・テスト用のサーバで上記のように各フォルダを作成する。

・Nginxのデフォルトのconfファイル(/etc/nginx/nginx.conf)をコピーし、nginx.conf.tmpを作成(後で編集する)

・ローカルで作成したjarファイルを「/home/ec2-user/springboottest/jar」配下にコピー

 

2. Nginx用のDockerfile作成(/home/ec2-user/nginxtest/Dockerfile)

FROM nginx:1.17

# nginxのインストール
RUN apt-get update

# vimのインストール
RUN apt-get install -y vim

RUN rm /etc/nginx/nginx.conf
COPY etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf

vimはインストールしなくても問題ないが、コンテナ内に入った時にファイルを確認するためにインストール

 

3. ngnix用のconfファイル作成(nginx.conf.tmp)

 デフォルトのconfファイルをコピーし、赤字の行を修正

   server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        #root         /usr/share/nginx/html; ←ここをコメント

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://app:8080/; ←ここ
        }

「app:8080」の「app」は任意の名称を設定。

ここが大事なポイントの1つ。

 

4. ローカルで作成したjarファイルを以下にコピー

・/home/ec2-user/springboottest/jar

f:id:rikues2012:20210910183027p:plain

 

5. spring boot用のDockerファイルを作成(/home/ec2-user/springboottest/Dockerfile)

FROM amazoncorretto:11.0.3

ADD jar/test.jar /root/test.jar
CMD java -jar /root/test.jar

6. Dockerイメージを作成

 ようやくここからDockerイメージの作成が始まります。。

 6-1. Nginx用のイメージを作成

 # cd /home/ec2-user/ngnixtest

 # docker build -t nginx17 .

 f:id:rikues2012:20210910183345p:plain

「Successfully」が出力されることを確認

 

 6-2. Nginx用イメージが作成されたことを確認

 # docker images 

f:id:rikues2012:20210910183506p:plain


 6-3. spring boot用のイメージを作成

 # cd /home/ec2-user/springboottest

 # docker build -t spring2019 .

 ※2019年に作ったので、分かりやすく2019にしました

 f:id:rikues2012:20210910183634p:plain

 「Successfully」が出力されること確認

 

 6-4. spring boot用のイメージが作成されたことを確認

 # docker images

f:id:rikues2012:20210910183822p:plain

 

7. Dockerのコンテナ作成 & 起動

spring boot用のコンテナとnginx用のコンテナを連携させるため、spring boot用のコンテナを先に立ち上げる。

※順番が逆でも大丈夫でした。。

 

 7-1. spring boot用のコンテナ作成&起動

 # docker run -d --name spring-container -p 8080:8080 spring2019

 

 7-2. spring boot用のコンテナ作成&起動の確認

 # docker ps -a

f:id:rikues2012:20210910184243p:plain

 

 7-3. nginx用のコンテナ作成&起動

 # docker run -d --link spring-container:app --name nginx-container -p 80:80 nginx17

 「app」はngnix用のconfファイル作成に書いた「proxy_pass http://app:8080/;」と同じ文字列にする。

 

 7-4. nginx用のコンテナ作成&起動の確認

 # docker ps -a

f:id:rikues2012:20210910191746p:plain

 

 7-5. 動作していることをWebブラウザから確認

 http://サーバのグローバルIP/

 

以上になります。

 

進化系記事

rikues2012.hatenablog.com

2024.03.21 追記

dockerコマンドの--linkオプションは非推奨のため、docker-composeコマンドなど他のコマンドを利用した方が良さそうです。

docs.docker.com

 

 

参考

以下を見て、Dockerを理解しました。

ちょっとオタク系の感じがしてどうかな?と思ったのですが、内容は簡潔で分かりやすかったので、けっこうお勧めです。

以下のシリーズの①、③も合わせて購入しました。

booth.pm