ããªããç§ã®ãããªäººãªããReactã䜿çšããŠæŽç·Žãããå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæããã®ã倧奜ãã§ãã ããããäžè²«ããéçºç°å¢ãèšå®ããã¹ã ãŒãºãªãããã€ã確ä¿ããããšã¯ãè€éã«ãªãããšããããŸãã ããã§ãDocker ã窮å°ãæããæäŒããããŸãã
ã·ãã¢DevOpsãšã³ãžãã¢ããã³Dockerãã£ããã³ãšããŠãç§ã¯ã³ã³ããåã®æµ·ãããã²ãŒãããDockerãã¯ãŒã¯ãããŒã«ã©ã®ããã«é©åœãããããããçŽæ¥ç®ã®åœããã«ããŠããŸããã ãã®ã¬ã€ãã§ã¯ãReact ã¢ããªã Docker åããŠéçºããã»ã¹ãåçåãããèªåã®ãã·ã³ã§åäœããããšããåä»ãªåé¡ãæé€ããã·ãŒã ã¬ã¹ãªãããã€ã§ååãæåãããæ¹æ³ãå ±æããŸãã
DockerãšReactã®äžçã«é£ã³èŸŒã¿ãŸããã!

ãªãReactã¢ããªã±ãŒã·ã§ã³ãã³ã³ããåããã®ã§ãã?
ããªãããããReactã¢ããªãã³ã³ããåããå¿ èŠãããã®ãããšçåã«æããããããããŸããããã質åã§ãã! ã³ã³ããåã«ã¯ãéçºãšãããã€ã¡ã³ãã®ã²ãŒã ãåäžãããæ¬¡ã®ãããªé åçãªå©ç¹ããããŸãã
- CI/CD ãã€ãã©ã€ã³ã®åçå: React ã¢ããªã Docker ã³ã³ããã«ããã±ãŒãžåããããšã§ãéçºããæ¬çªç°å¢ãŸã§äžè²«ããç°å¢ãäœæã§ããŸãã ãã®äžè²«æ§ã«ãããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšç¶ç¶çããã〠(CI/CD) ãã€ãã©ã€ã³ãç°¡çŽ åããããã«ããšãããã€äžã®ç°å¢åºæã®åé¡ã®ãªã¹ã¯ã軜æžãããŸãã
- äŸåé¢ä¿ç®¡çã®ç°¡çŽ å: Docker ã¯ãã¢ããªã®ãã¹ãŠã®äŸåé¢ä¿ãã³ã³ããå ã«ã«ãã»ã«åããŸãã ããã¯ãæªåé«ããç§ã®ãã·ã³ã§åäœããããšãããžã¬ã³ãã«å¯ŸåŠããå¿ èŠããªããªãããšãæå³ããŸãã ãã¹ãŠã®ããŒã ã¡ã³ããŒãšãããã€ã¡ã³ãç°å¢ãåãã»ããã¢ããã䜿çšããŠãããããã¹ã ãŒãºãªã³ã©ãã¬ãŒã·ã§ã³ãä¿èšŒãããŸãã
- ãªãœãŒã¹ç®¡çã®æ¹å: ã³ã³ããã¯è»œéã§å¹ççã§ãã ä»®æ³ãã·ã³ãšã¯ç°ãªããDocker ã³ã³ããã¯ãã¹ãã·ã¹ãã ã®ã«ãŒãã«ãå ±æãããããåãããŒããŠã§ã¢äžã§ããå€ãã®ã³ã³ãããå®è¡ã§ããŸãã ãã®å¹çæ§ã¯ãã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒãªã³ã°ããããæ¬çªç°å¢ã§ãªãœãŒã¹ã管çããããããšãã«éèŠã§ãã
- ç«¶åã®ãªãå€ç«ããç°å¢: Docker ã¯ãã¢ããªã±ãŒã·ã§ã³ã«åé¢ãããç°å¢ãæäŸããŸãã ãã®åé¢ã«ãããåããã·ã³äžã®ç°ãªããããžã§ã¯ãã®äŸåé¢ä¿ãŸãã¯æ§æéã®ç«¶åã鲿¢ãããŸãã ãããããç¬èªã®äŸåé¢ä¿ãæã€è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããäºãã«è¶³ãåŒã£åŒµãããšã¯ãããŸããã
React ãš Docker ã䜿ãå§ãã
å ã«é²ãåã«ãReactã¢ããªã®ã³ã³ããåãéå§ããããã«å¿ èŠãªãã®ããã¹ãŠæã£ãŠããããšã確èªããŸãããã
å¿ èŠãªããŒã«
- Dockerãã¹ã¯ããã: Dockerã®å ¬åŒWebãµã€ãããããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãã
- Node.jsãšnpm: Node.jså ¬åŒãµã€ãããå ¥æããŠãã ããã
- React ã¢ããª: æ¢åã®ãããžã§ã¯ãã䜿çšãããã
create-react-appã䜿çšããŠæ°ãããããžã§ã¯ããäœæããŸãã
Docker ã®ç°¡åãªç޹ä»
Docker ã¯ããšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿ããŒã«ãã¯ã©ãŠã ãµãŒãã¹ãä¿¡é Œã§ããã³ã³ãã³ããããã³ã¯ãŒã¯ãããŒã®åçåãšéçºå¹çã®æå€§åãæ¯æŽããå ±åã³ãã¥ããã£ã®å æ¬çãªã¹ã€ãŒããæäŸããŸãã Docker çç£æ§ãã©ãããã©ãŒã ã䜿çšãããšãéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã (ãœãããŠã§ã¢ã®å®è¡ã«å¿ èŠãªãã¹ãŠã®ãã®ãå«ãæšæºåããããŠããã) ã«ããã±ãŒãžåã§ããŸãã ã³ã³ããã¯ãã¢ããªã±ãŒã·ã§ã³ããããã€ãããŠããå Žæã«é¢ä¿ãªããåãããã«å®è¡ãããããšãä¿èšŒããŸãã
Reactãããžã§ã¯ããDockeråããæ¹æ³
ããã§ã¯ãæ¬é¡ã«å ¥ããŸãããã ãã®ããã»ã¹ã段éçã«é²ããæåŸã«ã¯ãDockerã³ã³ããå ã§Reactã¢ããªãå®è¡ã§ããããã«ãªããŸãã
ã¹ããã 1:Reactã¢ããªãã»ããã¢ãããã
ãã§ã« React ã¢ããªããæã¡ã®å Žåã¯ããã®æé ãã¹ãããã§ããŸãã ããã§ãªãå Žåã¯ãäœæããŸãããã
npx create-react-app my-react-app
cd my-react-app
ãã®ã³ãã³ãã¯ã my-react-app ãšãããã£ã¬ã¯ããªã§æ°ãã React ã¢ããªã±ãŒã·ã§ã³ãåæåããŸãã
ã¹ããã 2: Dockerfile ãäœæãã
ãããžã§ã¯ãã®ã«ãŒã ãã£ã¬ã¯ããªã«ã Dockerfile ãšããååã®ãã¡ã€ã«ãäœæããŸã (æ¡åŒµåã¯ãããŸãã)ã ãã®ãã¡ã€ã«ã«ã¯ãDocker ã€ã¡ãŒãžããã«ãããããã®æé ãå«ãŸããŠããŸãã
éçºçšã®Dockerfile
éçºç®çã§ãåçŽãª Dockerfile ãäœæã§ããŸãã
# Use the latest LTS version of Node.js
FROM node:18-alpine
# Set the working directory inside the container
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of your application files
COPY . .
# Expose the port your app runs on
EXPOSE 3000
# Define the command to run your app
CMD ["npm", "start"]
ããã§äœãèµ·ãã£ãŠããã®ã§ãã?
FROM node:18-alpine: Alpine Linux ã«åºã¥ãææ°ã® LTS ããŒãžã§ã³ã® Node.js ã䜿çšããŠããŸããWORKDIR /app: ã³ã³ããå ã®äœæ¥ãã£ã¬ã¯ããªãèšå®ããŸãã*COPY package.json ./**:package.jsonãšpackage-lock.jsonãäœæ¥ãã£ã¬ã¯ããªã«ã³ããŒããŸããRUN npm install:package.jsonã§æå®ãããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸããCOPY . .: ããŒã«ã« ãã£ã¬ã¯ããªããã³ã³ããã«ãã¹ãŠã®ãã¡ã€ã«ãã³ããŒããŸããEXPOSE 3000: ã³ã³ããã®ããŒã 3000 ãå ¬éããŸã (React ã®ããã©ã«ãããŒã)ãCMD ["npm", "start"]: ã³ã³ããã®èµ·åæã«npm startãå®è¡ããããã« Docker ã«æç€ºããŸãã
倿®µéãã«ãã䜿çšããéçš Dockerfile
éçšç°å¢ã«å¯Ÿå¿ããã€ã¡ãŒãžã®å Žåã¯ããã«ãã¹ããŒãž ãã«ãã䜿çšããŠã€ã¡ãŒãž ãµã€ãºãæé©åããã»ãã¥ãªãã£ã匷åããŸãã
# Build Stage
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Production Stage
FROM nginx:stable-alpine AS production
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
説æ
- ãã«ãã¹ããŒãž:
FROM node:18-alpine AS build:ã¢ããªã®æ§ç¯ã«ã¯ Node.js 18 ã䜿çšããŸããRUN npm run build: æé©åããããããã¯ã·ã§ã³ ãã¡ã€ã«ããã«ãããŸãã
- çç£æ®µé:
FROM nginx: Nginx ã䜿çšããŠéçãã¡ã€ã«ãæäŸããŸããCOPY --from=build /app/build /usr/share/nginx/html: åã®ã¹ããŒãžãããã«ãåºåãã³ããŒããŸããEXPOSE 80: ããŒã ãå ¬é 80ãCMD ["nginx", "-g", "daemon off;"]: ãã©ã¢ã°ã©ãŠã³ãã§ Nginx ãå®è¡ããŸãã
å©ç¹
- ã€ã¡ãŒãž ãµã€ãºãå°ãã: æçµçãªã€ã¡ãŒãžã«ã¯ãéçšãã«ããš Nginx ã®ã¿ãå«ãŸããŸãã
- ã»ãã¥ãªãã£ã®åŒ·å: éçºã®äŸåé¢ä¿ãš Node.js ã©ã³ã¿ã€ã ãéçšã€ã¡ãŒãžããé€å€ããŸãã
- ããã©ãŒãã³ã¹ã®æé©å:Nginxã¯éçãã¡ã€ã«ãå¹ççã«æäŸããŸãã
ã¹ããã 3: .dockerignore ãäœæãã ãã¡ã€ã«
.gitignoreãšåãããã« Git ãç¹å®ã®ãã¡ã€ã«ãç¡èŠããã®ãå©ããŸã .dockerignore ã€ã¡ãŒãžã®ãã«ãæã«é€å€ãããã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã Docker ã«æç€ºããŸãã .dockerignoreãäœæãã ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ãããã¡ã€ã«:
node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore
.env
äžèŠãªãã¡ã€ã«ãé€å€ãããšãç»åãµã€ãºãå°ãããªãããã«ãããã»ã¹ãé«éåãããŸãã
ã¹ããã 4: Docker åããã React ã¢ããªããã«ãããŠå®è¡ãã
ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ç§»åããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
docker build -t my-react-app ã§ãã
ãã®ã³ãã³ãã¯ãã€ã¡ãŒãžã« my-react-app ãšããååãã¿ã°ä»ããããã«ã ã³ã³ããã¹ã (çŸåšã®ãã£ã¬ã¯ããª) ãæå®ããŸãã ããã©ã«ãã§ã¯ãããã«ããããã«ãã¹ããŒãžã® Dockerfile ãã æçµçãªéçšã¹ããŒãž ããã«ããããã€ã¡ãŒãžãå°ããæé©åãããŸãã
Dockerfile ã«è€æ°ã®ã¹ããŒãžããããç¹å®ã®ãã«ã ã¹ããŒãž ( build ã¹ããŒãžãªã©) ãã¿ãŒã²ããã«ããå¿
èŠãããå Žåã¯ã --target ãªãã·ã§ã³ã䜿çšã§ããŸãã äŸãã°ïŒ
docker build -t my-react-app-dev --target build .
æèšïŒ--target build ã§ãã«ããããšãReact ã¢ããªã®ã³ã³ãã€ã«ã«å¿
èŠãªãã«ãããŒã«ãšäŸåé¢ä¿ãå«ãŸããŠããããããã倧ããªã€ã¡ãŒãžãäœæãããŸããäžæ¹ããããã¯ã·ã§ã³ã€ã¡ãŒãž( âtarget productionã䜿çšããŠãã«ã)ã¯ãæçµçãªãã«ããã¡ã€ã«ã®ã¿ãå«ãŸããŠãããããã¯ããã«å°ãããªããŸãã
Docker ã³ã³ããã®å®è¡
éçºã€ã¡ãŒãžã®å Žå:
docker run -p 3000: my-react-app-dev3000
補åã€ã¡ãŒãžã®å Žå:
docker run -p 80: my-react-app80
ã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹
次ã«ããã©ãŠã¶ãéããŠæ¬¡ã®å Žæã«ç§»åããŸãã
http://localhost:3000(éçºçš)http://localhost(çç£çš)
Dockerã³ã³ããå ã§Reactã¢ããªãå®è¡ãããŠããããšãããããŸãã
ã¹ããã 5: Docker Compose ã䜿çšããŠãã«ãã³ã³ããã®ã»ããã¢ãããè¡ã
以äžã¯ãDocker Compose ã䜿çšã㊠React ããã³ããšã³ãã¢ããªããµãŒãã¹ãšããŠèšå®ããæ¹æ³ã®äŸã§ãã
compose.ymlãã¡ã€ã«ãäœæããŸãã
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- ./node_modules:/app/node_modules
environment:
NODE_ENV: development
stdin_open: true
tty: true
command: npm start
説æ
services:ãµãŒãã¹ (ã³ã³ãããŒ) ã®äžèЧãå®çŸ©ããŸããweb:åœç€Ÿã®ãµãŒãã¹ã®ååãbuild: .:çŸåšã®ãã£ã¬ã¯ããªã« Dockerfile ããã«ãããŸããports:ã³ã³ããã®ããŒã 3000 ããã¹ãã®ããŒã 3000 ã«ãããã³ã°ããŸããvolumes:çŸåšã®ãã£ã¬ã¯ããªãšnode_modulesãããããªããŒãçšã«ããŠã³ãããŸããenvironment:ç°å¢å€æ°ãèšå®ããŸããstdin_openãããŠtty:ã³ã³ããã皌åãããã€ã³ã¿ã©ã¯ãã£ãã«ä¿ã¡ãŸãã
ã¹ããã 6: ã€ã¡ãŒãžã Docker Hub ã«å ¬éãã
Docker ã€ã¡ãŒãžãå ±æãããšãä»ã®ãŠãŒã¶ãŒã¯èªåã§ç°å¢ãèšå®ããã«ã¢ããªãå®è¡ã§ããŸãã
Docker Hubã«ãã°ã€ã³ããŸãã
ããã«ãŒãã°ã€ã³
ããã³ããã衚瀺ãããããDocker Hub ã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããŸãã
ç»åã«ã¿ã°ãä»ãã:
dockerã¿ã°my-react-app your-dockerhub-username/my-react-app
your-dockerhub-username ãå®éã® Docker Hub ãŠãŒã¶ãŒåã«çœ®ãæããŸãã
ã€ã¡ãŒãžãããã·ã¥ããŸãã
docker push your-dockerhub-username/my-react-app
ããã§ãã€ã¡ãŒãžã Docker Hub ã§å©çšå¯èœã«ãªããä»ã®ãŠãŒã¶ãŒããã«ããŠå®è¡ã§ããããã«ãªããŸãã
ã€ã¡ãŒãžããã«ããŠå®è¡ããŸãã
docker pullyour-dockerhub-username/my-react-app
docker run -p 80: your-dockerhub-username/my-react-app80
ããã§ãã€ã¡ãŒãžããã«ããããšã§ã誰ã§ãã¢ããªãå®è¡ã§ããããã«ãªããŸããã
ç°å¢å€æ°ã®å®å šãªåãæ±ã
ç°å¢å€æ°ãå®å šã«ç®¡çããããšã¯ãAPIããŒãããŒã¿ããŒã¹è³æ Œæ å ±ãªã©ã®æ©å¯æ å ±ãä¿è·ããããã«éèŠã§ãã
.env ã®äœ¿çš ãã¡ã€ã«
.envãäœæãã ãããžã§ã¯ãã®ã«ãŒãã«ãã¡ã€ã«:
REACT_APP_API_URL=https://api.example.com
compose.ymlãæŽæ°ããŸãã
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- ./node_modules:/app/node_modules
env_file:
- .env
stdin_open: true
tty: true
command: npm start
ã»ãã¥ãªãã£ã«é¢ããæ³šæ:.envãç¢ºä¿ ãã¡ã€ã«ã¯ .gitignore ãš .dockerignore ã«è¿œå ãããããŒãžã§ã³ç®¡çã«ã³ããããããããDocker ã€ã¡ãŒãžã«å«ãŸãããããã®ãé²ããŸãã
compose.ymlã§å®çŸ©ãããŠãããã¹ãŠã®ãµãŒãã¹ããã¿ããã¢ãŒãã§éå§ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
ããã«ãŒã³ã³ããŒãºã¢ãã-d
å®è¡æã®ç°å¢å€æ°ã®åãæž¡ã
ãŸãã¯ãã³ã³ããã®å®è¡æã«å€æ°ãæž¡ãããšãã§ããŸãã
docker run -p 3000:3000 -e REACT_APP_API_URL=https://api.example.com my-react-app-dev
Docker ã·ãŒã¯ã¬ããã®äœ¿çš (äžçŽ)
æ¬çªç°å¢ã®æ©å¯ããŒã¿ã«ã€ããŠã¯ã Docker Secrets ã䜿çšããŠæ©å¯æ å ±ãå®å šã«ç®¡çããããšãæ€èšããŠãã ããã
倿®µéãã«ãã䜿çšããéçš Dockerfile
React ã¢ããªãæ¬çªç°å¢çšã«æºåãããšãããã«ãã¹ããŒãžãã«ãã«ãããç¡é§ã®ãªãéäžåãä¿ãããŸãã ããã«ããããã«ãããã»ã¹ãæçµçãªã©ã³ã¿ã€ã ç°å¢ããåé¢ã§ãããããã¢ããªãæäŸããããã«å¿ èŠãªãã®ã ããåºè·ã§ããŸãã ããã«ãããç»åãµã€ãºãå°ãããªãã ãã§ãªããäžèŠãªããã±ãŒãžãéçºäŸåé¢ä¿ãæ¬çªç°å¢ã«äŸµå ¥ããã®ãé²ãããšãã§ããŸãã
次ã«ç€ºãã®ã¯ãããã«äžæ©é²ãã äŸã§ãå°çšã®ãã«ã ã¹ããŒãžãéçºç°å¢ã¹ããŒãžãéçšã¹ããŒãžãäœæããŸãã ãã®ã¢ãããŒãã«ãããå¿«é©ã«éçºããªãããåçåãããæ¬çªç°å¢ã«å¯Ÿå¿ããã€ã¡ãŒãžãäœæã§ããŸãã
# Stage 1: Build the React app
FROM node:18-alpine AS build
WORKDIR /app
# Leverage caching by installing dependencies first
COPY package.json package-lock.json ./
RUN npm install --frozen-lockfile
# Copy the rest of the application code and build for production
COPY . ./
RUN npm run build
# Stage 2: Development environment
FROM node:18-alpine AS development
WORKDIR /app
# Install dependencies again for development
COPY package.json package-lock.json ./
RUN npm install --frozen-lockfile
# Copy the full source code
COPY . ./
# Expose port for the development server
EXPOSE 3000
CMD ["npm", "start"]
# Stage 3: Production environment
FROM nginx:alpine AS production
# Copy the production build artifacts from the build stage
COPY --from=build /app/build /usr/share/nginx/html
# Expose the default NGINX port
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
ããã§äœãèµ·ãã£ãŠããã®ã§ãã?
- ãã«ãã¹ããŒãž: æåã®ã¹ããŒãžã§ã¯ãå
¬åŒã® Node.js ã€ã¡ãŒãžã䜿çšããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããã«ããå®è¡ããæé©åãããæ¬çªç°å¢ã«å¯Ÿå¿ãã React ãã«ããçæããŸãã
npm installãå®è¡ããåã«package.jsonãšpackage-lock.jsonã®ã¿ãã³ããŒããããšã§ãDocker ã®ã¬ã€ã€ãŒ ãã£ãã·ã³ã°ã掻çšã§ããŸããããã«ãããã³ãŒãã倿ŽãããäŸåé¢ä¿ã倿Žãããªãå Žåã®åæ§ç¯ãé«éåãããŸãã - éçºæ®µé: è¿
éãªã€ãã¬ãŒã·ã§ã³ã®ããã«ããããªããŒãæ©èœãåããããŒã«ã«ç°å¢ãå¿
èŠã§ãã? ãã®ç¬¬ 2 段éã¯ããŸãã«ãããèšå®ããŸãã äŸåé¢ä¿ãå床ã€ã³ã¹ããŒã«ã(åããã£ãã·ã³ã°ããªãã¯ã䜿çš)ãéçºãµãŒããŒãããŒã 3000ã§èµ·åããDockerå
ã§ããªãã¿ã®
npm startãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã - çç£æ®µé: æåŸã«ãæ¬çªã¹ããŒãžã§ã¯ã軜éã®NGINXã€ã¡ãŒãžã䜿çšããŠéçãã«ãã¢ãŒãã£ãã¡ã¯ããæäŸããŸãã ãã®ã·ã³ãã«ãªã€ã¡ãŒãžã«ã¯ãNode.jsãäžèŠãªéçºããŒã«ã¯å«ãŸããŠããããæé©åãããã¢ããªãšå ç¢ãªWebãµãŒããŒã®ã¿ãå«ãŸããŠããŸãã ããã¯ç©äºãæž æœã§ãå®å šã§ãå¹ççã«ä¿ã¡ãŸãã
ãã®æ§é åãããã¢ãããŒãã«ãããéçºç°å¢ãšéçšç°å¢ã®åãæ¿ããç°¡åã«ãªããŸãã ã³ãŒãã£ã³ã°äžã«é«éãªãã£ãŒãããã¯ã«ãŒããåŸãããã ãã§ãªããã¹ãªã ã§æé©åãããæçµã€ã¡ãŒãžãããã«ãããã€ã§ããŸãã ããã¯ãReact éçºã¯ãŒã¯ãããŒãåçåããäž¡æ¹ã®é·æãå Œãåãããœãªã¥ãŒã·ã§ã³ã§ãã
Docker ãš React ã®äžè¬çãªåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
æåã®æç€ºããã£ãŠããåé¡ãçºçããå¯èœæ§ããããŸãã ããã§ã¯ãäžè¬çãªåé¡ãšãã®ä¿®æ£æ¹æ³ã瀺ããŸãã
åé¡: ãããŒã 3000 ã¯æ¢ã«äœ¿çšãããŠããŸãã
è§£æ±ºïŒ ããŒã 3000 ã䜿çšããŠãµãŒãã¹ã忢ããããã³ã³ãããŒã®å®è¡æã«ã¢ããªãå¥ã®ããŒãã«ãããããŸãã
docker run -p 4000:3000 my-react-app
http://localhost:4000ã§ã¢ããªã«ã¢ã¯ã»ã¹ããŸãã
åé¡: éçºäžã«å€æŽãåæ ãããªã
è§£æ±ºïŒ Docker ããªã¥ãŒã ã䜿çšããŠãããããªããŒããæå¹ã«ããŸãã ããªãã® compose.ymlã§ã 以äžã®ãã®ã volumesãããŠããããšã確èªããŠãã ããã
volumes:
- .:/app
- ./node_modules:/app/node_modules
ãã®èšå®ã«ãããããŒã«ã«ã®å€æŽãã³ã³ããå ã«ãã©ãŒãªã³ã°ã§ããŸãã
åé¡: ãã«ãæéãé ã
è§£æ±ºïŒ Dockerfile ãæé©åããŠãã£ãã·ã³ã°ã掻çšããŸãã npm installãå®è¡ããåã«ãpackage.jsonãšpackage-lock.jsonã®ã¿ãã³ããŒããŸãããã®ããã«ãDocker ã¯ãããã®ãã¡ã€ã«ã倿Žãããªãéããã¬ã€ã€ãŒããã£ãã·ã¥ããŸãã
COPY package*.json ./
RUN npm install
COPY . .
åé¡: ã³ã³ãããããã«çµäºãã
åå ïŒ React éçºãµãŒããŒã¯ãããã©ã«ãã§ã¯ã³ã³ãããå®è¡ãç¶ããªãå ŽåããããŸãã
è§£æ±ºïŒ ã³ã³ãããŒã察話圢åŒã§å®è¡ããŠããããšã確èªããŸãã
docker run -it -p 3000:3000 my-react-app
åé¡: ãã¡ã€ã«ã®ã¢ã¯ã»ã¹èš±å¯ãšã©ãŒ
è§£æ±ºïŒ ãã¡ã€ã«ã®ã¢ã¯ã»ã¹èš±å¯ã調æŽãããã USER ãã£ã¬ã¯ãã£ãã䜿çšã㊠Dockerfile ã§ãŠãŒã¶ãŒãæå®ããŸãã
# Add before CMD
USER node
åé¡: macOS ãš Windows ã§ã®ããã©ãŒãã³ã¹ã®åé¡
ãã¹ãã·ã¹ãã ãš Docker ã³ã³ããéã®ãã¡ã€ã«å
±æã¡ã«ããºã ã¯ãç¹ã«å€§èŠæš¡ãªãªããžããªãå€ãã®ãã¡ã€ã«ãå«ããããžã§ã¯ãã§äœæ¥ããå Žåã«ãmacOS ãš Windows ã§å€§ããªãªãŒããŒããããåŒãèµ·ãããŸãã osxfsãgRPC FUSEãªã©ã®åŸæ¥ã®æ¹æ³ã§ã¯ããããã®ç°å¢ã§å¹ççã«æ¡åŒµããã®ãé£ããããšããããããŸãã
ãœãªã¥ãŒã·ã§ã³ïŒ
åæããããã¡ã€ã«å ±æãæå¹ã«ããŸã (Docker Desktop 4.27+): Docker ãã¹ã¯ããã 4.27+ ã§ã¯ã åæããããã¡ã€ã«å ±æãå°å ¥ãããDocker Desktop VM å ã«ãã¹ã ãã¡ã€ã«ã®é«ããã©ãŒãã³ã¹ã®åæ¹åãã£ãã·ã¥ãäœæããããšã§ããã€ã³ã ããŠã³ãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
äž»ãªå©ç¹:
- å€§èŠæš¡ãããžã§ã¯ãåãã«æé©å: ã¢ãã¬ããæ°åã®ãã¡ã€ã«ãå«ããªããžããªãå¹ççã«åŠçããŸãã
- ããã©ãŒãã³ã¹ã®åäž: å€ããã¡ã€ã«å ±æã¡ã«ããºã ã§çºçããŠããããã«ããã¯ã解決ããŸãã
- ãªã¢ã«ã¿ã€ã åæ: ãã¹ããšã³ã³ããéã®ãã¡ã€ã«ã·ã¹ãã ã®å€æŽãã»ãŒãªã¢ã«ã¿ã€ã ã§èªåçã«åæããŸãã
- ãã¡ã€ã«æææš©ã®ç«¶åã®åæž: ãã¹ããšã³ã³ããéã®ãã¡ã€ã«æš©éã®åé¡ãæå°éã«æããŸãã
æå¹ã«ããæ¹æ³:
- Docker Desktop ãéãã[èšå®] > [ãªãœãŒã¹] > [ãã¡ã€ã«å ±æ] ã«ç§»åããŸãã
- [ åæããããã¡ã€ã«å ±æ] ã»ã¯ã·ã§ã³ã§ãå ±æãããã©ã«ããéžæãã[ ãã¡ã€ã«å ±æã®åæå] ãã¯ãªãã¯ããŸãã
compose.ymlã§ãã€ã³ã ããŠã³ãã䜿çšããããå ±æãã£ã¬ã¯ããªãæã Docker CLI ã³ãã³ãã䜿çšããŸãã
.syncignoreã§æé©åãã:.syncignoreãäœæãã å
±æãã£ã¬ã¯ããªã®ã«ãŒãã«ãããã¡ã€ã«( node_modules, .git/ãªã©)ãé€å€ããŸã ããã©ãŒãã³ã¹ãåäžãããããã
äŸ .syncignore ãã¡ã€ã«ïŒ
node_modules
.git/
*.log
compose.ymlã®äŸ:
services:
web:
build: .
volumes:
- ./app:/app
ports:
- "3000:3000"
environment:
NODE_ENV: development
Windows ã§ WSL 2 ãæŽ»çšããŸãã WindowsãŠãŒã¶ãŒã®å ŽåãDockerã®WSL 2 ããã¯ãšã³ãã¯ã軜éã®Linux VMã§Dockerãšã³ãžã³ãå®è¡ããããšã«ããããã€ãã£ãã«è¿ãLinuxããã©ãŒãã³ã¹ãæäŸããŸãã
ããã¯ãšã³ã 2 WSL ãæå¹ã«ããæ¹æ³:
- Windows 10 ããŒãžã§ã³ 2004 以éãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŸãã
- Windows Subsystem for Linux 2ãã€ã³ã¹ããŒã«ããŸãã
- Docker Desktop ã§ã[èšå®] > [å šè¬ ] ã«ç§»åãã[ WSL 2 ããŒã¹ã®ãšã³ãžã³ã䜿çšãã] ãæå¹ã«ããŸãã
ããªã¥ãŒã ããŠã³ãã§æŽæ°ããããã£ãã·ã¥ãªãã·ã§ã³ã䜿çšããŸãã :cached ã :delegated ãªã©ã®åŸæ¥ã®ãªãã·ã§ã³ã¯éæšå¥šã§ãããæŽåæ§ã¢ãŒãã§ã¯æé©åãå¯èœã§ãã
consistent: å³å¯ãªæŽåæ§ (ããã©ã«ã)ãcached: ãã¹ããã³ã³ãã³ãããã£ãã·ã¥ã§ããããã«ããŸããdelegated: ã³ã³ãããã³ã³ãã³ãããã£ãã·ã¥ã§ããããã«ããŸãã
ããªã¥ãŒã æ§æã®äŸ:
volumes:
- type: bind
source: ./app
target: /app
consistency: cached
React Docker ã»ããã¢ããã®æé©å
ããã€ãã®é«åºŠãªãã¯ããã¯ã§ã»ããã¢ããã匷åããŸãããã
ç»åãµã€ãºãçž®å°ãã
ç¹ã«ã¯ã©ãŠãç°å¢ã«ãããã€ããå Žåã¯ããã¹ãŠã®ã¡ã¬ãã€ããéèŠã§ãã
- å°ããåºæ¬ã€ã¡ãŒãžã䜿çšãã: ã¢ã«ãã€ã³ããŒã¹ã®ç»åã¯å€§å¹ ã«å°ãããªããŸãã
- äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«åŸã«ã¯ãªãŒã³ã¢ããããŸãã
RUN npm install && npm cache clean --force
- äžèŠãªãã¡ã€ã«ã®ã³ããŒã¯é¿ããŠãã ããã
.dockerignoreã䜿çšãã 广çã
Docker ãã«ããã£ãã·ã¥ã®æŽ»çš
ãã£ãã·ã¥ãäžå¿ èŠã«ç¡å¹ã«ããŠããªãããšã確èªããŸãã åãã«ãã¹ãããã«å¿ èŠãªãã¡ã€ã«ã®ã¿ãã³ããŒããŸãã
Docker ã¬ã€ã€ãŒãè³¢ã䜿çšãã
Dockerfile ã®åã³ãã³ãã¯ãæ°ããã¬ã€ã€ãŒãäœæããŸãã å¿ èŠã«å¿ããŠã³ãã³ããçµã¿åãããŠãã¬ã€ã€ãŒã®æ°ãæžãããŸãã
RUN npm install && npm cache clean --force
çµè«
React ã¢ããªã® Docker åã¯ãã²ãŒã ãã§ã³ãžã£ãŒã§ãã ããã«ãããéçºã¯ãŒã¯ãããŒã«äžè²«æ§ãå¹çæ§ãã¹ã±ãŒã©ããªãã£ãããããããŸãã ã¢ããªã±ãŒã·ã§ã³ãã³ã³ããåããããšã§ãç°å¢ã®äžäžèŽãæé€ãããããã€ã¡ã³ããåçåããã³ã©ãã¬ãŒã·ã§ã³ãç°¡åã«è¡ãããšãã§ããŸãã
ã§ããããæ¬¡ã«Reactãããžã§ã¯ããèšå®ãããšãã¯ãDockerã詊ããŠã¿ãŠãã ããã ããã«ãããéçºè ãšããŠã®ç掻ãå€§å¹ ã«æ¥œã«ãªããŸãã ã³ã³ããåã®äžçãžãããã!
ããã«è©³ãã
- Docker Newsletter ã賌èªããŠãã ãããÂ
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã