Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Kazuhiro Seo
February 09, 2020

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

Kazuhiro Seo

February 09, 2020
Tweet

More Decks by Kazuhiro Seo

Other Decks in Programming

Transcript

  1. SpringBoot

    SpringBoot

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. 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
    を -
    コンテナで -
    動かしてみる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. 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
    を -
    コンテナで -
    動かしてみる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. 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
    を -
    コンテナで -
    動かしてみる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide