☁️ Cloud Native/🐳 Docker

[Docker] Docker Container μ‹€ν–‰ν•˜κΈ°: 단계별 κ°€μ΄λ“œ

Bigbread1129 2025. 1. 15. 19:18

Dockerλ₯Ό ν™œμš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

DockerλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ»¨ν…Œμ΄λ„ˆν™”ν•˜μ—¬ μΌκ΄€λœ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•  수 있게 ν•΄μ£ΌλŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€. 특히, Docker 이미지λ₯Ό λΉŒλ“œν•˜κ³  λ°°ν¬ν•œ ν›„, 이λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 과정은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

 

이 κΈ€μ—μ„œλŠ” docker container run λͺ…령어와 κ΄€λ ¨λœ μ£Όμš” μ˜΅μ…˜λ“€μ„ μƒμ„Ένžˆ μ„€λͺ…ν•˜κ³ , μ‹€μ œ 예제λ₯Ό 톡해 μ‹€μŠ΅ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

docker container

 

docs.docker.com


Docker Container μ‹€ν–‰ν•˜κΈ°

Docker 이미지λ₯Ό λΉŒλ“œν•˜κ³  λ°°ν¬ν•œ ν›„, 이제 ν•΄λ‹Ή 이미지λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆλŠ” μ΄λ―Έμ§€μ˜ μ‹€ν–‰ μΈμŠ€ν„΄μŠ€μ΄λ©°, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€μ œλ‘œ κ΅¬λ™ν•˜λŠ” ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

μ£Όμš” μ˜΅μ…˜ μ„€λͺ…

 

docker container run λͺ…λ Ήμ–΄λŠ” Docker 이미지λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ 톡해 μ»¨ν…Œμ΄λ„ˆμ˜ λ™μž‘ 방식을 μ„Έλ°€ν•˜κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ ν‘œλŠ” 자주 μ‚¬μš©ν•˜λŠ” μ£Όμš” μ˜΅μ…˜λ“€μ„ μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€.

μ˜΅μ…˜ μ„€λͺ… μ‚¬μš©λ²• μ˜ˆμ‹œ 및 μ£Όμ˜μ‚¬ν•­
--name μ»¨ν…Œμ΄λ„ˆμ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€. --name [μ»¨ν…Œμ΄λ„ˆλͺ…] - μ˜ˆμ‹œ: --name mbti- μ£Όμ˜μ‚¬ν•­: μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ Dockerκ°€ μžλ™μœΌλ‘œ 랜덀 이름을 ν• λ‹Ήν•©λ‹ˆλ‹€. λͺ…ν™•ν•œ 이름을 μ§€μ •ν•˜λ©΄ 관리가 μš©μ΄ν•©λ‹ˆλ‹€.
-e λ˜λŠ” --env μ»¨ν…Œμ΄λ„ˆμ— ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. -e [λ³€μˆ˜λͺ…]=[κ°’] - μ˜ˆμ‹œ: -e PORT=3000- μš©λ„: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ ν•„μš”ν•œ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.- μΆ”κ°€: --env-file μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό 파일둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
--env-file ν™˜κ²½ λ³€μˆ˜λ₯Ό νŒŒμΌλ‘œλΆ€ν„° λ‘œλ“œν•©λ‹ˆλ‹€. --env-file [파일 경둜] - μ˜ˆμ‹œ: --env-file .docker.env- μš©λ„: μ—¬λŸ¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό ν•œκΊΌλ²ˆμ— λ‘œλ“œν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
--rm μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ μ‚­μ œν•©λ‹ˆλ‹€. --rm - μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ ν›„ μ’…λ£Œ μ‹œ, κ΄€λ ¨λœ 정보λ₯Ό μžλ™μœΌλ‘œ μ‚­μ œν•˜μ—¬ λΆˆν•„μš”ν•œ 데이터가 μŒ“μ΄μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
-d μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€. -d - μ„€λͺ…: 터미널을 λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ 예제

이제 μœ„μ—μ„œ μ„€λͺ…ν•œ μ˜΅μ…˜λ“€μ„ ν™œμš©ν•˜μ—¬ μ‹€μ œλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
μ•„λž˜λŠ” docker container run λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€.
docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  daehyunbigbread/mbti:embedded-db

b5c33cca7b0f895c4e3e1cce9e2ef7bc0c3059231b6c6a3fce0accf8f0a1b206

Docker Desktop으둜 보면 λ‘œμ»¬μ—μ„œ μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€ν–‰λœκ±Έ μ•Œμˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ μ„€λͺ…

  • --name mbti:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆμ˜ 이름을 mbti둜 μ§€μ •ν•©λ‹ˆλ‹€.
    • 효과: λ‚˜μ€‘μ— μ»¨ν…Œμ΄λ„ˆλ₯Ό 관리할 λ•Œ λͺ…ν™•ν•œ μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • -e PORT=3000:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ PORT ν™˜κ²½ λ³€μˆ˜λ₯Ό 3000으둜 μ„€μ •ν•©λ‹ˆλ‹€.
    • 효과: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 3000 포트λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ„€μ •λ©λ‹ˆλ‹€.
  • --rm:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€.
    • 효과: λΆˆν•„μš”ν•œ μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμŠ€ν…œμ— 남지 μ•Šμ•„ 곡간을 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • -d:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
    • 효과: 터미널을 λ‹€λ₯Έ μž‘μ—…μ— μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • daehyunbigbread/mbti:embedded-db:
    • μ„€λͺ…: μ‹€ν–‰ν•  Docker μ΄λ―Έμ§€μž…λ‹ˆλ‹€.
    • 효과: μ§€μ •λœ μ΄λ―Έμ§€λ‘œλΆ€ν„° μ»¨ν…Œμ΄λ„ˆκ°€ μƒμ„±λ˜κ³  μ‹€ν–‰λ©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³Ό

λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄, DockerλŠ” μ§€μ •λœ 이미지λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄, μ»¨ν…Œμ΄λ„ˆ IDκ°€ 좜λ ₯λ©λ‹ˆλ‹€.

b5c33cca7b0f895c4e3e1cce9e2ef7bc0c3059231b6c6a3fce0accf8f0a1b206

Container 확인 및 관리

μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•œ ν›„, 이λ₯Ό ν™•μΈν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.
DockerλŠ” λ‹€μ–‘ν•œ λͺ…λ Ήμ–΄λ₯Ό μ œκ³΅ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆμ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜κ³  μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ 확인

μ‹€ν–‰ 쀑인 λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆλ₯Ό ν™•μΈν•˜λ €λ©΄ docker container ls λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

docker container ls

μ˜ˆμ‹œ 좜λ ₯

CONTAINER ID   IMAGE                              COMMAND           CREATED          STATUS          PORTS     NAMES
b5c33cca7b0f   daehyunbigbread/mbti:embedded-db   "npm run start"   12 minutes ago   Up 12 minutes             mbti
  • CONTAINER ID: μ»¨ν…Œμ΄λ„ˆμ˜ 고유 μ‹λ³„μžμž…λ‹ˆλ‹€.
  • IMAGE: μ»¨ν…Œμ΄λ„ˆκ°€ κΈ°λ°˜ν•œ μ΄λ―Έμ§€μž…λ‹ˆλ‹€.
  • COMMAND: μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€ν–‰ 쀑인 λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.
  • CREATED: μ»¨ν…Œμ΄λ„ˆκ°€ μƒμ„±λœ μ‹œκ°„μž…λ‹ˆλ‹€.
  • STATUS: μ»¨ν…Œμ΄λ„ˆμ˜ ν˜„μž¬ μƒνƒœμž…λ‹ˆλ‹€.
  • PORTS: μ»¨ν…Œμ΄λ„ˆκ°€ λ…ΈμΆœν•œ ν¬νŠΈμž…λ‹ˆλ‹€.
  • NAMES: μ»¨ν…Œμ΄λ„ˆμ˜ μ΄λ¦„μž…λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ 파일 ν™•μΈν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ˜ νŒŒμΌμ„ ν™•μΈν•˜κ³  싢을 λ•ŒλŠ” docker container exec λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
이 λͺ…λ Ήμ–΄λŠ” μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ ν˜•μ‹

docker container exec [μ˜΅μ…˜] [μ»¨ν…Œμ΄λ„ˆλͺ…] [μ‹€ν–‰ν•  λͺ…λ Ήμ–΄]

예제: /app 디렉토리 파일 λͺ©λ‘ 확인

docker container exec mbti ls /app

μ˜ˆμ‹œ 좜λ ₯

Dockerfile
next-env.d.ts
next.config.mjs
node_modules
package-lock.json
package.json
public
src
tsconfig.json
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆ λ‚΄μ˜ /app 디렉토리에 μžˆλŠ” νŒŒμΌλ“€μ„ λ‚˜μ—΄ν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆμ— 터미널 μ ‘μ†ν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆ 내뢀에 직접 μ ‘κ·Όν•˜μ—¬ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜ νŒŒμΌμ„ μˆ˜μ •ν•˜κ³  싢을 λ•ŒλŠ” docker container exec -it λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
이 λͺ…λ Ήμ–΄λŠ” μ»¨ν…Œμ΄λ„ˆ 내뢀에 터미널을 μ—°κ²°ν•΄μ€λ‹ˆλ‹€.

μ˜΅μ…˜ μ„€λͺ…

  • -i: μΈν„°λž™ν‹°λΈŒ λͺ¨λ“œλ‘œ μ‹€ν–‰ν•˜μ—¬ ν‚€λ³΄λ“œ μž…λ ₯을 μ»¨ν…Œμ΄λ„ˆμ— μ „λ‹¬ν•©λ‹ˆλ‹€.
  • -t: TTYλ₯Ό ν• λ‹Ήν•˜μ—¬ 터미널을 μ‚¬μš© κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ 예제

docker container exec -it mbti bash

μ‹€ν–‰ κ²°κ³Ό

root@b5c33cca7b0f:/app# 
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆ 내뢀에 Bash 셸을 μ‹€ν–‰ν•˜μ—¬ 직접 λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ’…λ£Œ: μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ exit λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ 셸을 μ’…λ£Œν•˜κ³  터미널을 λΉ μ Έλ‚˜μ˜΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ 둜그 ν™•μΈν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆμ˜ μ‹€ν–‰ 둜그λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ ν™•μΈν•˜λ €λ©΄ docker container logs -f λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
이 λͺ…λ Ήμ–΄λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ 둜그λ₯Ό μŠ€νŠΈλ¦¬λ°ν•˜μ—¬ μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ ν˜•μ‹

docker container logs -f [μ»¨ν…Œμ΄λ„ˆλͺ…]

예제: mbti μ»¨ν…Œμ΄λ„ˆ 둜그 확인

docker container logs -f mbti

μ˜ˆμ‹œ 좜λ ₯

> mbti-nextjs@0.1.0 start
> next start

  β–² Next.js 14.2.3
  - Local:        http://localhost:3000

 βœ“ Starting...
 βœ“ Ready in 244ms
| GET | /api/healthcheck | Tue Jan 07 2025 07:35:11 GMT+0000 (Coordinated Universal Time) |
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆμ˜ μ‹€μ‹œκ°„ 둜그λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœ, μš”μ²­ 처리 등을 λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ‹œκ°„ λ‘œκ·Έμ™€ μš”μ²­ 체크

μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­μ„ 보내고 λ‘œκ·Έμ— λ°˜μ˜λ˜λŠ”μ§€λ₯Ό ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. 둜그 λͺ¨λ‹ˆν„°λ§
  2. docker container logs -f mbti
  3. μš”μ²­ 보내기
    docker container exec mbti curl localhost:3000/api/healthcheck
    
  4. μƒˆλ‘œμš΄ 터미널 창을 μ—΄κ³  λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  5. 둜그 확인
    > mbti-nextjs@0.1.0 start
    > next start
    
      β–² Next.js 14.2.3
      - Local:        http://localhost:3000
    
  6. 둜그 μ°½μ—μ„œ μš”μ²­μ΄ 처리된 내역을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
βœ“ Starting... βœ“ Ready in 244ms | GET | /api/healthcheck | Tue Jan 07 2025 07:35:11 GMT+0000 (Coordinated Universal Time) |

 

μš”μ²­ κ²°κ³Ό

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                               Dload  Upload   Total   Spent    Left  Speed
100  7428    0  7428    0     0  50815      0 --:--:-- --:--:-- --:--:-- 50876
  • μ„€λͺ…: curl λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ API μ—”λ“œν¬μΈνŠΈμ— μš”μ²­μ„ λ³΄λƒˆμœΌλ©°, μ»¨ν…Œμ΄λ„ˆ λ‘œκ·Έμ— ν•΄λ‹Ή μš”μ²­μ΄ 기둝된 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ μ’…λ£Œ λͺ…λ Ήμ–΄

μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ’…λ£Œν•˜λ €λ©΄ docker container stop λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ ν˜•μ‹

docker container stop [μ»¨ν…Œμ΄λ„ˆλͺ…]

예제: mbti μ»¨ν…Œμ΄λ„ˆ μ’…λ£Œ

docker container stop mbti

μ‹€ν–‰ κ²°κ³Ό

mbti
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©°, docker container ls λͺ…λ Ήμ–΄λ₯Ό 톡해 더 이상 μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ λͺ©λ‘μ— λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
docker container ls

μ˜ˆμ‹œ 좜λ ₯

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆκ°€ μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ–΄ μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ λͺ©λ‘μ— 더 이상 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ§Œ 되고 μ‚­μ œκ°€ λ˜μ§€ μ•Šμ•˜μ„ λ•Œ?

--rm μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šμ€ 경우, μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ”λΌλ„ μ‹œμŠ€ν…œμ— λ‚¨μ•„μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό ν™•μΈν•˜λ €λ©΄ docker container ls -a λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ 예제

docker container ls -a

μ˜ˆμ‹œ 좜λ ₯

CONTAINER ID   IMAGE                              COMMAND           CREATED          STATUS                     PORTS     NAMES
aaf9f623ea59   daehyunbigbread/mbti:embedded-db   "npm run start"   27 seconds ago   Exited (1) 3 seconds ago             mbti
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜μ—ˆμ§€λ§Œ, μ‚­μ œλ˜μ§€ μ•Šκ³  λ‚¨μ•„μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ μ‚­μ œν•˜κΈ°

μ’…λ£Œλœ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚­μ œν•˜λ €λ©΄ docker container rm λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

docker container rm mbti

μ‹€ν–‰ κ²°κ³Ό

mbti
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμŠ€ν…œμ—μ„œ μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ‚­μ œ 확인

docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • μ„€λͺ…: mbti μ»¨ν…Œμ΄λ„ˆκ°€ 더 이상 λͺ©λ‘μ— λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ 일괄 μ‚­μ œν•˜κΈ°

μ—¬λŸ¬ 개의 μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆλ₯Ό μΌκ΄„μ μœΌλ‘œ μ‚­μ œν•˜λ €λ©΄ docker container prune λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
이 λͺ…λ Ήμ–΄λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄ 예제

docker container prune

μ‹€ν–‰ κ²°κ³Ό

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
  • μ„€λͺ…: λͺ¨λ“  μ •μ§€λœ μ»¨ν…Œμ΄λ„ˆκ°€ μ‚­μ œλ˜λ©°, μ‚¬μš©μžκ°€ yλ₯Ό μž…λ ₯ν•˜μ—¬ 확인을 μ™„λ£Œν•©λ‹ˆλ‹€.
  • μ£Όμ˜μ‚¬ν•­: -f μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 확인 ν”„λ‘¬ν”„νŠΈκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. μ‹€μˆ˜λ‘œ μ€‘μš”ν•œ μ»¨ν…Œμ΄λ„ˆκ°€ μ‚­μ œλ˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μ„Έμš”.
docker container prune -f
  • μ„€λͺ…: 확인 ν”„λ‘¬ν”„νŠΈ 없이 λͺ¨λ“  μ •μ§€λœ μ»¨ν…Œμ΄λ„ˆκ°€ μ‚­μ œλ©λ‹ˆλ‹€.

Example) Next.js μ„œλ²„ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ν•˜κΈ°

이제 μ‹€μ „ 예제λ₯Ό 톡해 Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 과정을 μ‹€μŠ΅ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
μ΄λ²ˆμ—λŠ” Next.js μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Docker μ»¨ν…Œμ΄λ„ˆλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

μ‹€μŠ΅ μš”κ±΄

λ‹€μŒ 쑰건에 λΆ€ν•©ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. μ»¨ν…Œμ΄λ„ˆ 이름: mbti
  2. 이미지: [계정λͺ…]/mbti:embedded-db
  3. ν™˜κ²½ λ³€μˆ˜:
    • PORT: 3000
  4. μ»¨ν…Œμ΄λ„ˆ μ’…λ£Œ μ‹œ μžλ™ μ‚­μ œ: --rm μ˜΅μ…˜ μ‚¬μš©
  5. λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰: -d μ˜΅μ…˜ μ‚¬μš©

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€ μ½”λ“œ λ‹€μš΄λ‘œλ“œ

λ¨Όμ €, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

mbti-mysql.zip
0.10MB

 

λ‹€μš΄λ‘œλ“œ 받은 mbti-mysql.zip νŒŒμΌμ„ μ••μΆ• ν•΄μ œν•©λ‹ˆλ‹€.

unzip mbti-mysql.zip -d mbti-mysql
cd mbti-mysql

Docker μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰

이제 Docker 이미지λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  daehyunbigbread/mbti:embedded-db

λͺ…λ Ήμ–΄ μ„€λͺ…

  • --name mbti:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆμ˜ 이름을 mbti둜 μ§€μ •ν•©λ‹ˆλ‹€.
  • -e PORT=3000:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ PORT ν™˜κ²½ λ³€μˆ˜λ₯Ό 3000으둜 μ„€μ •ν•©λ‹ˆλ‹€.
  • --rm:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ μ‚­μ œλ©λ‹ˆλ‹€.
  • -d:
    • μ„€λͺ…: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • daehyunbigbread/mbti:embedded-db:
    • μ„€λͺ…: μ‹€ν–‰ν•  Docker μ΄λ―Έμ§€μž…λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³Ό

λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄, DockerλŠ” μ§€μ •λœ 이미지λ₯Ό 기반으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€.
μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄, μ»¨ν…Œμ΄λ„ˆ IDκ°€ 좜λ ₯λ©λ‹ˆλ‹€.
b5c33cca7b0f895c4e3e1cce9e2ef7bc0c3059231b6c6a3fce0accf8f0a1b206

μ»¨ν…Œμ΄λ„ˆ 둜그 확인

μ»¨ν…Œμ΄λ„ˆκ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 둜그λ₯Ό ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
docker container logs -f mbti

μ˜ˆμ‹œ 좜λ ₯

> mbti-nextjs@0.1.0 start
> next start

  β–² Next.js 14.2.3
  - Local:        http://localhost:3000

 βœ“ Starting...
 βœ“ Ready in 279ms
| GET | /api/healthcheck | Tue Jan 07 2025 08:03:44 GMT+0000 (Coordinated Universal Time) |
  • μ„€λͺ…: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹œμž‘λ˜μ—ˆμœΌλ©°, http://localhost:3000μ—μ„œ μ‹€ν–‰ μ€‘μž„μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μš”μ²­ 보내기 및 둜그 확인

μ‹€μ‹œκ°„ λ‘œκ·Έκ°€ μ œλŒ€λ‘œ 좜λ ₯λ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­μ„ λ³΄λ‚΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
docker container exec mbti curl localhost:3000/api/healthcheck

μ‹€ν–‰ κ²°κ³Ό

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7428    0  7428    0     0  50815      0 --:--:-- --:--:-- --:--:-- 50876
  • μ„€λͺ…: curl λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ API μ—”λ“œν¬μΈνŠΈμ— μš”μ²­μ„ λ³΄λƒˆμœΌλ©°, μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

둜그 확인

둜그 창을 ν™•μΈν•˜λ©΄, μš”μ²­μ΄ μ–΄λ–»κ²Œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
> mbti-nextjs@0.1.0 start
> next start

  β–² Next.js 14.2.3
  - Local:        http://localhost:3000

 βœ“ Starting...
 βœ“ Ready in 279ms
| GET | /api/healthcheck | Tue Jan 07 2025 08:03:44 GMT+0000 (Coordinated Universal Time) |
  • μ„€λͺ…: /api/healthcheck μ—”λ“œν¬μΈνŠΈμ— λŒ€ν•œ GET μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€ 팁 및 μ£Όμ˜μ‚¬ν•­

Docker μ»¨ν…Œμ΄λ„ˆλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  μš΄μ˜ν•˜κΈ° μœ„ν•΄ λͺ‡ κ°€μ§€ 팁과 μ£Όμ˜μ‚¬ν•­μ„ μ•Œμ•„λ‘λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

이미지 νƒœκ·Έ 관리

  • 버전 νƒœκ·Έ μ‚¬μš©: v1.0.0, v1.0.1 λ“± λ²„μ „λ³„λ‘œ νƒœκ·Έλ₯Ό μ§€μ •ν•˜μ—¬ νŠΉμ • 버전을 μ‰½κ²Œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • latest νƒœκ·Έ 주의: latest νƒœκ·ΈλŠ” 항상 μ΅œμ‹  이미지λ₯Ό κ°€λ¦¬ν‚€λ―€λ‘œ, 배포 ν™˜κ²½μ—μ„œλŠ” λͺ…μ‹œμ μΈ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•ˆμ „ν•©λ‹ˆλ‹€.
  • μΌκ΄€λœ νƒœκ·Έ μ „λž΅: ν”„λ‘œμ νŠΈλ§ˆλ‹€ μΌκ΄€λœ νƒœκ·Έ μ „λž΅μ„ μˆ˜λ¦½ν•˜μ—¬ κ΄€λ¦¬μ˜ νŽΈμ˜μ„±μ„ λ†’μž…λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ μžλ™ μž¬μ‹œμž‘ μ„€μ •

μ»¨ν…Œμ΄λ„ˆκ°€ 예기치 μ•Šκ²Œ μ’…λ£Œλ˜μ—ˆμ„ λ•Œ μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  --restart unless-stopped \
  daehyunbigbread/mbti:embedded-db
  • μ˜΅μ…˜ μ„€λͺ…:
    • --restart unless-stopped: μ»¨ν…Œμ΄λ„ˆκ°€ μˆ˜λ™μœΌλ‘œ μ€‘μ§€λ˜μ§€ μ•ŠλŠ” ν•œ, Dockerκ°€ μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•©λ‹ˆλ‹€.

포트 λ§€ν•‘ μ„€μ •

ν˜ΈμŠ€νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆ κ°„μ˜ 포트λ₯Ό λ§€ν•‘ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  -p 3000:3000 \
  daehyunbigbread/mbti:embedded-db
  • μ˜΅μ…˜ μ„€λͺ…:
    • -p [호슀트 포트]:[μ»¨ν…Œμ΄λ„ˆ 포트]: 호슀트의 3000 포트λ₯Ό μ»¨ν…Œμ΄λ„ˆμ˜ 3000 ν¬νŠΈμ— λ§€ν•‘ν•©λ‹ˆλ‹€.
  • 효과: μ™ΈλΆ€μ—μ„œ http://localhost:3000으둜 μ ‘κ·Όν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆ λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 접속할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν™˜κ²½ λ³€μˆ˜ 파일 ν™œμš©

μ—¬λŸ¬ 개의 ν™˜κ²½ λ³€μˆ˜λ₯Ό 관리할 λ•ŒλŠ” --env-file μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜ νŒŒμΌμ„ ν™œμš©ν•˜λŠ” 것이 νŽΈλ¦¬ν•©λ‹ˆλ‹€.
  • ν™˜κ²½ λ³€μˆ˜ 파일 생성 (.docker.env):
PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_NAME=db_mbti
DB_USERNAME=user_mbti
DB_PASSWORD=pw_mbti
  • μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ μ‹œ ν™˜κ²½ λ³€μˆ˜ 파일 μ§€μ •:
docker container run \
--name mbti \
--env-file .docker.env \
--rm \
-d \
daehyunbigbread/mbti:embedded-db
  • μž₯점: ν™˜κ²½ λ³€μˆ˜λ₯Ό ν•œ κ³³μ—μ„œ 관리할 수 μžˆμ–΄ νŽΈλ¦¬ν•˜λ©°, μ½”λ“œμ™€ ν™˜κ²½ 섀정을 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.

docker container run λͺ…령어와 μ£Όμš” μ˜΅μ…˜λ“€μ„ μƒμ„Ένžˆ μ‚΄νŽ΄λ³΄κ³ , μ‹€μ œ 예제λ₯Ό 톡해 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  둜그λ₯Ό ν™•μΈν•˜λŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ»¨ν…Œμ΄λ„ˆλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μΆ”κ°€ 팁과 μ£Όμ˜μ‚¬ν•­λ„ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

Dockerλ₯Ό ν™œμš©ν•˜λ©΄ 개발, ν…ŒμŠ€νŠΈ, 배포 κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” ν™˜κ²½ 차이 문제λ₯Ό ν•΄κ²°ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 이식성과 ν™•μž₯성을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.


참고 자료