Closed12

hyperkit + minikubeでdocker試してみる

Futa HirakobaFuta Hirakoba
❯ minikube start            

😄  Darwin 11.3 上の minikube v1.23.0
✨  hyperkitドライバーが自動的に選択されました。他の選択肢:  virtualbox, ssh
💿  VM ブートイメージをダウンロードしています...
    > minikube-v1.23.0.iso.sha256: 65 B / 65 B [-------------] 100.00% ? p/s 0s
    > minikube-v1.23.0.iso: 229.15 MiB / 229.15 MiB [ 100.00% 12.28 MiB p/s 19s
👍  コントロールプレーンのノード minikube を minikube 上で起動しています
💾  Kubernetes v1.22.1 のダウンロードの準備をしています
    > preloaded-images-k8s-v12-v1...: 515.04 MiB / 515.04 MiB  100.00% 45.85 Mi
🔥  hyperkit VM (CPUs=2, Memory=6000MB, Disk=20000MB) を作成しています...
❗  This VM is having trouble accessing https://k8s.gcr.io
💡  To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳  Docker 20.10.8 で Kubernetes v1.22.1 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ Control Plane を起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ イメージ gcr.io/k8s-minikube/storage-provisioner:v5 を使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass
🏄  完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました

6GB取られたよ

Futa HirakobaFuta Hirakoba
minikube config set cpus 2
minikube config set memory 4000GB
minikube config set driver hyperkit
❯ minikube config view               

- cpus: 2
- driver: hyperkit
- memory: 4000MB

明示的に設定した

Futa HirakobaFuta Hirakoba

minikube docker-envでdockerの環境変数周り出してくれるんだな

❯ minikube docker-env
minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.64.34:2376"
export DOCKER_CERT_PATH="/Users/korosuke613/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"

# To point your shell to minikube's docker-daemon, run:
# eval $(minikube -p minikube docker-env)
Futa HirakobaFuta Hirakoba

まずevalする

❯ eval $(minikube docker-env)

docker叩いてみる

~ 
❯ docker ps                  

CONTAINER ID   IMAGE                  COMMAND                  CREATED              STATUS              PORTS     NAMES
52a670fdf08a   8d147537fb7d           "/coredns -conf /etc…"   43 seconds ago       Up 41 seconds                 k8s_coredns_coredns-78fcd69978-9jw49_kube-system_0618c5c9-e5c0-49a7-bf1c-86b4558fabe3_0
ff390db3dcf4   6e38f40d628d           "/storage-provisioner"   43 seconds ago       Up 42 seconds                 k8s_storage-provisioner_storage-provisioner_kube-system_41c2ac4e-6c0f-4dd0-a40d-6e65fa2ff284_0
2b2fb8b95afd   k8s.gcr.io/pause:3.5   "/pause"                 43 seconds ago       Up 42 seconds                 k8s_POD_coredns-78fcd69978-9jw49_kube-system_0618c5c9-e5c0-49a7-bf1c-86b4558fabe3_0
4b5ab4aaacc9   36c4ebbc9d97           "/usr/local/bin/kube…"   44 seconds ago       Up 42 seconds                 k8s_kube-proxy_kube-proxy-pxvbt_kube-system_bd932ca2-06d2-4776-ab0e-48aef1ca7967_0
...

いとも簡単にdocker使えたじゃん。
kubernetes関連コンテナだらけだけど

Futa HirakobaFuta Hirakoba

なんかネットワーク周りがおかしい?

❯ docker pull hello-world    
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 192.168.64.1:53: read udp 192.168.64.34:42498->192.168.64.1:53: read: connection refused
Futa HirakobaFuta Hirakoba

no_proxyにminikubeのアドレス追加したら行けた

❯ docker run hello-world                                                                 
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
Futa HirakobaFuta Hirakoba

-vが機能してない?

❯ ls
 Dockerfile   docker-compose.yaml   test.sh

❯ docker run -v $(PWD):/work -it ubuntu bash
root@18d9504d80aa:/# ls /work
root@18d9504d80aa:/# 
root@18d9504d80aa:/# 
Futa HirakobaFuta Hirakoba

minikube mountしないといけないらしい
https://github.com/kubernetes/minikube/issues/2481#issuecomment-469736193

❯ minikube mount $PWD:$PWD 
📁  Mounting host path /Users/korosuke613/ghq/github.com/korosuke613/playground/docker/compose into VM as /Users/korosuke613/ghq/github.com/korosuke613/playground/docker/compose ...
    ▪ マウントタイプ:   
    ▪ ユーザー ID:      docker
    ▪ グループ ID:     docker
    ▪ バージョン:      9p2000.L
    ▪ メッセージのサイズ: 262144
    ▪ Permissions:  755 (-rwxr-xr-x)
    ▪ Options:      map[]
    ▪ アドレスをバインドします: 192.168.64.1:59270
🚀  Userspace file server: ufs starting
✅  Successfully mounted /Users/korosuke613/ghq/github.com/korosuke613/playground/docker/compose to /Users/korosuke613/ghq/github.com/korosuke613/playground/docker/compose

📌  NOTE: This process must stay alive for the mount to be accessible ...
❯ docker run -v $(PWD):/work -it ubuntu bash
root@8f0e6eac359f:/# ls /work
Dockerfile  docker-compose.yaml  test.sh

-v使えたっちゃ使えたきたけど

Futa HirakobaFuta Hirakoba

.zshrcで以下のような処理を書けば良さげか?

  1. minikubeの起動(--mountする)
    • minikube start --mount-string="/Users/$USER/ghq:/Users/$USER/ghq"
  2. eval $(minikube docker-env)の実行
  3. no_proxyにminikube ipを追加
このスクラップは2022/05/08にクローズされました