KR_Virt_Docker - somaz94/DevOps-Engineer GitHub Wiki

Docker & Dockerfile & Docker Compose

2. Docker & DockerFile & Docker Compose

Docker๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค์˜ ์šด์˜์ฒด์ œ ์ˆ˜์ค€ ๊ฐ€์ƒํ™”์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์ถ”์ƒํ™” ๋ฐ ์ž๋™ํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Docker๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ ๊ธฐ๋Šฅ(์˜ˆ: cgroups ๋ฐ ์ปค๋„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค)๊ณผ ์œ ๋‹ˆ์˜จ ํŒŒ์ผ ์‹œ์Šคํ…œ(OverlayFS์™€ ๊ฐ™์€)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๋ฆฌ๋ˆ…์Šค ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹œ์ž‘ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

Docker์˜ ์ฃผ์š” ํŠน์ง•

  1. ์ปจํ…Œ์ด๋„ˆํ™”: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ์˜์กด์„ฑ์„ ์ปจํ…Œ์ด๋„ˆ์— ํŒจํ‚ค์ง•ํ•˜์—ฌ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  2. ๊ฒฝ๋Ÿ‰์„ฑ: ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๊ณ„์˜ OS ์ปค๋„์„ ๊ณต์œ ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋‹น OS๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์•„ ๊ฐ€์ƒ ๋จธ์‹ ๋ณด๋‹ค ๋” ๊ฐ€๋ณ๋‹ค.
  3. ์ด์‹์„ฑ: Docker๋กœ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Docker๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์–ด๋””์—์„œ๋‚˜ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
  4. ๊ฒฉ๋ฆฌ: Docker๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฒฉ๋ฆฌ๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํ‚น ๋ฐ ๊ณ ์œ ํ•œ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์„ ๊ฐ€์ง„๋‹ค.
  5. Docker Hub: Docker Hub๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์œ„ํ•œ ์ €์žฅ์†Œ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” Docker Hub์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Dockerfile

Dockerfile์€ ์ด๋ฏธ์ง€๋ฅผ ์กฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ํ…์ŠคํŠธ ๋ฌธ์„œ์ด๋‹ค. docker build๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์†์ ์ธ ์ปค๋งจ๋“œ ๋ผ์ธ ์ง€์‹œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Dockerfile์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ
  • FROM: ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • RUN: ํ˜„์žฌ ์ด๋ฏธ์ง€ ์œ„์— ์ƒˆ ๋ ˆ์ด์–ด์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • COPY: src์—์„œ ์ƒˆ ํŒŒ์ผ, ๋””๋ ‰ํ† ๋ฆฌ ๋˜๋Š” ์›๊ฒฉ ํŒŒ์ผ URL์„ ๋ณต์‚ฌํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ dest ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • CMD: ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•œ๋‹ค. ๋งˆ์ง€๋ง‰ CMD๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.
  • EXPOSE: Docker์—๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ง€์ •๋œ ๋„คํŠธ์›Œํฌ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์•Œ๋ฆฐ๋‹ค.
  • ENV: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ <key>๋ฅผ ๊ฐ’ <value>๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ENTRYPOINT: ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
Dockerfile ์˜ˆ์‹œ
# ๊ณต์‹ Python ๋Ÿฐํƒ€์ž„์„ ๋ถ€๋ชจ ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉ(Docker Hub ๋‹ค์šด๋กœ๋“œ)
FROM python:3.7-slim

# ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /usr/src/app

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ์ปจํ…Œ์ด๋„ˆ์˜ /usr/src/app์— ๋ณต์‚ฌ
COPY . .

# requirements.txt์— ๋ช…์‹œ๋œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
RUN pip install --no-cache-dir -r requirements.txt

# ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ํฌํŠธ 80 ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •
EXPOSE 80

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •์˜
ENV NAME World

# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ app.py ์‹คํ–‰
CMD ["python", "./app.py"]
  • ํ•ด๋‹น Dockerfile์€ Python ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ , ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๊ณ , ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜๊ณ , ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๊ณ , ํฌํŠธ๋ฅผ ๊ณต๊ฐœํ•˜๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•œ๋‹ค.

Docker Compose

Docker Compose๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Docker Compose ์˜ˆ์‹œ
version: "3"
services:
  web:
    image: "webapp:latest"
    ports:
      - "5000:5000"
  db:
    image: "postgres:latest"
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • ํ•ด๋‹น docker-compose.yml ํŒŒ์ผ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์™€ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค. ์›น ์„œ๋น„์Šค๋Š” 5000 ํฌํŠธ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, db ์„œ๋น„์Šค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ๋œ๋‹ค.

Reference


์ฐธ๊ณ  ์ž๋ฃŒ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ