🦔

Skaffoldで爆速反映(File Sync)できるようになってた

2021/11/07に公開

概要

こちらの記事に全て書いてありましたが
嬉しくなったので自分もメモしておく😀
https://qiita.com/murata-tomohide/items/dd48b6db58fd9326a1e2

Minikube + Skaffoldでローカル環境の構築は何年か前からやってみてはいたけど
ファイル編集の度にリビルドしてデプロイされるプロセスはやはり時間がかかる・・・

「docker composeでvolume mountの方が良くないっすか?」
の声に勝てないなぁ。。。とモヤモヤしてましたが
久しぶりに触ってみたらvolume mountばりに早く反映できるようになってた👴🏻

設定ファイル

やり方とっても簡単!
skaffoldの設定ファイルにsyncを追加して対象ファイルを指定するだけ

以下はStorybookとNext.jsのアプリをリビルド・デプロイさせずに反映させる設定。
個別にファイルを指定することもできるけど
全ファイル反映されるように**/*を指定

コンテナ内ではnext devbuild-storybookがされており
ファイルの中身が変わると変更が画面にも反映される状態!!!

skaffold.yaml
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

./storybook.Dockerfile
# 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 --from=deps --chown=node:node /app/node_modules ./node_modules

COPY --chown=node:node . .
CMD ["yarn", "storybook"]

↓Next.js

./Dockerfile
# 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 --from=deps --chown=node:node /app/node_modules ./node_modules

COPY --chown=node:node . .
CMD ["yarn", "dev"]

反映されるとこ

この状態でskaffold devして
適当なファイルを編集するとこんな感じでビルド・デプロイは走らず
ファイルの中身だけ変更される!!
skaffold runでは反映されません

実際にStorybookやNext.jsの対象ページにアクセスすると
修正した内容が反映されてました!!!

まとめ

ローカルKubernetes環境での開発は
まさしくそのまま本番にも持ってけるので気に入ってましたが

どうも修正内容の反映時間問題で
docker-compose組に強く言えない時間が続いてましたが
File Syncのおかげで力強く押していけそう🏄‍♂️

Discussion