Docker-compose

Docker-compose

Docker Compose ํ™œ์šฉ ๐Ÿ› ๏ธ


1๏ธโƒฃ Docker Compose ์„ค์น˜

Docker Compose๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ”น 1 Linux์—์„œ Docker Compose ์„ค์น˜

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

๐Ÿ›  ์„ค์น˜ ํ™•์ธ

docker-compose --version

๐Ÿ“Œ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!



2๏ธโƒฃ Docker Compose ๊ธฐ๋ณธ ๊ฐœ๋… ๐Ÿ“œ

๐Ÿ“Œ Docker Compose๋ž€?

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ
  • docker-compose.yml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜
  • ๋‹จ์ผ ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰, ์ค‘์ง€, ์‚ญ์ œ ๊ฐ€๋Šฅ

๐Ÿ”น Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ!
โœ”๏ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ
โœ”๏ธ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋„คํŠธ์›Œํฌ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •
โœ”๏ธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ๋ณผ๋ฅจ ์„ค์ • ๋“ฑ์„ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ

โœ… ์‚ฌ์šฉ ์˜ˆ์‹œ

  • API ์„œ๋ฒ„ + DB + ์›น์„œ๋ฒ„
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ

๐Ÿ“Œ Docker Compose ์„ค์น˜ ํ™•์ธ

docker-compose --version

3๏ธโƒฃ docker-compose.yml ์ž‘์„ฑ๋ฒ• ๐Ÿ“

๐Ÿ“Œ ๊ธฐ๋ณธ์ ์ธ docker-compose.yml ๊ตฌ์กฐ

version: "3.8"  # Docker Compose ๋ฒ„์ „

services:
  app:
    image: nginx
    ports:
      - "8080:80"

  database:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb

๐Ÿ“Œ ์„œ๋น„์Šค ์ •์˜

ํ‚ค์›Œ๋“œ ์„ค๋ช…
version Docker Compose ํŒŒ์ผ์˜ ๋ฒ„์ „
services ์‹คํ–‰ํ•  ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
image ์‚ฌ์šฉํ•  Docker ์ด๋ฏธ์ง€
build Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๋นŒ๋“œ
ports ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํฌํŠธ ๋งคํ•‘
volumes ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•œ ๋ณผ๋ฅจ ์„ค์ •
environment ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

4๏ธโƒฃ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ (API ์„œ๋ฒ„ + DB + ์›น์„œ๋ฒ„)

๐Ÿ“Œ ์˜ˆ์ œ: API ์„œ๋ฒ„ (Flask) + MySQL + Nginx ๊ตฌ์„ฑ

๐Ÿ”น 1 ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

my_project/
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ app.py
โ”‚   โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ nginx/
    โ”œโ”€โ”€ default.conf

๐Ÿ”น 2 Flask API ์„œ๋ฒ„ ๊ตฌ์„ฑ

๐Ÿ“Œ Flask API ์„œ๋ฒ„ ์ฝ”๋“œ (app/app.py)

from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    return "Hello, Docker Compose!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

๐Ÿ“Œ Flask ์˜์กด์„ฑ ํŒŒ์ผ (app/requirements.txt)

flask

๐Ÿ“Œ Flask ์ปจํ…Œ์ด๋„ˆ Dockerfile (app/Dockerfile)

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์„ค์ •
FROM python:3.9

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app

# ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜
COPY requirements.txt .
RUN pip install -r requirements.txt

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณต์‚ฌ
COPY . .

# Flask ์‹คํ–‰
CMD ["python", "app.py"]

๐Ÿ”น 3 Nginx ์„ค์ •

๐Ÿ“Œ Nginx ์„ค์ • ํŒŒ์ผ (nginx/default.conf)

server {
    listen 80;
    
    location / {
        proxy_pass http://app:5000;
    }
}

๐Ÿ”น 4 docker-compose.yml ์ž‘์„ฑ

๐Ÿ“Œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•œ docker-compose.yml

version: "3.8"

services:
  app:
    build: ./app
    ports:
      - "5000:5000"
    depends_on:
      - database

  database:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
    volumes:
      - db_data:/var/lib/mysql

  nginx:
    image: nginx
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    depends_on:
      - app

volumes:
  db_data:

5๏ธโƒฃ Docker Compose๋กœ ์„œ๋น„์Šค ๊ด€๋ฆฌ ๐ŸŽ›๏ธ

๐Ÿ”น 1 ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

docker-compose up -d

-d ์˜ต์…˜: ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰

๐Ÿ“Œ ์‹คํ–‰ ํ™•์ธ

docker-compose ps

๐Ÿ”น 2 ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€

docker-compose down

docker-compose down์„ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์™€ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ข…๋ฃŒ๋จ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„๋กœ ์ค‘์ง€ํ•˜๋ ค๋ฉด?

docker-compose stop

๐Ÿ”น 3 ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋งŒ ์‹คํ–‰/์ค‘์ง€

docker-compose up -d app  # app ์„œ๋น„์Šค๋งŒ ์‹คํ–‰
docker-compose stop app  # app ์„œ๋น„์Šค๋งŒ ์ค‘์ง€

๐Ÿ”น 4 ๋กœ๊ทธ ํ™•์ธ

docker-compose logs -f

๐Ÿ”น 5 ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†

docker exec -it my_project_app_1 bash

๐Ÿ“Œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ํ™•์ธ

docker-compose ps

๊ฒฐ๋ก  ๐ŸŽฏ

โœ… Docker Compose๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
โœ… docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅ
โœ… depends_on, volumes, environment ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ์—ฐ๋™์ด ๊ฐ€๋Šฅ
โœ… ์‹ค๋ฌด์—์„œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, CI/CD, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋“ฑ์— ํ™œ์šฉ

๐Ÿ“Œ ์ถ”๊ฐ€ ํ•™์Šต ๋ฆฌ์†Œ์Šค

RSS Feed