はじめに
以下記事の続きです。
本記事では実際にskaffoldを利用してみます。
skaffoldを利用しない場合
例えばnginxのウェルカムページに差し替えるために用意している「nginx-welcome.html」を修正したとします。
そうするとイメージを更新する必要があるので以下のようにビルドを行い
> docker build -t mynginx . > docker image ls ...
以下のようにポッドやサービスを落とし上げをして
> kubectl apply -f .\nginx-deployment.yaml > kubectl apply -f .\nginx-service.yaml
初めて修正が反映されます。
$ curl http://localhost:30080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx! Hoge!!</title> ...
skaffoldを利用する場合
上記でやった一連の流れが修正をトリガーに自動的に行われてユーザは何も行わずともポッド/サービスが反映済みとなります。
skaffoldは以下コマンドで起動します。
> skaffold dev
そうすると以下のようにおなじみの出力が流れて
[34mListing files to watch...[0m [34m - mynginx [0m[34mGenerating tags...[0m [34m - mynginx -> [0mmynginx:a2697be-dirty [34mChecking cache...[0m [34m - mynginx: [0m[33mNot found. Building[0m [34mFound [docker-desktop] context, using local docker daemon. [0m[34mBuilding [mynginx]... [0mSending build context to Docker daemon 3.584kB Step 1/2 : FROM nginx:1.7.9 ---> 84581e99d807 Step 2/2 : COPY --chown=1001:0 nginx-welcome.html /usr/share/nginx/html/index.html ---> 2ba34789f30f Successfully built 2ba34789f30f Successfully tagged mynginx:a2697be-dirty [34mTags used in deployment:[0m [34m - mynginx -> [0mmynginx:2ba34789f30f261d8258fb47d496e55eb62dd71088df93d7e6a669ba1d6db073 [32m local images can't be referenced by digest. They are tagged and referenced by a unique ID instead[0m [34mStarting deploy..[0m - deployment.apps/nginx-deployment created - service/nginx created [33mWatching for changes...
「Watching for changes」で止まります。
skaffoldを起動後、展開済のPodを見るとskaffoldに関するラベルが付与されます。このlabelでskaffoldの管理下に入るようです。
Labels: app=nginx , app.kubernetes.io/managed-by=skaffold-v1.3.1 ...
ここで試しにnginx-welcome.htmlを修正すると
[34mGenerating tags...[0m [34m - mynginx -> [0mmynginx:a2697be-dirty [34mChecking cache...[0m [34m - mynginx: [0m[33mNot found. Building[0m [34mFound [docker-desktop] context, using local docker daemon. [0m[34mBuilding [mynginx]... [0mSending build context to Docker daemon 3.584kB Step 1/2 : FROM nginx:1.7.9 ---> 84581e99d807 Step 2/2 : COPY --chown=1001:0 nginx-welcome.html /usr/share/nginx/html/index.html ---> 7e5e2114e396 Successfully built 7e5e2114e396 Successfully tagged mynginx:a2697be-dirty [34mTags used in deployment:[0m [34m - mynginx -> [0mmynginx:7e5e2114e396845da4dce25dee37cf89eb1f3cfba802e7d0937f45fff943f218 [32m local images can't be referenced by digest. They are tagged and referenced by a unique ID instead[0m [34mStarting deploy...[0m - deployment.apps/nginx-deployment configured [33mWatching for changes...[0m
curlコマンドの結果も変更になっています。
補足
Dockerfile無しで同コマンドを利用すると以下のようにエラーとなりました。
level=fatal msg="watching files for artifact nginx: listing files: listing files: opening dockerfile: C:\\..\\Dockerfile: open C:\\..\\Dockerfile: The system cannot find the file specified.
skaffold.yamlにDockerfileを指定せずとも修正を検知しているのはデフォルトで同ディレクトリ配下を探しに行っているからだと考えられます。
また、skaffold.yamlにyamlファイルを指定しないとコードを修正してもapplyが行われません。
終わりに
git clone
で落としてくると大量のサンプルが手に入りますが、今回はせっかくなので自作してテストを行いました。
詳細な動き方はつかめていないところはあるので、もう少し遊んでみて新たな知見が分かれば別途記事にしたいと思います。
以上、ご参考になれば幸いです。