Slide 1

Slide 1 text

SpringBoot を SpringBoot を コンテナで コンテナで 動かしてみる 動かしてみる SpringBoot を - コンテナで - 動かしてみる 

Slide 2

Slide 2 text

⾃⼰紹介 ⾃⼰紹介 妹尾 ⼀弘 札幌でシステム開発会社勤務 興味分野 AWS/ サーバーレス/Java SpringBoot を - コンテナで - 動かしてみる 

Slide 3

Slide 3 text

コンテナ コンテナ 使ってますか? 使ってますか? SpringBoot を - コンテナで - 動かしてみる 

Slide 4

Slide 4 text

私は使ってません 私は使ってません SpringBoot を - コンテナで - 動かしてみる 

Slide 5

Slide 5 text

最近のプロジェクトで 最近のプロジェクトで SpringBoot アプリを SpringBoot アプリを Docker で動かした話 Docker で動かした話 SpringBoot を - コンテナで - 動かしてみる 

Slide 6

Slide 6 text

アジェンダ アジェンダ 1. なぜDocker を使うことになったか 2. SpringBoot をDocker 化する 3. Docker Image を動かす SpringBoot を - コンテナで - 動かしてみる 

Slide 7

Slide 7 text

#1 なぜDocker を使うことに #1 なぜDocker を使うことに なったか なったか SpringBoot を - コンテナで - 動かしてみる 

Slide 8

Slide 8 text

インフラはAWS Beanstalk インフラはAWS Beanstalk SpringBoot を - コンテナで - 動かしてみる 

Slide 9

Slide 9 text

Java 11 を採⽤ Java 11 を採⽤ SpringBoot を - コンテナで - 動かしてみる 

Slide 10

Slide 10 text

Beanstalk がJava11 を未サポート Beanstalk がJava11 を未サポート (2020 年2 ⽉現在はベータ版で提供中) SpringBoot を - コンテナで - 動かしてみる 

Slide 11

Slide 11 text

Docker ならJava11 が動かせる! Docker ならJava11 が動かせる! SpringBoot を - コンテナで - 動かしてみる 

Slide 12

Slide 12 text

#2 SpringBoot をDocker 化する #2 SpringBoot をDocker 化する SpringBoot を - コンテナで - 動かしてみる 

Slide 13

Slide 13 text

イメージ作成〜デプロイの流れ イメージ作成〜デプロイの流れ SpringBoot を - コンテナで - 動かしてみる 

Slide 14

Slide 14 text

Dockerfile Dockerfile SpringBoot を - コンテナで - 動かしてみる 

Slide 15

Slide 15 text

From From SpringBoot を - コンテナで - 動かしてみる 

Slide 16

Slide 16 text

Run Run SpringBoot を - コンテナで - 動かしてみる 

Slide 17

Slide 17 text

Volume Volume SpringBoot を - コンテナで - 動かしてみる 

Slide 18

Slide 18 text

Env Env SpringBoot を - コンテナで - 動かしてみる 

Slide 19

Slide 19 text

Copy Copy SpringBoot を - コンテナで - 動かしてみる 

Slide 20

Slide 20 text

Expose Expose SpringBoot を - コンテナで - 動かしてみる 

Slide 21

Slide 21 text

Entrypoint Entrypoint SpringBoot を - コンテナで - 動かしてみる 

Slide 22

Slide 22 text

Build Image Build Image $ docker build -t javado . Step 1/12 : FROM amazoncorretto:11 ---> 2f2a640d4c1d Step 2/12 : RUN yum install -y glibc-langpack-ja ---> Using cache ---> a4ef6d211b52 Step 3/12 : RUN mkdir /app ---> Using cache ---> af5ba884f647 ... Step 10/12 : COPY build/libs/SampleApplication.jar /app/SampleApp ---> b615e2d76851 ... Successfully built a2e16070534a SpringBoot を - コンテナで - 動かしてみる 

Slide 23

Slide 23 text

Build Image Build Image SpringBoot を - コンテナで - 動かしてみる 

Slide 24

Slide 24 text

#3 Docker を動かす #3 Docker を動かす SpringBoot を - コンテナで - 動かしてみる 

Slide 25

Slide 25 text

AWS Elastic Beanstalk AWS Elastic Beanstalk AWS のPaaS サービス Platform の1 つとしてDocker をサポート SpringBoot を - コンテナで - 動かしてみる 

Slide 26

Slide 26 text

デプロイ⽅法は3 パターン デプロイ⽅法は3 パターン Docker Docker le のデプロイ コンテナレジストリから取得 MultiContainer Docker SpringBoot を - コンテナで - 動かしてみる 

Slide 27

Slide 27 text

Docker Platform の構成 Docker Platform の構成 SpringBoot を - コンテナで - 動かしてみる 

Slide 28

Slide 28 text

Dockerfile をデプロイして Dockerfile をデプロイして デプロイ先でdocker build デプロイ先でdocker build 実⾏定義ファイル Dockerrun.aws.json を定義 Docker le と定義ファイルをzip にしてデプロイ ホストインスタンスでdocker build & docker run SpringBoot を - コンテナで - 動かしてみる 

Slide 29

Slide 29 text

Dockerrun.aws.json Dockerrun.aws.json { "AWSEBDockerrunVersion": 1, "Ports": [ { "ContainerPort": 8000 } ], "Volumes": [ { "HostDirectory": "/var/log/app", "ContainerDirectory": "/app/logs" } ] } SpringBoot を - コンテナで - 動かしてみる 

Slide 30

Slide 30 text

SampleApplication.zip SampleApplication.zip SampleApplication.zip / |- Dockerfile |- Dockerrun.aws.json |- build/ |- libs/ |- SampleApplication.jar SpringBoot を - コンテナで - 動かしてみる 

Slide 31

Slide 31 text

コンテナレジストリから コンテナレジストリから 取得して実⾏ 取得して実⾏ ビルドしたイメージをレジストリにPush 実⾏定義ファイル Dockerrun.aws.json を定義 コンテナレジストリからイメージをPull SpringBoot を - コンテナで - 動かしてみる 

Slide 32

Slide 32 text

Container Registry Container Registry ビルドしたContainer Image を保存する場所 パブリックレジストリ Docker Hub プライベートレジストリ private Docker Hab Elastic Container Registry (AWS) Azure Container Registry (Azure) SpringBoot を - コンテナで - 動かしてみる 

Slide 33

Slide 33 text

ECR にリポジトリを作成 ECR にリポジトリを作成 SpringBoot を - コンテナで - 動かしてみる 

Slide 34

Slide 34 text

ビルド済みのローカルの ビルド済みのローカルの コンテナにタグを付ける コンテナにタグを付ける $ docker tag javado:latest \ xxx.dkr.ecr.ap-northeast-1.amazonaws.com/javado:2020020901 SpringBoot を - コンテナで - 動かしてみる 

Slide 35

Slide 35 text

ECR にPush ECR にPush $ docker push xxx.dkr.ecr.ap-northeast-1.amazonaws.com/javado:202 SpringBoot を - コンテナで - 動かしてみる 

Slide 36

Slide 36 text

Dockerrun.aws.json Dockerrun.aws.json { "AWSEBDockerrunVersion": 1, "Image": { "Name": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/javado:2020 }, "Ports": [ { "ContainerPort": 8000 } ], "Volumes": [ { "HostDirectory": "/var/log/app", "ContainerDirectory": "/app/logs" } ] } SpringBoot を - コンテナで - 動かしてみる 

Slide 37

Slide 37 text

SampleApplication.zip SampleApplication.zip SampleApplication.zip / |- Dockerrun.aws.json SpringBoot を - コンテナで - 動かしてみる 

Slide 38

Slide 38 text

Multicontainer Docker の構成 Multicontainer Docker の構成 SpringBoot を - コンテナで - 動かしてみる 

Slide 39

Slide 39 text

Multicontainer Docker Multicontainer Docker 複数のコンテナを実⾏可能 docker-compose 相当の構成が出来る 実際にはECS が起動する SpringBoot を - コンテナで - 動かしてみる 

Slide 40

Slide 40 text

Dockerrun.aws.json Dockerrun.aws.json { "AWSEBDockerrunVersion": 2, "containerDefinitions": [ { "name": "springboot", "image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/javado:2 "essential": true, "memory": 1024, "portMappings": [ { "hostPort": 8000, "containerPort": 8000 } ], "logConfiguration": { "logDriver": "awslogs" SpringBoot を - コンテナで - 動かしてみる 

Slide 41

Slide 41 text

デプロイ⽅法の違い デプロイ⽅法の違い SpringBoot 単独で動かすならDocker がシンプル Docker le 直接ならRegistry が不要 Registry を使⽤する⽅法が汎⽤的 複数コンテナを動かしたいならMultiContainer SpringBoot を - コンテナで - 動かしてみる 

Slide 42

Slide 42 text

コンテナ化しておけば コンテナ化しておけば 運⽤⽅法に関わらず 運⽤⽅法に関わらず 同じアプリが動作するので、 同じアプリが動作するので、 運⽤しやすい選択肢が選べる 運⽤しやすい選択肢が選べる SpringBoot を - コンテナで - 動かしてみる 

Slide 43

Slide 43 text

アプリの実⾏環境をコンテナに押し込むことで アプリの実⾏環境をコンテナに押し込むことで 実⾏環境と運⽤環境を切り離すことができる 実⾏環境と運⽤環境を切り離すことができる SpringBoot を - コンテナで - 動かしてみる 

Slide 44

Slide 44 text

コンテナ コンテナ 使っていきましょう 使っていきましょう SpringBoot を - コンテナで - 動かしてみる 

Slide 45

Slide 45 text

ありがとうございました ありがとうございました SpringBoot を - コンテナで - 動かしてみる   