ã³ã³ããã20å以äžç«ã¡äžãã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåæãã«ãã«éåžžã«æéããããããšããããŸãããã®èšäºã§ã¯ãåæãã«ãæéãççž®ããããã®å ·äœçãªææ³ãšããã®å®è£ äŸã玹ä»ããŸãã
ð ç®æ¬¡
- ã¯ããã«
- 1. Dockerfileã®æé©åãšãã«ãã¹ããŒãžãã«ã
- 2. Dockerãã«ããã£ãã·ã¥ã®æå¹æŽ»çš
- 3. 䞊åãã«ãã®æŽ»çš
- 4. å ±éããŒã¹ã€ã¡ãŒãžã®å©çš
- 5. ã€ã¡ãŒãžã¬ãžã¹ããªã®æŽ»çš
- ãŸãšã
ã¯ããã«
ã³ã³ããç°å¢ã§è€æ°ã®ãµãŒãã¹ãéçšããéãåãµãŒãã¹ã®ã€ã¡ãŒãžããŒããããã«ããããšéåžžã«æéãããããŸãã
ããã§ã以äžã®åãçµã¿ã«ããåæãã«ãæéã倧å¹
ã«ççž®ããæ¹æ³ã解説ããŸãã
1. Dockerfileã®æé©åãšãã«ãã¹ããŒãžãã«ã
ð ã¬ã€ã€ãŒæ§é ã®æé©å
Dockerfileã¯ååœä»€ããšã«ã¬ã€ã€ãŒãäœæãããŸãã
é »ç¹ã«å€æŽãããªãéšåïŒäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ãªã©ïŒãå
é ã«é
眮ããããšã§ãã£ãã·ã¥ãæå¹ã«ãªããåãã«ãæéã倧å¹
ã«ççž®ã§ããŸãã
äŸïŒGoã¢ããªã±ãŒã·ã§ã³ã®Dockerfile
# ãã«ãã¹ããŒãž
FROM golang:1.18-alpine AS builder
WORKDIR /app
# äŸåé¢ä¿ãã¡ã€ã«ã ããå
ã«ã³ããŒããŠãã£ãã·ã¥ã掻çš
COPY go.mod go.sum ./
RUN go mod download
# ãœãŒã¹ã³ãŒããã³ããŒ
COPY . .
# ãã€ããªã®ãã«ãïŒCGOç¡å¹åïŒ
RUN CGO_ENABLED=0 go build -o main .
# æçµã¹ããŒãžïŒäžèŠãªãã«ãããŒã«ãé€å€ïŒ
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
ð¡ ãã«ãã¹ããŒãžãã«ãã®ã¡ãªãã
- äžèŠãªããŒã«ãé€å€ã§ãããããæçµã€ã¡ãŒãžã®ãµã€ãºãå°ãããªããŸãã
- ãã£ãã·ã¥ã®æå¹æŽ»çšã«ãããåãã«ãæã®åŠçæéãççž®ãããŸãã
2. Dockerãã«ããã£ãã·ã¥ã®æå¹æŽ»çš
ð ãã£ãã·ã¥ã¬ã€ã€ãŒæŠç¥
-
äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ïŒäŸ:
go mod download
ãnpm install
ïŒã¯äžéšã«é 眮ããé »ç¹ã«å€æŽããããœãŒã¹ã³ãŒãéšåã¯äžéšã«é 眮ããã - CI/CDç°å¢ã§ã¯ããã£ãã·ã¥ã®å ±æãå¯èœãªèšå®ãå©çšããŠãæ¯åã®ãã«ãæéãççž®ããã
3. 䞊åãã«ãã®æŽ»çš
ð è€æ°ã€ã¡ãŒãžã®åæãã«ã
-
docker-composeã®äžŠåãã«ã
ã³ãã³ãäŸïŒdocker-compose build --parallel
-
CI/CDã§ã®äžŠåãžã§ãå®è¡
GitHub ActionsãGitLab CIãCircleCIãªã©ã®èšå®ã§ãåãµãŒãã¹ã®ãã«ãã䞊åã«å®è¡ããã
ããã«ãããå šäœã®ãã«ãæéãå€§å¹ ã«ççž®ãããŸãã
4. å ±éããŒã¹ã€ã¡ãŒãžã®å©çš
ð éè€äœæ¥ã®åæž
è€æ°ãµãŒãã¹ãåãäŸåé¢ä¿ãæã€å Žåãå ±éã®ããŒã¹ã€ã¡ãŒãžãäœæããããããåãµãŒãã¹ã®ã€ã¡ãŒãžã掟çããããšå¹ççã§ãã
ã¹ããã
-
å ±éããŒã¹ã€ã¡ãŒãžã®äœæ
# Dockerfile.base FROM alpine:latest RUN apk add --no-cache curl ca-certificates # å ±éã©ã€ãã©ãªãç°å¢èšå®ãè¿œå
-
åãµãŒãã¹ã®Dockerfileã§å©çš
# åãµãŒãã¹ã®Dockerfile FROM yourregistry/your-common-base:latest WORKDIR /app COPY . . RUN make build CMD ["./your-service"]
ããããããšã§ãäŸåé¢ä¿ã®ãã«ããäžåºŠã ãå®æœãããåå©çšãããŸãã
5. ã€ã¡ãŒãžã¬ãžã¹ããªã®æŽ»çš
ð ãã«ãæžã¿ã€ã¡ãŒãžã®åå©çš
äžåºŠãã«ãããã€ã¡ãŒãžã Docker Hub ããã©ã€ããŒãã¬ãžã¹ããªã«ããã·ã¥ããããšã§ã
åãã«ãã®æéãçããŸãã
å ·äœçãªæé
-
ã€ã¡ãŒãžããã«ã
docker build -t yourregistry/your-app:latest .
-
ã€ã¡ãŒãžãããã·ã¥
docker push yourregistry/your-app:latest
-
ãããã€æã¯ãã«ããŠå©çš
Kubernetesãªã©ã§ã¯ãimagePullPolicy
ãIfNotPresent
ã«èšå®ãããšããã£ãã·ã¥ãããã€ã¡ãŒãžãå©çšã§ããŸãã
ãŸãšã
åæãã«ãæéã®ççž®ã¯ãäžèšã®åãçµã¿ã§å®çŸã§ããŸãïŒ
-
Dockerfileã®æé©åãšãã«ãã¹ããŒãžãã«ã
ãã£ãã·ã¥ãæå¹æŽ»çšããäžèŠãªããŒã«ãé€å»ããã -
Dockerãã«ããã£ãã·ã¥ã®æŠç¥çå©çš
CI/CDç°å¢ã§ãã£ãã·ã¥ãå ±æããŠãåãã«ããå¹çåããã -
䞊åãã«ã
è€æ°ãµãŒãã¹ãåæã«ãã«ãããããšã§ãå šäœã®æéãççž®ããã -
å ±éããŒã¹ã€ã¡ãŒãžã®å©çš
éè€ããäŸåé¢ä¿ãäžåºŠã ããã«ãããåãµãŒãã¹ã§åå©çšããã -
ã€ã¡ãŒãžã¬ãžã¹ããªã®æŽ»çš
äžåºŠãã«ãããã€ã¡ãŒãžãä¿åããŠåå©çšããããšã§ããããã€æéãå€§å¹ ã«ççž®ããã
ãããã®ææ³ãçµã¿åãããããšã§ãåæãã«ãã®æéãåçã«ççž®ããå¹ççãªã³ã³ããéçšãå¯èœã«ãªããŸãã
ãã²ããããžã§ã¯ãã«åãããæé©ãªææ³ãéžãã§ã¿ãŠãã ããïŒ