やばい
このままじゃコンテナ開発マンになってしまう
PHP8を試したよとかpython弄ったよとかって記事を書こうと思ったのにコンテナの方ばっかりいじってる気がする
背景
k8sのingressを試したかった が一番の目的
コンテナで管理していく時、nginxでrewriteとかlocationとか分けてphpやらpythonやらに飛ばしてる部分をもうserviceでrewriteしてfast-cgi://に直接飛ばしたほうがいいんじゃないかって思った
その前段階でdocker buildで作った自前コンテナをk8sでデプロイするまでをやったよ
という備忘録
まずはwin環境にk8sを入れる(DockerDesktopから)
Docker環境導入は前記事(Docker環境を作る)から
DockerDesktopからkubernetes入れられるのは便利ね
しかも設定からEnable Kubernetesにチェック入れるだけ
インストールできたら左下によく見るk8sのマークが入る

導入されたらそれだけでkubectlコマンドが使える(だったはず(曖昧))
はるか昔にminikube入れてたから使えてたかもしれない
cmd> kubectl get node
NAME STATUS ROLES AGE VERSION
docker-desktop Ready master 2d11h v1.19.7
docker-desktopというnodeが作られる
nodeにsshできるかなと思ったけど、見知らぬipが振られていたので、わからなかった
これはまた今度かな
xxxxxxxxxx
cmd> kubectl describe node docker-desktop | grep -A 2 Address
Addresses:
InternalIP: 192.168.yy.4
Hostname: docker-desktop
docker image作成
まず2種類のdocker imageを作る
前回(Docker環境を作る)のDocker環境テスト時と同様、特にいじる部分はなし
(多少のフォルダ構成は変えた)
xxxxxxxxxx
FROM nginx:alpine
COPY nginx/nginx.conf /etc/nginx/
COPY html/index.html /usr/share/nginx/html/
xxxxxxxxxx
<html>
<body>
<h1>Hello Nginx on Docker!</h1>
work on dokcer
</body>
</html>
これでdocker imageを作る
xxxxxxxxxx
cmd> docker build . -t tiny-nginx:0.1
→tiny-nginx:0.1を作成する
cmd> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
tiny-nginx 0.1 ec5ecaba6758 9 seconds ago 22.6MB
k8sでデプロイする
xxxxxxxxxx
apiVersion apps/v1
kind Deployment
metadata
name nginx-deployment
spec
selector
matchLabels
app nginx-label
replicas2
template
metadata
labels
app nginx-label
spec
containers
name tnginx
image tiny-nginx0.1
ports
containerPort80
---
apiVersion v1
kind Service
metadata
name nginx-service
spec
type ClusterIP
selector
app nginx-label
ports
name http
port8080
targetPort80
protocol TCP
xxxxxxxxxx
cmd> kubectl create ns dev
namespace/dev created
念の為namespace/devを作っておく
> kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service ClusterIP 10.99.233.150 <none> 8080/TCP 2d11h
cmd> kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-deployment-6465d9766d-6h6wn 1/1 Running 0 31s
nginx-deployment-6465d9766d-784ww 1/1 Running 0 33s
cmd> kubectl exec -n dev nginx-deployment-6465d9766d-6h6wn -- bash
OCI runtime exec failed: exec failed: container_linux.go:367: starting container process caused: exec: "bash": executable file not found in $PATH: unknown
command terminated with exit code 126
→bashは入っていないようだ
cmd> kubectl exec -it -n dev nginx-deployment-6465d9766d-6h6wn -- sh
/ # nginx -v
nginx version: nginx/1.19.10
/ # cat /usr/share/nginx/html/index.html
<!doctype html>
<html>
<body>
<h1>Hello Nginx on Docker!</h1>
work on dokcer
</body>
</html>
ちゃんとlocalで作成したdocker imageがデプロイできている
localでポート開放するためにはkubectl port-forward
で実施できるkubectl port-forward -n dev nginx-service 80:8080
だとnginx-serviceのpodを探してしまう
xxxxxxxxxx
cmd> kubectl port-forward -n dev service/nginx-service 80:8080
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80
■
→inputが戻らず待受状態になる
localhostへ接続

ちゃんとつながった
cmdにはアクセスが有った時Handling connection for 80
が表示される
戻るにはCtrl+C
まとめ
Docker Desktop for Windowsでビルドしたimageは、k8s(Docker Desktop for Windows)で直接使える
なんてことはない簡単だった