Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018年からコンテナはじめませんか?

315 views

Published on

JAWS-UG さいたま支部 第9回
「2018年からコンテナはじめませんか?」

Published in: Technology
  • Be the first to comment

2018年からコンテナはじめませんか?

  1. 1. 2018/01/13 JAWS-UG さいたま⽀部 第9回勉強会 〜年初め⽇本で⼀番早いre:Cap & 新年会〜 Shinya Furuwata(@f_prg) 2018年からコンテナ はじめませんか?
  2. 2. ⾃⼰紹介
  3. 3. Name: 古渡 晋也(Furuwata Shinya) Twitter: @f_prg Facebook: f.prg.ex Community: JAWS-UG さいたま⽀部 コアメンバー Favorite AWS: AWS Support AWS Certified: SAA, DEVA, SYSOPA(☆☆☆) PSA(☆) PDEO(再認定受験中) Job: フリーランス
  4. 4. はじめに
  5. 5. 対象 コンテナ、始めたいと思っている⽅。 コンテナ、始めたよという⽅。 始めてみて、半年ぐらいのあるあるを これからお話します。
  6. 6. 半年何してたの?
  7. 7. モバイルアプリで処理する サーバサイドAPIの開発
  8. 8. と AWSインフラ構築
  9. 9. AWSインフラ
  10. 10. JAWS Days 2016で公開した Terraformのソースを流⽤して構築しまし た。 じゃないと、1000%間に合わなかった。 とある事情より、ソースの公開は廃⽌。
  11. 11. コンテナを 始めた経緯
  12. 12. 流⾏ってるよね
  13. 13. ECS使ってみたい
  14. 14. とりあえずのノリではなく 戦略とか狙いは ちゃんと持ってました。
  15. 15. ということで、 Dockerはじめました。
  16. 16. $ docker pull ubuntu
  17. 17. $ docker run -p 80:80 -it ubuntu:latest / bin/bash
  18. 18. root@b2cb619c8b64:/# apt-get -y update root@b2cb619c8b64:/# apt-get -y install nginx root@b2cb619c8b64:/# service nginx start
  19. 19. お、簡単そう
  20. 20. 開発環境の⽤意
  21. 21. ローカル開発と コンテナ
  22. 22. php-fpm Nginx Ubuntu(API) Mac(Docker Host) VirtualBox Laravel(API) Ubuntu(Backend) Laravel(Backend) MySQL(slave) redis(kvs master) MySQL(Master) php-fpm Nginx Ubuntu(Admin) Laravel(admin) redis(kvs slave) phpenv phpenv phpenv
  23. 23. Docker for Mac - 起動速い。 - 開発サーバのユーザー作成&管理がな い。
 特にExcel とか Google Spread Sheetは避 けたかった。 - Kitematic便利
  24. 24. 開発苦労話
  25. 25. Dockerfileの学習 - いろいろ変更するたびに開発者各⾃で
 docker runしてミドルウェアをセットアップして
 イメージ構築は不可能。 - phpのセットアップ - iniファイルの配置など - nginxのインストール - confファイルの配置など - php-fpmのインストール - aws cliのインストール - localeやtimezoneなどの設定 
 などなどをDockerfileでイメージを共通化させる必要がでた。
  26. 26. # aws cli RUN apt-get -y install python2.7 RUN ln -s /usr/bin/python2.7 /usr/bin/ python RUN wget https://bootstrap.pypa.io/get- pip.py RUN python get-pip.py RUN pip install awscli
  27. 27. docker-composeの学習 - ⼀回で同じ開発環境が起動できるように する必要がでた。 - 複数のDockerイメージを起動させる作業 が⾯倒。 - 特にMySQLのレプリカなどは、開発者で はできないことがある。そもそも⽅法⾃ 体をよく知らないとか普通。
  28. 28. 開発⽤イメージの 作成
  29. 29. イメージ作成がすごく遅い - パッケージのダウンロードが都度 - phpenvによる、コンパイルに実⾏
  30. 30. 変更の少ない部分を分ける php-fpm Nginx Ubuntu(API) Laravel(API) 変更前 phpenv
  31. 31. 変更後 php-fpm Nginx Ubuntu(API) phpenv API-Base Laravel(API) API-Base イメージを作成 Amazon ECRにプッシュ
  32. 32. 2つ試してみた - AWS CodeBuild + AWS CodePipeline → AWS ECRにプッシュ
 - Macでビルド → AWS ECRにプッシュ
  33. 33. AWS CodeBuild + AWS CodePipeline AWSでビルド⽤マシンが⽴ち上がり そこでビルドがかかる。 ubuntuイメージのダウンロードがあるた め、全体的にどうしても遅くなる。
  34. 34. Macでビルド → AWS ECRにプッシュ ubuntuイメージのダウンロードがなく キャッシュを利⽤するので早い。
  35. 35. DBデータの永続化
  36. 36. dockerを(が)停⽌すると DBのデータが吹っ⾶ぶ
  37. 37. docker-compose.ymlで 設定させる必要がある volumes: - "./local-storage/mysql:/var/lib/mysql:rw"
  38. 38. でも、レプリカの復旧とかは可能性がある ので reset slave; とかはできるようになる必要がある。
  39. 39. アプリケーションからの AWSへのアクセス
  40. 40. 開発サーバ⽴てて アサインしたEC2 Roleで やってくれるのが定常
  41. 41. docker-compose.ymlで こんな感じにすると⾏ける。 volumes: - ".aws:/root/.aws" - ".aws:/var/www/.aws"
  42. 42. アプリケーションロ グでエラーが発⽣
  43. 43. 原因 - Mac→コンテナへのアプリケーションコー ドのマウント - アプリケーションが吐き出すアプリログ がマウントとなり、Mac側に書き込みでき ないためエラー
  44. 44. docker-compose.ymlで こんな感じにすると⾏ける。 volumes: - "./app/api:/var/api" - "/var/api/storage"
  45. 45. コンテナイメージと AWSのインフラへのデプロイ
  46. 46. Blue/Green Deploy
  47. 47. https://aws.amazon.com/jp/blogs/news/bluegreen-deployments-with-amazon-ecs/
  48. 48. https://aws.amazon.com/jp/blogs/news/bluegreen-deployments-with-amazon-ecs/
  49. 49. Blue(ALBTarget) Green(ALBTarget) GleenBlue GleenBlue
  50. 50. Blue(ALBTarget) Green(ALBTarget) GleenBlue GleenBlue
  51. 51. Blue / Greenデプロイ で困ること
  52. 52. この前 どっちのデプロイだったか 忘れる
  53. 53. Blue(ALBTarget) Green(ALBTarget) GleenBlue GleenBlue
  54. 54. なので、⾊でやるのではなく 時系列にしましょう
  55. 55. 20171228 20180113 2018011320171228 2018011320171228
  56. 56. まとめ
  57. 57. - 開発環境はしっかりと準備しましょう。 - ECSはしっかりとデプロイまで設計を。
  58. 58. おまけ
  59. 59. 半年でふれたAWS EC2, S3, RDS Aurora For MySQL, ElastiCache, IAM, ALB, VPC, AWS Lambda, CloudWatch, CloudWatch Logs, CloudFront, CloudSearch,AWS Certificate Manager, SQS, Kinesis, Route 53, AWS Codebuild, AWS Codepipeline, AWS ECS, AWS ECR, AWS Batch, DynamoDB, Data pipeline

×