3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

テストで使いたくて,DinD (Docker in Docker) でk8sの環境を整えた

Posted at

TL;DR

事の経緯

  • Kubernetesを制御するツールを書きたい.
  • テストのために,KubernetesクラスタをホストPCに建てるの面倒だし,環境を汚したくない...
  • kind (kubernetes in docker) なるものを発見
  • しかし,アプリの開発をDocker内で行っていると,
    kindとアプリのコンテナは同一ネットワークに参加していないため,ネットワーク的に参照できないという問題が

クラスタを作るときにネットワークを指定する系のissueを見つけた

そこで,DinD (Docker in Docker)

クラスタの作成をホスト側でなく,コンテナ内のDockerで行うことによってネットワーク的に参照可能にする.

kind in DinD

FROM docker:dind
RUN apk --no-cache add curl
RUN curl -Lo /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind-$(uname)-amd64 && chmod +x /usr/local/bin/kind

kindでクラスタ作成 (Docker Deamonの起動を待つ必要あり)

以下をコンテナ内で実行すれば環境構築完了です!

# クラスタの作成
 kind create cluster
# KUBECONFIGに,作成したクラスタのkubeconfigパスを登録
 export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"

dindコンテナを立ち上げるときに詰まった点

  • 問題
    • docker run 時に,コマンドを渡すとdocker deamonが起動しなく,kindを実行できなかった
  • 解決策
    • docker run 実行後,execでコマンドを渡すようにする

まとめ

  • kubernetesの環境構築は,minikubeなりkindが,Dockerで構築するオプションを提供してくれていて非常に便利だなと思いました.お試しで気軽に建てるときには自分も重宝しようと思います.
  • DinDは初めて使いましたが,プロジェクトごとにDockerが作れるためホストから見たときのコンテナが散らからなくて管理しやすそうという印象です.
  • Kubernetesアプリとかプロバイダー作っている世の方々はテスト用のクラスタ構築とかどうされているのかなと気になりました.
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?