Skaffoldで爆速反映(File Sync)できるようになってた
概要
こちらの記事に全て書いてありましたが
嬉しくなったので自分もメモしておく😀
Minikube + Skaffoldでローカル環境の構築は何年か前からやってみてはいたけど
ファイル編集の度にリビルドしてデプロイされるプロセスはやはり時間がかかる・・・
「docker composeでvolume mountの方が良くないっすか?」
の声に勝てないなぁ。。。とモヤモヤしてましたが
久しぶりに触ってみたらvolume mountばりに早く反映できるようになってた👴🏻
設定ファイル
やり方とっても簡単!
skaffoldの設定ファイルにsyncを追加して対象ファイルを指定するだけ
以下はStorybookとNext.jsのアプリをリビルド・デプロイさせずに反映させる設定。
個別にファイルを指定することもできるけど
全ファイル反映されるように**/*
を指定
コンテナ内ではnext dev
やbuild-storybook
がされており
ファイルの中身が変わると変更が画面にも反映される状態!!!
apiVersion: skaffold/v2beta21
kind: Config
build:
artifacts:
- image: docker.io/ucwork/capital-farm-storybook
context: ../../src/capital-farm/web/
sync:
infer:
- '**/*'
docker:
dockerfile: ./storybook.Dockerfile
- image: docker.io/ucwork/capital-farm-web
context: ../../src/capital-farm/web/
sync:
infer:
- '**/*'
deploy:
kubectl:
manifests:
- "./capital-farm/storybook/deployment.yaml"
- "./capital-farm/web/deployment.yaml"
展開されてるDockerfileはそれぞれこんな感じ。
マルチステージビルドしてる場合は最後のfrom内でFile Syncが反映される
↓Storybook
# Install dependencies only when needed
FROM node:14.18.1-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Rebuild the source code only when needed
FROM node:14.18.1-alpine AS builder
EXPOSE 6006
USER node
RUN mkdir /home/node/capitel-farm
WORKDIR /home/node/capitel-farm
COPY /app/node_modules ./node_modules
COPY . .
CMD ["yarn", "storybook"]
↓Next.js
# Install dependencies only when needed
FROM node:14.18.1-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Rebuild the source code only when needed
FROM node:14.18.1-alpine AS builder
EXPOSE 3000
USER node
RUN mkdir /home/node/capitel-farm
WORKDIR /home/node/capitel-farm
COPY /app/node_modules ./node_modules
COPY . .
CMD ["yarn", "dev"]
反映されるとこ
この状態でskaffold dev
して
適当なファイルを編集するとこんな感じでビルド・デプロイは走らず
ファイルの中身だけ変更される!!
(skaffold run
では反映されません
実際にStorybookやNext.jsの対象ページにアクセスすると
修正した内容が反映されてました!!!
まとめ
ローカルKubernetes環境での開発は
まさしくそのまま本番にも持ってけるので気に入ってましたが
どうも修正内容の反映時間問題で
docker-compose組に強く言えない時間が続いてましたが
File Syncのおかげで力強く押していけそう🏄♂️
Discussion