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

Dev ContainersとTestcontainers

Dev ContainersとTestcontainers

TechFeed Experts Night#28 〜 コンテナ技術最前線 〜で登壇したセッションの資料です。
https://techfeed.io/events/techfeed-experts-night-28

bells17

May 08, 2024
Tweet

More Decks by bells17

Other Decks in Programming

Transcript

  1. Dev Containersと Testcontainers TechFeed Experts Night # 2 8 〜

    コンテナ技術最前線 〜 (2024/5/8) @bells 1 7
  2. ▶ @bells 1 7 ▶ Software Engineer@ 3 -shake inc.

    ▶ kubernetes org member ▶ Kubernetes Internal Organizer ▶ Kubernetes Novice Tokyo Organizer ▶ #kubenews ▶ X(Twitter): @bells 1 7 _ ▶ GitHub: @bells 1 7
  3. ▶ ローカルの動作確認環境: Docker, Docker Composeなど ▶ CI/CD環境: GitHub Actions/CircleCIなどのCI環境上のCI/CD処理でのコンテナ利 用

    ▶ 本番/検証環境など: KubernetesやECS、Cloud Runなどでのコンテナ利 用 一 般的によくコンテナを利 用 するであろう場所
  4. ▶ 開発環境: Dev Containers ← NEW ▶ ユニットテスト/インテグレーションテスト: Testcontainers ←

    NEW ▶ ローカルの動作確認環境: Docker, Docker Composeなど ▶ CI/CD環境: GitHub Actions/CircleCIなどのCI環境上のCI/CD処理でのコンテナ利 用 ▶ 本番/検証環境など: KubernetesやECS、Cloud Runなどでのコンテナ利 用 一 般的によくコンテナを利 用 するであろう場所
  5. Dev Containersの概要 ▶ エディタと連携するランタイムやLanguage Server Protocol(LSP)などを含めた開発環境を まるっとコンテナで動かせちゃうやつ ▶ 元々はVS Code

    Remote Developmentのパッケージの1つだった ▶ 現在はLSPのようにVS Codeとは独 立 した仕様になっている (ただし現段階ではGitHub上のorg memberは全員 Microsoft/GitHub で構成されてる) ▶ 現在は主に下記の環境で利 用 可能 + エディタ: VS Code/Visual Studio/JetBrains IntelliJ IDEA + リモート開発環境提供SaaSなど: GitHub Codespaces/coder/devenv/devbox/CodeSandbox + その他: devcontainers cli
  6. 利 用 できるコンテナ ▶ 利 用方 式 ▶ 単 一

    コンテナ(作成イメージを利 用 ) ▶ 単 一 コンテナ(Docker fi leを使ったビルドイメージを利 用 ) ▶ Docker Composeによるコンテナグループ ▶ コンテナイメージ ▶ 特に制限は無いが、公式イメージはubuntu/alpineをベースにしてる ▶ ターミナルも触ると思うのでbashなどがインストールされていると良い
  7. プラグイン機能(features) ▶ featuresとは? ▶ シェルスクリプトを使って各種ツールのインストールなどを 行 うプラグイン機能 ▶ リポジトリ内でプロジェクト向けのfeaturesを作成して利 用

    することも可能 ▶ 主なfeatures ▶ common-utils ← とりあえずこれ必須 ▶ AWS CLI ▶ NVIDIA CUDA ▶ Docker in Docker ▶ Fish ▶ Ansible ▶ etc …
  8. Lifecycle scripts ▶ Dev Containersの作成などの各種タイミングで実 行 できるスクリプト ▶ featuresやLifecycle scriptsを使うことでベースイメージに

    手 を加えなくても必要なツールなど を 自 動でセットアップできる ▶ Lifecycle scripts 一 覧: ▶ initializeCommand: コンテナの作成中およびその後の起動時を含む、初期化中 ▶ onCreateCommand: 開発コンテナの作成時 ▶ updateContentCommand: onCreateCommand作成プロセス中にソース ツリーで 新しいコンテンツが利 用 可能になった後 ▶ postCreateCommand: devcontainerがユーザーに初めて割り当てられた後 ▶ postStartCommand: コンテナが正常に起動されるたび ▶ postAttachCommand: ツールがコンテナに正常に接続されるたび
  9. dot fi les ▶ Dev Containersに各ユーザー独 自 のカスタム設定を加えたいようなケースではdot fi lesを利

    用 するケースが多いよう ▶ ただしサポート状況はツールによる ▶ dot fi lesをサポートする主なツール ▶ Devcontainers cli ▶ VSCode ▶ GitHub Codespaces ▶ coder ▶ Dev Containers 用 のdoftilesの例: https://github.com/bells 1 7 /devcontainers-dot fi les
  10. Dev Containersについて詳しく知りたい 人 は ▶ 下記を 見 てみるのが良さそう ▶ 公式サイト:

    https://containers.dev/ ▶ 仕様: https://github.com/devcontainers/spec ▶ リファレンス実装: https://github.com/devcontainers/cli
  11. Testcontainersの概要 ▶ 主にユニットテストやインテグレーションテスト内でコンテナの起動管理を 行 うための ライブラリ ▶ ユニットテストやインテグレーションテストの各セットアッププロセスなどで 手 軽にコンテナ

    を起動~対象テスト終了時にコンテナを停 止 などができるためユニットテストなどで、モック などを使 用 しなくても実際のDBなどを使 用 して 手 軽にテストが実 行 できるようになる ▶ 少し前にTestcontainersの開発元のAtomicJar社がDocker社に買収されて話題になった ▶ 現在ライブラリが提供されている 言 語は下記: ▶ Java/Go/.NET/Python/Rust/Haskell/Ruby/Clojure/Elixier/Node.js/Scala/C/C++
  12. Testcontainersのメリット ▶ こんな感じで1つのテスト内で 手 軽にコンテナを 立 ててテストしてコンテナを消して というのがサクッとできるので便利 (実 行

    時間の問題は発 生 すると思うのでそのあたりのバランスは必要そう) ▶ テスト個別でコンテナの起動管理ができるので、テストの並列実 行 などもお 手 軽に可能 (テストやデータの依存関係を気にしなくて良い) ▶ モジュール機能によってよく使うコンテナを簡単に設定できる ▶ MySQL/PostgresSQL/Redisなどよく使うコンテナを簡単に使えるようにパッケージ化
  13. デモなどのURL 一 覧 ▶ Dev Containers ▶ Dev Containers調査まとめ1: https://zenn.dev/bells

    1 7 /articles/devcontainer- 2 0 2 4 ▶ Dev Containers調査まとめ2: https://zenn.dev/bells 1 7 /scraps/ ff 6 6 8 ea 8 9 cb 5 2 d ▶ Docker ComposeによるDev Containerサンプル: https://github.com/bells 1 7 /compose-devcontainer-example ▶ KubernetesへのDev Container導 入 PR: https://github.com/kubernetes/kubernetes/pull/ 1 2 1 5 6 1 ▶ Dev Containers向けdot fi les設定例: https://github.com/bells 1 7 /devcontainers-dot fi les ▶ Testcontainers ▶ Testcontainers調査結果まとめ: https://zenn.dev/bells 1 7 /scraps/ 0 fe 4 0 fa 3 c 1 fed 0 ▶ testcontainers-goサンプル1: https://github.com/testcontainers/tc-guide-getting-started-with-testcontainers-for-go ▶ testcontainers-goサンプル2: https://github.com/AtomicJar/testcontainers-cloud-go-example
  14. 参考資料 ▶ Dev Containers ▶ https://containers.dev/ ▶ https://github.com/devcontainers/spec ▶ https://github.com/devcontainers/cli

    ▶ https://github.com/devcontainers/images ▶ https://github.com/devcontainers/features ▶ https://github.com/devcontainers/templates ▶ https://code.visualstudio.com/docs/remote/remote-overview ▶ https://code.visualstudio.com/docs/devcontainers/containers ▶ https://code.visualstudio.com/docs/remote/vscode-server ▶ https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials ▶ https://docs.github.com/en/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account ▶ https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-speci fi c-secrets-for-github-codespaces ▶ Testcontainers ▶ https://testcontainers.com/ ▶ https://github.com/testcontainers/testcontainers-go ▶ https://golang.testcontainers.org/ ▶ https://www.atomicjar.com/ 2 0 2 3 / 1 2 /atomicjar-is-now-part-of-docker/ ▶ https://www.docker.com/blog/docker-whale-comes-atomicjar-maker-of-testcontainers/ ▶ https://www.redhat.com/en/blog/improving-developer-experience-testcontainers-and-openshift ▶ https://www.docker.com/ja-jp/blog/docker-whale-comes-atomicjar-maker-of-testcontainers/ ▶ https://www.publickey 1 .jp/blog/ 2 3 /dockertestcontainersatomicjardocker.html