ã²ã¹ãèè ã®ã¢ãã³ã»ãã§ã«ãŒãã¯ãKinstaã®çµéšè±å¯ãªãœãããŠã§ã¢éçºè ã§ãã Docker ãš Kubernetes ã«æ ç±ã泚ãã§ãããã¢ããªã±ãŒã·ã§ã³éçºãš DevOps ãã©ã¯ãã£ã¹ãå°éãšããŠããŸãã 圌ã®å°éç¥èã¯ããããã®é©æ°çãªãã¯ãããžãŒã掻çšããŠãå±éããã»ã¹ãåçåãããœãããŠã§ã¢ã®ã¹ã±ãŒã©ããªãã£ã匷åããããšã«ãããŸãã
ãšã³ã¿ãŒãã©ã€ãº ã¬ãã«ã§ã¯ã©ãŠããã€ãã£ã ã¢ããªã±ãŒã·ã§ã³ãéçºããã³ä¿å®ããéã®æå€§ã®èª²é¡ã® 1 ã€ã¯ãéçºã©ã€ããµã€ã¯ã«å šäœãéããŠäžè²«ãããšã¯ã¹ããªãšã³ã¹ãæã€ããšã§ãã ãã®ããã»ã¹ã¯ã忣ããããŒã ãããŸããŸãªãã©ãããã©ãŒã ãããŸããŸãªã»ããã¢ãããéåæéä¿¡ã§äœæ¥ãããªã¢ãŒãäŒæ¥ã«ãšã£ãŠã¯ããã«å°é£ã§ããÂ
Kinstaã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¹ãã£ã³ã°ãããŒã¿ããŒã¹ãã¹ãã£ã³ã°ããããŒãžãWordPressãã¹ãã£ã³ã°ã«é¢ããããããèŠæš¡ã®ãããžã§ã¯ãããããŸããäžè²«æ§ããããä¿¡é Œæ§ãé«ããã¹ã±ãŒã©ãã«ãªãœãªã¥ãŒã·ã§ã³ãæäŸããå¿ èŠããããŸãã
- éçºè ãšå質ä¿èšŒããŒã ã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«é¢ä¿ãªããæ©èœãéçºããã³ãã¹ãããããã®ç°¡åã§æå°éã®ã»ããã¢ãããäœæããŸãã
- DevOpsãSysOpsãããã³ã€ã³ãã©ã¹ãã©ã¯ã㣠ããŒã ã¯ãã¹ããŒãžã³ã°ç°å¢ãšéçšç°å¢ãæ§æããã³ä¿å®ããŸãã

忣ããããŒã ã§ã¯ã©ãŠããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã課é¡ãå æ
Kinstaã§ã¯ãéçºããæ¬çªç°å¢ãŸã§ã®ãã¹ãŠã®ã¹ãããã§ãã®äžè²«ãããšã¯ã¹ããªãšã³ã¹ãå®çŸããããã«ãDockerã«å€§ããäŸåããŠããŸãããã®èšäºã§ã¯ã以äžã«ã€ããŠèª¬æããŸãã
- Docker ãã¹ã¯ããã ãæŽ»çšããŠéçºè ã®çç£æ§ãåäžãããæ¹æ³ã
- CircleCI ãš GitHub Actions ã䜿çšã㊠Docker ã€ã¡ãŒãžããã«ãããCI ãã€ãã©ã€ã³çµç±ã§ Google Container Registry ã«ããã·ã¥ããæ¹æ³ã
- CD ãã€ãã©ã€ã³ã䜿çšããŠãDocker ã€ã¡ãŒãžãGoogle Kubernetes EngineãCloud Deploy ã䜿çšããŠæ¬çªç°å¢ãžã®å¢å倿Žãä¿é²ããæ¹æ³ã
- QA ããŒã ãããŸããŸãªç°å¢ã§äºåæ§ç¯æžã¿ã® Docker ã€ã¡ãŒãžãã·ãŒã ã¬ã¹ã«äœ¿çšããæ¹æ³ã
Docker ãã¹ã¯ãããã䜿çšããŠéçºè ãšã¯ã¹ããªãšã³ã¹ãåäžããã
ã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§å®è¡ããã«ã¯ãéçºè ã¯ç°å¢ãç¶¿å¯ã«æºåãããã¹ãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããµãŒããŒãšãµãŒãã¹ãã»ããã¢ããããããããé©åã«æ§æãããŠããããšã確èªããå¿ èŠããããŸãã è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå Žåããã®ã¢ãããŒãã¯ãç¹ã«è€æ°ã®äŸåé¢ä¿ãæã€è€éãªãããžã§ã¯ãã®å Žåãé¢åãªå ŽåããããŸãã ãŸããè€æ°ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãæã€è€æ°ã®ã³ã³ããªãã¥ãŒã¿ãŒã玹ä»ãããšãã«ãªã¹ ãã€ã³ã¹ããŒã«ãããŸãã ãããé²ãããã«ãDockerã䜿çšããŸãã
Docker ã䜿çšãããšãç°å¢æ§æã宣èšããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããå¿ èŠãªå Žæã«ãããã¹ãŠã®ãã®ã䜿çšããŠã€ã¡ãŒãžããã«ãã§ããŸãã 誰ã§ããã©ãã§ããã©ã®OSã§ããåãã€ã¡ãŒãžã䜿çšããä»ã®äººãšãŸã£ããåããšã¯ã¹ããªãšã³ã¹ãåŸãããšãã§ããŸãã
Docker Compose ã䜿çšããŠæ§æã宣èšãã
éå§ããã«ã¯ã Docker äœæ ãã¡ã€ã« docker-compose.yml(. ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®æãŸããç¶æ
ã Docker ã«éç¥ãã YAML 圢åŒã§èšè¿°ããã宣èšåæ§æãã¡ã€ã«ã§ãã Docker ã¯ãã®æ
å ±ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ç°å¢ãèšå®ããŸãã
Docker Composeãã¡ã€ã«ã¯ãè€æ°ã®ã³ã³ãããŒãå®è¡ããŠããŠãã³ã³ãããŒéã«äŸåé¢ä¿ãããå Žåã«äŸ¿å©ã§ãã
ãã¡ã€ã«ãäœæããã«ã¯ docker-compose.yml :
- ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¹ãšã㊠ãéžæãã
imageããšããå§ããŸãã Docker Hub ã§æ€çŽ¢ããŠãã¢ããªã®äŸåé¢ä¿ãæ¢ã«å«ãŸããŠãã Docker ã€ã¡ãŒãžãèŠã€ããŸãã ãšã©ãŒãé¿ããããã«ãå¿ ãç¹å®ã®ã€ã¡ãŒãžã¿ã°ã䜿çšããŠãã ãããlatestã¿ã°ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã§äºæããªããšã©ãŒãçºçããå¯èœæ§ããããŸããè€æ°ã®äŸåé¢ä¿ã«å¯ŸããŠè€æ°ã®ããŒã¹ã€ã¡ãŒãžã䜿çšã§ããŸã (ããšãã°ãPostgreSQL çšã« 1 ã€ãRedis çšã« 1 ã€)ã - å¿
èŠã«å¿ããŠããã¹ãã«ããŒã¿ãä¿æããããã«äœ¿çšããŸã
volumesã ãã¹ã ãã·ã³ã«ããŒã¿ãä¿æãããšãDocker ã³ã³ãããŒãåé€ãããå Žåããã³ã³ãããŒãåäœæããå¿ èŠãããå Žåã«ããŒã¿ã倱ãããã®ãé²ãããšãã§ããŸãã - ãã¹ããä»ã®ã³ã³ãããŒãšã®ãããã¯ãŒã¯ã®ç«¶åãåé¿ããããã«ãã»ããã¢ãããåé¢ããããã«äœ¿çšããŸã
networksã ãŸããã³ã³ãããŒãçžäºã«ç°¡åã«æ€çŽ¢ããŠéä¿¡ããã®ã«ã圹ç«ã¡ãŸãã
ãã¹ãŠããŸãšãããšã docker-compose.yml 次ã®ããã«ãªããŸãã
version: '3.8'
services:
db:
image: postgres:14.7-alpine3.17
hostname: mk_db
restart: on-failure
ports:
- ${DB_PORT:-5432}:5432
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${DB_USER:-user}
POSTGRES_PASSWORD: ${DB_PASSWORD:-password}
POSTGRES_DB: ${DB_NAME:-main}
networks:
- mk_network
redis:
image: redis:6.2.11-alpine3.17
hostname: mk_redis
restart: on-failure
ports:
- ${REDIS_PORT:-6379}:6379
networks:
- mk_network
volumes:
db_data:
networks:
mk_network:
name: mk_network
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãããŒåãã
ã¢ããªã±ãŒã·ã§ã³ã® Docker ã€ã¡ãŒãžããã«ããã
ãŸããã䜿çšã㊠Docker ã€ã¡ãŒãž Dockerfileãæ§ç¯ããããã ãã docker-compose.ymlåŒã³åºãå¿
èŠããããŸãã
次㮠5 ã€ã®æé ã«åŸã£ãŠãã¡ã€ã«ãäœæããŸã Dockerfile ã
1.ããŒã¹ãšããŠç»åãéžæããããšããå§ããŸãã ã¢ããªã§åäœããæå°ã®åºæ¬ç»åã䜿çšããŸãã éåžžãé«å±±ã®ã€ã¡ãŒãžã¯æå°éã§ã远å ã®ããã±ãŒãžã¯ã»ãŒãŒãã§ãã é«å±±ã®ç»åããå§ããŠããã®äžã«æ§ç¯ããããšãã§ããŸãã
docker
FROM node:18.15.0-alpine3.17
2.ç«¶åãåé¿ããããã«ãç¹å®ã®CPUã¢ãŒããã¯ãã£ã䜿çšããå¿
èŠãããå ŽåããããŸãã ããšãã°ãããã»ããµã䜿çšããŠãã arm64-based ãã amd64 ã€ã¡ãŒãžãæ§ç¯ããå¿
èŠããããšããŸãã ãããè¡ãã«ã¯ã -- platform in ãæå®ããŸã Dockerfileã
docker
FROM --platform=amd64 node:18.15.0-alpine3.17
3. ã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªãå®çŸ©ããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠãåºåãã«ãŒããã£ã¬ã¯ããªã«ã³ããŒããŸãã
docker
WORKDIR /opt/app
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
4.ããé»è©±ããã Dockerfile ãŸã docker-compose.yml:
services:
...redis
...db
app:
build:
context: .
dockerfile: Dockerfile
platforms:
- "linux/amd64"
command: yarn dev
restart: on-failure
ports:
- ${PORT:-4000}:${PORT:-4000}
networks:
- mk_network
depends_on:
- redis
- db
5. èªåãªããŒããå®è£ ããŠããœãŒã¹ã³ãŒãå ã®äœãã倿Žãããšãã«ãã¢ããªã±ãŒã·ã§ã³ãæåã§åæ§ç¯ããªããŠãã倿Žãããã«ãã¬ãã¥ãŒã§ããããã«ããŸãã ãããè¡ãã«ã¯ãæåã«ã€ã¡ãŒãžããã«ãããŠãããå¥ã®ãµãŒãã¹ã§å®è¡ããŸãã
services:
... redis
... db
build-docker:
image: myapp
build:
context: .
dockerfile: Dockerfile
app:
image: myapp
platforms:
- "linux/amd64"
command: yarn dev
restart: on-failure
ports:
- ${PORT:-4000}:${PORT:-4000}
volumes:
- .:/opt/app
- node_modules:/opt/app/node_modules
networks:
- mk_network
depends_on:
- redis
- db
- build-docker
ããã®ãã³ã: node_modules ããã±ãŒãžã«é¢ãããã©ãããã©ãŒã åºæã®åé¡ãåé¿ããããã«ãæç€ºçã«ããŠã³ããããŠããããšã«æ³šæããŠãã ãããã€ãŸãããã¹ãäžã§ ã䜿çšãã node_modules 代ããã«ãDocker ã³ã³ãããŒã¯ç¬èªã®ã³ã³ãããŒã䜿çšããŸãããå¥ã®ããªã¥ãŒã ã®ãã¹ãã«ãããããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã«ããæ¬çªã€ã¡ãŒãžã®æ®µéçãªæ§ç¯Â
ã¢ããªãšãµãŒãã¹ã®å€§éšåã¯ãããã€ã« CI/CD ã䜿çšããŠãããDocker ã¯ãã®ããã»ã¹ã§éèŠãªåœ¹å²ãæãããŸãã ã¡ã€ã³ãã©ã³ãã§å€æŽãè¡ããããã³ã«ãGitHub Actions ãŸã㯠CircleCI ãä»ããŠãã«ããã€ãã©ã€ã³ãå³åº§ã«ããªã¬ãŒãããŸãã äžè¬çãªã¯ãŒã¯ãããŒã¯åçŽã§ãäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ããã¹ãã®å®è¡ãDocker ã€ã¡ãŒãžã®ãã«ããGoogle ã³ã³ãã ã¬ãžã¹ããª(ãŸãã¯ã¢ãŒãã£ãã¡ã¯ã ã¬ãžã¹ããª)ãžã®ããã·ã¥ãè¡ããŸãã ãã®èšäºã§ã¯ããã«ãæé ã«ã€ããŠèª¬æããŸãã
ããã«ãŒã€ã¡ãŒãžã®æ§ç¯
ã»ãã¥ãªãã£ãšããã©ãŒãã³ã¹ã®çç±ããããã«ãã¹ããŒãžãã«ãã䜿çšããŠããŸãã
ã¹ããŒãž1:ãã«ããŒ
ãã®æ®µéã§ã¯ããã¹ãŠã®ãœãŒã¹ãšæ§æãå«ãã³ãŒã ããŒã¹å
šäœãã³ããŒããéçºäŸåé¢ä¿ãå«ããã¹ãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠãã¢ããªããã«ãããŸãã ãã©ã«ããŒãäœæãã dist/ ãã«ããããããŒãžã§ã³ã®ã³ãŒããããã«ã³ããŒããŸãã ãã ãããã®ç»åã¯å€§ãããããããéçšã«äœ¿çšããã«ã¯èšå€§ãªãããããªã³ãã®ã»ããããããŸãã ãŸãããã©ã€ããŒãNPMã¬ãžã¹ããªã䜿çšããããããã®æ®µéã§ããã©ã€ããŒã NPM_TOKEN ã䜿çšããŸãã ã§ãããããã®ã¹ããŒãžãå€ã®äžçã«åºããããªãã®ã§ãã ãã®æ®µéã§å¿
èŠãªã®ã¯ãã©ã«ã dist/ ã ãã§ãã
ã¹ããŒãž 2: çç£
ã»ãšãã©ã®äººã¯ãã¢ããªãå®è¡ããããã«å¿
èŠãªã¹ããŒãžã«è¿ããããã©ã³ã¿ã€ã ã«ãã®ã¹ããŒãžã䜿çšããŸãã ãã ããæ¬çªç°å¢ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããå¿
èŠãããããããããããªã³ããæ®ã㊠NPM_TOKEN. ãããã£ãŠããã®æ®µéã¯ãŸã å
¬éããæºåãã§ããŠããŸããã ããã§ã¯ã19è¡ç®ã«ã泚æ yarn cache clean ããå¿
èŠããããŸãã ãã®å°ããªã³ãã³ãã¯ãç»åãµã€ãºãæå€§60%åæžããŸãã
ã¹ããŒãž 3: ã©ã³ã¿ã€ã
æåŸã®ã¹ããŒãžã¯ãæå°éã®ãããããªã³ãã§å¯èœãªéãã¹ãªã ã§ããå¿
èŠããããŸãã ãããã£ãŠãå®å
šã«ãã€ã¯ãããã¢ããªãæ¬çªç°å¢ããã³ããŒããŠå
ã«é²ã¿ãŸãã ç§ãã¡ã¯ããããã¹ãŠã®ç³žãš NPM_TOKEN ãã®ãåŸãã«çœ®ããã¢ããªãå®è¡ããã ãã§ãã
ãããæåŸ Dockerfile.productionã§ã:
docker
# Stage 1: build the source code
FROM node:18.15.0-alpine3.17 as builder
WORKDIR /opt/app
COPY package.json yarn.lock ./
RUN yarn install
COPY . .
RUN yarn build
# Stage 2: copy the built version and build the production dependencies FROM node:18.15.0-alpine3.17 as production
WORKDIR /opt/app
COPY package.json yarn.lock ./
RUN yarn install --production && yarn cache clean
COPY --from=builder /opt/app/dist/ ./dist/
# Stage 3: copy the production ready app to runtime
FROM node:18.15.0-alpine3.17 as runtime
WORKDIR /opt/app
COPY --from=production /opt/app/ .
CMD ["yarn", "start"]
ãã¹ãŠã®æ®µéã§ãæåã«ãã¡ã€ã«ã®ã³ã㌠package.json yarn.lock ãéå§ããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠãããæ®ãã®ã³ãŒãããŒã¹ãã³ããŒããããšã«æ³šæããŠãã ããã ããã¯ãDockerãåã³ãã³ããåã®ã³ãã³ãã®äžã«ã¬ã€ã€ãŒãšããŠæ§ç¯ããåãã«ãã䜿çšå¯èœãªå Žåã¯åã®ã¬ã€ã€ãŒã䜿çšããããã©ãŒãã³ã¹ç®çã§ã®ã¿æ°ããã¬ã€ã€ãŒããã«ãã§ããããã§ããÂ
ããã±ãŒãžã«è§Šããã«äœãã src/services/service1.ts 倿ŽãããšããŸãããã ã€ãŸãããã«ããŒã¹ããŒãžã®æåã®4ã€ã®ã¬ã€ã€ãŒã¯å€æŽãããŠããããåå©çšã§ããŸãã ãã®ã¢ãããŒãã«ããããã«ãããã»ã¹ãéåžžã«é«éã«ãªããŸãã
CircleCI ãã€ãã©ã€ã³ãä»ããŠã¢ããªã Google ã³ã³ãã ã¬ãžã¹ããªã«ããã·ã¥ãã
CircleCI ãã€ãã©ã€ã³ã§ Docker ã€ã¡ãŒãžããã«ãããã«ã¯ãããã€ãã®æ¹æ³ããããŸãã ç§ãã¡ã®å Žåã以äžã䜿çšããããš circleci/gcp-gcr orbsãéžæããŸãã:
Dockerã®ãããã§ãã¢ããªããã«ãããŠããã·ã¥ããã«ã¯æå°éã®æ§æãå¿ èŠã§ãã
executors:
docker-executor:
docker:
- image: cimg/base:2023.03
orbs:
gcp-gcr: circleci/gcp-gcr@0.15.1
jobs:
...
deploy:
description: Build & push image to Google Artifact Registry
executor: docker-executor
steps:
...
- gcp-gcr/build-image:
image: my-app
dockerfile: Dockerfile.production
tag: ${CIRCLE_SHA1:0:7},latest
- gcp-gcr/push-image:
image: my-app
tag: ${CIRCLE_SHA1:0:7},latest
GitHub ã¢ã¯ã·ã§ã³ã䜿çšããŠã¢ããªã Google ã³ã³ãã ã¬ãžã¹ããªã«ããã·ã¥ãã
CircleCI ã®ä»£ããã«ãGitHub Actions ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãç¶ç¶çã«ãããã€ããããšãã§ããŸãã
Dockerã€ã¡ãŒãžãã»ããã¢ãã gcloud ããŠãã«ãããæ¬¡ã®å Žæã«ããã·ã¥ããŸã gcr.ioã
jobs:
setup-build:
name: Setup, Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Get Image Tag
run: |
echo "TAG=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- uses: google-github-actions/setup-gcloud@master
with:
service_account_key: ${{ secrets.GCP_SA_KEY }}
project_id: ${{ secrets.GCP_PROJECT_ID }}
- run: |-
gcloud --quiet auth configure-docker
- name: Build
run: |-
docker build \
--tag "gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-app:$TAG" \
--tag "gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-app:latest" \
.
- name: Push
run: |-
docker push "gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-app:$TAG"
docker push "gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-app:latest"
å°ããªå€æŽãã¡ã€ã³ ãã©ã³ãã«ããã·ã¥ããããã³ã«ãæ°ãã Docker ã€ã¡ãŒãžããã«ãããŠã¬ãžã¹ããªã«ããã·ã¥ããŸãã
Google Delivery Pipelines ã䜿çšãã Google Kubernetes Engine ãžã®å€æŽã®ãããã€
ãŸãã倿Žããšã«ããã«äœ¿çšã§ããDockerã€ã¡ãŒãžãçšæããããšã§ãæ¬çªç°å¢ãžã®ãããã€ããåé¡ãçºçããå Žåã®ããŒã«ããã¯ãç°¡åã«ãªããŸãã Google ã§ã¯ãã¢ããªã®ç®¡çãšæäŸã«ã¯ Google Kubernetes Engine ã䜿çšããç¶ç¶çããã〠ããã»ã¹ã«ã¯ Google Cloud Deploy and Delivery Pipelines ã䜿çšããŠããŸãã
å°ããªå€æŽã®ãã³ã« (åè¿°ã® CI ãã€ãã©ã€ã³ã䜿çšããŠ) Docker ã€ã¡ãŒãžããã«ããããããããã«äžæ©é²ãã§ãã䜿çšã㊠gcloudéçºã¯ã©ã¹ã¿ãŒã«å€æŽããããã€ããŸãã CircleCI ãã€ãã©ã€ã³ã®ãã®ã¹ããããèŠãŠã¿ãŸãããã
- run:
name: Create new release
command: gcloud deploy releases create release-${CIRCLE_SHA1:0:7} --delivery-pipeline my-del-pipeline --region $REGION --annotations commitId=$CIRCLE_SHA1 --images my-app=gcr.io/${PROJECT_ID}/my-app:${CIRCLE_SHA1:0:7}
ãã®æé ã«ãããéçºçš Kubernetes ã¯ã©ã¹ã¿ãŒã®å€æŽãããŒã«ã¢ãŠãããããã®ãªãªãŒã¹ ããã»ã¹ãããªã¬ãŒãããŸãã ãã¹ãããŠæ¿èªãååŸããåŸã倿Žãã¹ããŒãžã³ã°ã«ææ Œããæ¬¡ã«éçšã«ææ ŒããŸãã ãã®ã¢ã¯ã·ã§ã³ã¯ãã¹ãŠãå¿ èŠãªã»ãšãã©ãã¹ãŠãåãã倿Žããšã«ã¹ãªã ãªåé¢ãããDockerã€ã¡ãŒãžãããããã§ãã 䜿çšããã¿ã°ããããã€ã«æç€ºããã ãã§æžã¿ãŸãã
å質ä¿èšŒããŒã ããã®ããã»ã¹ããã©ã®ããã«å©çãåŸãã
QA ããŒã ã¯ãäž»ã«å®çšŒååã®ã¯ã©ãŠã ããŒãžã§ã³ã®ã¢ããªããã¹ãããå¿ èŠããããŸãã ãã ããç¹å®ã®æ©èœããã¹ãããããã«ããã«ãæžã¿ã®ã¢ããªãããŒã«ã«ã§(ãã¹ãŠã®äŸåé¢ä¿ãšãšãã«)å®è¡ããå¿ èŠãããå ŽåããããŸãã ãã®ãããªå Žåããããžã§ã¯ãå šäœã®ã¯ããŒã³äœæãnpmããã±ãŒãžã®ã€ã³ã¹ããŒã«ãã¢ããªã®ãã«ããéçºè ãšã©ãŒãžã®çŽé¢ãéçºããã»ã¹å šäœã®äœæ¥ãªã©ãã¢ããªã皌åãããããã«èŠåŽããå¿ èŠã¯ãªããå¿ èŠããããŸããã
ãã¹ãŠã Google Container Registry ã§ Docker ã€ã¡ãŒãžãšããŠæ¢ã«å©çšå¯èœã«ãªã£ãã®ã§ãQA ããŒã ã«å¿ èŠãªã®ã¯ Docker äœæãã¡ã€ã«ã®ãµãŒãã¹ã ãã§ãã
services:
...redis
...db
app:
image: gcr.io/${PROJECT_ID}/my-app:latest
restart: on-failure
ports:
- ${PORT:-4000}:${PORT:-4000}
environment:
- NODE_ENV=production
- REDIS_URL=redis://redis:6379
- DATABASE_URL=postgresql://${DB_USER:-user}:${DB_PASSWORD:-password}@db:5432/main
networks:
- mk_network
depends_on:
- redis
- db
ãã®ãµãŒãã¹ã䜿çšãããšãããŒã ã¯æ¬¡ã®ã³ãã³ããå®è¡ããŠãDocker ã³ã³ãããŒã䜿çšããŠããŒã«ã« ã³ã³ãã¥ãŒã¿ãŒäžã®ã¢ããªã±ãŒã·ã§ã³ãã¹ãã³ã¢ããã§ããŸãã
docker compose up
ããã¯ããã¹ãããã»ã¹ãç°¡çŽ åããããã®å€§ããªäžæ©ã§ãã QAãã¢ããªã®ç¹å®ã®ã¿ã°ããã¹ãããããšã決å®ããå Žåã§ãã6è¡ç®ã®ç»åã¿ã°ãç°¡åã«å€æŽããŠãDockeräœæã³ãã³ããåå®è¡ã§ããŸãã ã¢ããªã®ç°ãªãããŒãžã§ã³ãåæã«æ¯èŒããããšã«ããå Žåã§ããããã€ãã®èª¿æŽã§ç°¡åã«æ¯èŒã§ããŸãã æå€§ã®ã¡ãªããã¯ãQAããŒã ãéçºè ã®èª²é¡ããé ãããããšã§ãã
ããã«ãŒã䜿çšããå©ç¹
- äŸåé¢ä¿ã®ãããããªã³ãã¯ã»ãŒãŒãã§ãã Redis ãŸã㯠PostgreSQL ã®ããŒãžã§ã³ãã¢ããã°ã¬ãŒãããå Žåã¯ã1 è¡å€æŽããã ãã§ã¢ããªãåå®è¡ã§ããŸãã ã·ã¹ãã äžã§äœã倿Žããå¿ èŠã¯ãããŸããã ããã«ãäž¡æ¹ãRedisãå¿ èŠãšãã2ã€ã®ã¢ããªãããå Žå(ããŒãžã§ã³ãç°ãªãå Žåã§ã)ãäºãã«ç«¶åããããšãªããäž¡æ¹ãç¬èªã®åé¢ç°å¢ã§å®è¡ã§ããŸãã
- ã¢ããªã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹: DBã®åæåããã¹ãã®å®è¡ãDBã®å€æŽã®ç£èŠãã¡ãã»ãŒãžã®ãªãã¹ã³ãªã©ãåãã¢ããªãå¥ã®ã³ãã³ãã§å®è¡ããå¿ èŠãããå Žåãå€ããããŸãã ãããã®å Žåãããã«ããããã€ã¡ãŒãžãæ¢ã«æºåãã§ããŠãããããå¥ã®ã³ãã³ãã䜿çšã㊠Docker äœæãã¡ã€ã«ã«å¥ã®ãµãŒãã¹ã远å ããã ãã§å®äºã§ãã
- ããç°¡åãªãã¹ãç°å¢: å€ãã®å Žåãã¢ããªãå®è¡ããã ãã§ãã ã³ãŒããããã±ãŒãžããŸãã¯ããŒã«ã« ããŒã¿ããŒã¹æ¥ç¶ã¯å¿ èŠãããŸããã ã¢ããªãæ£ããåäœããããšã確èªããããç¬èªã®ãããžã§ã¯ãã§äœæ¥ããŠããéã«ããã¯ãšã³ããµãŒãã¹ãšããŠå®è¡äžã®ã€ã³ã¹ã¿ã³ã¹ãå¿ èŠãªã ãã§ãã ããã¯ãQAããã«ãªã¯ãšã¹ãã®ã¬ãã¥ãŒæ åœè ããŸãã¯ãã¶ã€ã³ãé©åã«å®è£ ãããŠããããšã確èªãããUXæ åœè ã«ãåœãŠã¯ãŸããŸãã Dockerã®ã»ããã¢ããã«ãããå€ãã®æè¡çãªåé¡ã«å¯ŸåŠããããšãªãããã¹ãŠã®äººãç°¡åã«äœæ¥ãé²ããããšãã§ããŸãã
ããã«è©³ãã
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã?å§ããŸãããã
- 蚪å Kinsta ã¯ã©ãŠã ãã©ãããã©ãŒã ã«ã€ããŠåŠã¶ããã®ãµã€ãã