DevOps/Docker

[Docker] Dockerfileμ—μ„œ ν™˜κ²½λ³€μˆ˜ μ‚¬μš©ν•˜κΈ°

suhyeon chae 2023. 12. 24. 14:57

πŸ’‘ ν•΄λ‹Ή 글은 node.js ν”„λ‘œμ νŠΈλ₯Ό ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λ―Έμ§€λ‘œ build ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€. (μ˜ˆμ œλŠ” node.js둜 ν–ˆμ§€λ§Œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 λ‚˜μ˜€λ‹ˆ λκΉŒμ§€ λ΄μ£Όμ„Έμš”!)

 

 

β–ΆοΈŽ ν™˜κ²½ λ³€μˆ˜λž€?

μ†Œν”„νŠΈμ›¨μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” μ„€μ •μ΄λ‚˜ ꡬ성 값듀을 μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, μ‹œμŠ€ν…œ ν™˜κ²½κ³ΌλŠ” λΆ„λ¦¬λ˜μ–΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ μ—°ν•˜κ²Œ μ„€μ •ν•  수 있게 ν•΄μ€€λ‹€.

ex) μ• ν”Œλ¦¬μΌ€μ΄μ…˜ PORT, 도메인 μ£Όμ†Œ, 자격증λͺ…, 개인 ν‚€ λ“±

 

β–ΆοΈŽ  ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš© ν•˜λŠ” 방법

1. λ„μ»€νŒŒμΌ λ‚΄μ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό 직접 μ •μ˜

2. ν™˜κ²½ λ³€μˆ˜ 파일 생성

 

 

방법1. 도컀 파일 λ‚΄μ—μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό 직접 μ •μ˜

 

 

 

β–ΆοΈŽ  도컀 파일 μž‘μ„±

βœ”οΈŽ ENV μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

ENV PORT 80 # ν™˜κ²½ λ³€μˆ˜ μ •μ˜
EXPOSE $PORT

CMD [ "npm", "start" ]
β‡’ ENV PORT 80 :  PORTλŠ” ν™˜κ²½ λ³€μˆ˜μ˜ '이름'을 μ§€μ •ν•œ 것이며 80은 ν™˜κ²½ λ³€μˆ˜μ˜ DEFAULT 값을 μ§€μ •ν•œ 것

β‡’ EXPOST $PORT : $PORTλŠ” μœ„μ—μ„œ μ •μ˜ν•œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œ 것이며 $λ₯Ό μ‚¬μš©ν•΄μ„œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν–ˆμŒμ„ μ•Œλ¦Ό

 

 

β–ΆοΈŽ  도컀 μ‹€ν–‰ λͺ…λ Ήμ–΄

βœ”οΈŽ --env λ˜λŠ” -e μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό 지정해쀄 수 μžˆλ‹€.

βœ”οΈŽ ν™˜κ²½ λ³€μˆ˜κ°€ μ—¬λŸ¬ 개인 경우 key=value ν˜•νƒœλ‘œ 계속 λ‚˜μ—΄ ν•΄μ£Όλ©΄ λœλ‹€.

→ docker run -d --rm -p 3000:8000 --env PORT=8000 --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

→ docker run -d --rm -p 3000:8000 -e PORT=8000 --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

 docker run -d --rm -p 3000:8000 -e PORT=8000 -e KEY=VALUE --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env


β‡’ μ•„κΉŒ DEFAULT 값은 80μ΄μ˜€μ§€λ§Œ μ΄λ ‡κ²Œ run ν•  λ•Œ 값을 λ„£μ–΄μ£Όλ©΄ 8000μ΄λΌλŠ” κ°’μœΌλ‘œ ν™˜κ²½λ³€μˆ˜κ°€ μ…‹νŒ…λ˜μ–΄ μž‘λ™ν•œλ‹€.

 

방법2. ν™˜κ²½ λ³€μˆ˜ 파일 생성

 

β–ΆοΈŽ .env 파일 생성 ν›„ μ•„λž˜ μ½”λ“œ μž‘μ„±

βœ”οΈŽ key=value ν˜•νƒœλ‘œ μž‘μ„±

PORT=8000

 

β–ΆοΈŽ  도컀 μ‹€ν–‰ λͺ…λ Ήμ–΄

βœ”οΈŽ --env-file μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜ νŒŒμΌμ„ 지정해쀄 수 μžˆλ‹€.

→ docker run -d --rm -p 3000:8000 --env-file ./.env --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

β‡’ ./.env λŠ” .env 파일이 ν˜„μž¬ 디렉토리에 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. λ”°λΌμ„œ ν˜„μž¬ 디텍토리에 μžˆλŠ” .env νŒŒμΌμ„ ν™˜κ²½ λ³€μˆ˜ 파일둜 μ‚¬μš©ν•˜κ² λ‹€λŠ” 의미

 

 

 

μ–΄λ–€ 방법이 더 μ’‹μ„κΉŒ?

βœ”οΈŽ ν™˜κ²½ λ³€μˆ˜λŠ” 보톡 λŸ°νƒ€μž„μ‹œμ— μ‚¬μš©λ˜λŠ” λ³„λ„μ˜ ν™˜κ²½ λ³€μˆ˜ 파일둜 이동 μ‹œν‚¨λ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 값이 이미지에 ν¬ν•¨λ˜λ©° docker history <이미지> λͺ…λ Ήμ–΄λ₯Ό 톡해 이 ν™˜κ²½ λ³€μˆ˜ 값을 읽을 수 μžˆλ‹€κ³  ν•œλ‹€. λ”°λΌμ„œ ν™˜κ²½ λ³€μˆ˜ νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.

 

βœ”οΈŽ λ³„λ„μ˜ νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 경우 μ†ŒμŠ€ 컨트둀 μ €μž₯μ†Œμ˜ μΌλΆ€λΆ„μœΌλ‘œ μ»€λ°‹ν•˜μ§€ μ•Šλ„λ‘ μ‘°μ‹¬ν•΄μ•Όν•œλ‹€.