Slide 1

Slide 1 text

Dev Containersと Testcontainers TechFeed Experts Night # 2 8 〜 コンテナ技術最前線 〜 (2024/5/8) @bells 1 7

Slide 2

Slide 2 text

▶ @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

Slide 3

Slide 3 text

突然ですが、 みなさんはどこでをコンテナ利 用 していますか?

Slide 4

Slide 4 text

▶ ローカルの動作確認環境: Docker, Docker Composeなど ▶ CI/CD環境: GitHub Actions/CircleCIなどのCI環境上のCI/CD処理でのコンテナ利 用 ▶ 本番/検証環境など: KubernetesやECS、Cloud Runなどでのコンテナ利 用 一 般的によくコンテナを利 用 するであろう場所

Slide 5

Slide 5 text

▶ 開発環境: Dev Containers ← NEW ▶ ユニットテスト/インテグレーションテスト: Testcontainers ← NEW ▶ ローカルの動作確認環境: Docker, Docker Composeなど ▶ CI/CD環境: GitHub Actions/CircleCIなどのCI環境上のCI/CD処理でのコンテナ利 用 ▶ 本番/検証環境など: KubernetesやECS、Cloud Runなどでのコンテナ利 用 一 般的によくコンテナを利 用 するであろう場所

Slide 6

Slide 6 text

ということで今 日 のお話 ▶ Dev Containersの紹介 ▶ Testcontainersの紹介

Slide 7

Slide 7 text

Dev Containers

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

https://containers.dev/overview より Dev Containers的にはこんな感じの利 用 を想定してるよう

Slide 10

Slide 10 text

使い 方 : devcontainer.jsonを作る

Slide 11

Slide 11 text

デモ1: Docker Composeを使ったWebアプリ開発環境 https://github.com/bells 1 7 /compose- devcontainer-example

Slide 12

Slide 12 text

デモ2: 大 規模ソフトウェア開発環境 https://github.com/kubernetes/kubernetes/ pull/ 1 2 4 5 8 4

Slide 13

Slide 13 text

主な機能 & 使い 方 紹介

Slide 14

Slide 14 text

利 用 できるコンテナ ▶ 利 用方 式 ▶ 単 一 コンテナ(作成イメージを利 用 ) ▶ 単 一 コンテナ(Docker fi leを使ったビルドイメージを利 用 ) ▶ Docker Composeによるコンテナグループ ▶ コンテナイメージ ▶ 特に制限は無いが、公式イメージはubuntu/alpineをベースにしてる ▶ ターミナルも触ると思うのでbashなどがインストールされていると良い

Slide 15

Slide 15 text

プラグイン機能(features) ▶ featuresとは? ▶ シェルスクリプトを使って各種ツールのインストールなどを 行 うプラグイン機能 ▶ リポジトリ内でプロジェクト向けのfeaturesを作成して利 用 することも可能 ▶ 主なfeatures ▶ common-utils ← とりあえずこれ必須 ▶ AWS CLI ▶ NVIDIA CUDA ▶ Docker in Docker ▶ Fish ▶ Ansible ▶ etc …

Slide 16

Slide 16 text

Lifecycle scripts ▶ Dev Containersの作成などの各種タイミングで実 行 できるスクリプト ▶ featuresやLifecycle scriptsを使うことでベースイメージに 手 を加えなくても必要なツールなど を 自 動でセットアップできる ▶ Lifecycle scripts 一 覧: ▶ initializeCommand: コンテナの作成中およびその後の起動時を含む、初期化中 ▶ onCreateCommand: 開発コンテナの作成時 ▶ updateContentCommand: onCreateCommand作成プロセス中にソース ツリーで 新しいコンテンツが利 用 可能になった後 ▶ postCreateCommand: devcontainerがユーザーに初めて割り当てられた後 ▶ postStartCommand: コンテナが正常に起動されるたび ▶ postAttachCommand: ツールがコンテナに正常に接続されるたび

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Dev Containersについて詳しく知りたい 人 は ▶ 下記を 見 てみるのが良さそう ▶ 公式サイト: https://containers.dev/ ▶ 仕様: https://github.com/devcontainers/spec ▶ リファレンス実装: https://github.com/devcontainers/cli

Slide 19

Slide 19 text

Testcontainers

Slide 20

Slide 20 text

Testcontainersの概要 ▶ 主にユニットテストやインテグレーションテスト内でコンテナの起動管理を 行 うための ライブラリ ▶ ユニットテストやインテグレーションテストの各セットアッププロセスなどで 手 軽にコンテナ を起動~対象テスト終了時にコンテナを停 止 などができるためユニットテストなどで、モック などを使 用 しなくても実際のDBなどを使 用 して 手 軽にテストが実 行 できるようになる ▶ 少し前にTestcontainersの開発元のAtomicJar社がDocker社に買収されて話題になった ▶ 現在ライブラリが提供されている 言 語は下記: ▶ Java/Go/.NET/Python/Rust/Haskell/Ruby/Clojure/Elixier/Node.js/Scala/C/C++

Slide 21

Slide 21 text

デモ https://github.com/testcontainers/tc-guide- getting-started-with-testcontainers-for-go

Slide 22

Slide 22 text

Testcontainersのメリット ▶ こんな感じで1つのテスト内で 手 軽にコンテナを 立 ててテストしてコンテナを消して というのがサクッとできるので便利 (実 行 時間の問題は発 生 すると思うのでそのあたりのバランスは必要そう) ▶ テスト個別でコンテナの起動管理ができるので、テストの並列実 行 などもお 手 軽に可能 (テストやデータの依存関係を気にしなくて良い) ▶ モジュール機能によってよく使うコンテナを簡単に設定できる ▶ MySQL/PostgresSQL/Redisなどよく使うコンテナを簡単に使えるようにパッケージ化

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

Dev Containersと Testcontainersはいいぞ!

Slide 25

Slide 25 text

詳しい内容はこちらにまとめてます

Slide 26

Slide 26 text

デモなどの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

Slide 27

Slide 27 text

参考資料 ▶ 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

Slide 28

Slide 28 text

画像引 用 元 ▶ https://github.com/devcontainers/devcontainers.github.io/blob/gh-pages/img/devcontainers-logo.png ▶ https://twitter.com/testcontainers/photo ▶ https://containers.dev/overview

Slide 29

Slide 29 text

Thanks / Question? ▶ @bells 1 7 ▶ Slide: https://speakerdeck.com/bells 1 7 ▶ @bells 1 7 _