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

開発環境から本番環境までのDocker活用方法 / Fintech Engineer 20210604

開発環境から本番環境までのDocker活用方法 / Fintech Engineer 20210604

Takamichi Aso

June 04, 2021
Tweet

More Decks by Takamichi Aso

Other Decks in Programming

Transcript

  1. 自己紹介
 クレジットエンジン株式会社
 麻生 隆道(あそう たかみち)
 
 • バックエンド・フロントエンド・インフラを担 当
 •

    副業からジョインし、現在はCTOをやって ます
 • 前職は12年ほど組み込みエンジニアやっ てました
 2
  2. アジェンダ
 • 会社・プロダクトの紹介
 ◦ 技術スタックの紹介
 • 開発環境での Docker 利用事例
 ◦

    良かったこと
 ◦ つまづいたこと
 ◦ 悪かったこと
 • 本番環境での Docker 利用事例
 ◦ 良かったこと
 ◦ 悪かったこと
 • 他にやっていることを紹介

  3. 各種環境について
 資料の中で出てくる各種環境について説明しておきます
 • 開発環境
 ◦ ローカルマシンで構築した開発用の環境
 • ステージング環境
 ◦ 本番リリース前の動作検証用にAWSに構築している環境


    • 本番環境
 ◦ 実際のサービスが稼働している環境
 • デモ環境
 ◦ 営業用に触ってもらうための環境
 • レビュー用環境
 ◦ PM・デザイナーがレビューする際に動作確認できる環境

  4. Docker導入でつまづいたこと
 つまづいたこと②:イメージのプッシュ漏れが多発
 • パッケージ追加・アップデートの際はビルドしてプッシュする運用にしていた が、だいたいみんな忘れる😁
 • メンバーが増えたときに IAM を発行するのもめんどくさい
 •

    やはり、根本のビルド遅い問題を解決する必要がある
 • 原因はベースイメージに Alpine Linux を選択していたため、numpy や pandas などのパッケージを毎回ビルドしてしまっていた
 
 ベースイメージに Debian を選択することで回避できました

  5. Docker導入でつまづいたこと
 つまづいたこと③:フロントエンドの node_modules ディレクトリ問題
 • 開発環境なのでソースを変更したらホットリロードで即座に反映してほしい ので、volumes でローカルのディレクトリをマウント
 • npm

    install で作成される node_modules ディレクトリまでコンテナ内に共 有される • ローカルの node_modules はMac用のバイナリが入っていて動かない 
 node_modules は data volume としてマウントして回避 (詳しい説明は割愛しますが Google などで検索すると出てきます)

  6. Docker導入で悪かったこと
 悪かったこと①:デバッグ手順が煩雑になった
 • ローカルで Django を起動している場合は VS Code でブレークポイントを 設定するだけでデバッグできていた


    • コンテナ内にいるとブレークポイントが効かない
 • サーバサイドのデバッグは同様の問題があると思います
 
 止めたい箇所に breakpoint() を入れて実行後に docker attach でデバッ ガを動かせます(けど、使いづらいです💦)

  7. Docker導入で悪かったこと
 悪かったこと②:動作が重い
 • Docker Desktop for Mac 特有の問題だとは思いますが、重いです • 今のところ回避策はないので

    Windows / Linux を使うほうがパフォーマン スは良いです • Apple Silicon だと解消しているかもですが、Docker イメージの ARM 版がない時があるのでお気をつけください
  8. 本番環境向けのイメージ作成でやったこと
 本番環境向けにはいくつかやらなければいけないことがあります
 • コンテナ内に脆弱性がないかチェックする必要がある
 ◦ Trivy
 ▪ OSのライブラリや各言語のパッケージに脆弱性が残ってないかをチェックして くれる
 ◦

    Dockle
 ▪ Dockerfileの書き方に脆弱性がないかチェックしてくれる
 • 本番でしか使えないサービスをローカルで動かす必要がある
 ◦ LocalStack
 ▪ AWSの各種サービスのモック
 ◦ maildev
 ▪ メールサーバのモック

  9. AWSでコンテナを動かすためには
 AWS上でコンテナを動かすための選択肢
 • EC2上でDockerを動かす
 • ECS / EC2
 ◦ ECSでオーケストレーション


    ◦ 実際に動作する環境はEC2上
 • ECS / Fargate ← この環境を採用しています
 ◦ 実際に動作する環境はAWSのマネージド環境
 • EKS / EC2
 ◦ Kubernetesでオーケストレーション
 • EKS / Fargate
 ◦ 検討した当初はなかったので未検討

  10. インフラ構成管理ツールについて
 Infrastructure as Code(IaC)のツールでは Terraform がよく使われています が、クレジットエンジンでは AWS CDK を採用しています


    良かったこと
 • インフラ専任メンバーは居ないので、書きなれたプログラミング言語で書け る
 • デフォルトで設定がベストプラクティスに基づいて構築してくれるので、他の IaCツールと比べるとコード量が少ない
 悪かったこと
 • 頻繁に変更が入るので、一度構築したら触りたくないという方には向かな い(私はそんなに気にならない)

  11. この先やってみたいこと
 • AWS App Runner が発表されたので試してみたい
 ◦ コンテナ化されたアプリケーションが今までよりも簡単・迅速にデプロイ できるらしいです
 ◦

    今日のために試そうと思ってましたが時間取れず・・・
 
 • AWS以外のクラウド利用
 ◦ 金融機関では Azure も利用されるケースが多いので、Azure で気軽に コンテナ運用できるように環境づくりをしてみたいです