Docker Compose: 초보자 가이드

안녕하세요, 미래의 Docker 마에스트로 여러분! Docker Compose의 세계로 안내해드리게 되어 기쁩니다. 컴퓨터 과학을 가르쳐온 지 오래된 저는 많은 학생들이 컨테이너화 개념에 어려움을 겪는 것을 목격했습니다. 하지만 두려워 마세요! 이 튜토리얼이 끝나면, 프로처럼 컨테이너를 조율할 수 있을 것입니다.

Docker - Compose

Docker Compose는 무엇인가요?

들어가기 전에, 기본 개념을了解一下みましょう. 큰 파티를 계획하는 것을 상상해보세요(어떤 이유로 좋은 비유가 아닐까요?). 음식, 음료, 음악, 장식을 조정해야 합니다. Docker Compose는 파티 계획 도구와 같지만, 컨테이너에 대해 그런 일을 합니다!

기술적으로 설명하자면, Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하는 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨을 구성하고, 단일 명령어로 모든 서비스를 생성하고 시작할 수 있습니다.

Docker Compose - 설치

이제 Docker Compose를 시스템에 설치해보겠습니다. 과정은 쉽기 그 자체입니다(mmm... 파이).

Windows와 Mac 사용자를 위한 설치

이미 Docker Desktop을 설치했다면, 축하합니다! 이미 Docker Compose가 포함되어 있습니다. 설치와 함께 제공됩니다. 다음 섹션으로 건너가서 기쁜 춤을 추세요.

Linux 사용자를 위한 설치

우리의 리눅스 친구들은 Docker Compose를 별도로 설치해야 합니다. 다음과 같이 하세요:

  1. 현재 안정된 버전의 Docker Compose를 다운로드합니다:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 바이너리에 실행 권한을 적용합니다:
sudo chmod +x /usr/local/bin/docker-compose
  1. 설치를 확인합니다:
docker-compose --version

버전 번호를 본다면, 모든 것이 잘되었습니다!

첫 번째 Docker-Compose 파일 생성

이제 Docker Compose가 설치되었으므로, 첫 번째 docker-compose.yml 파일을 생성해보겠습니다. 이 파일은 애플리케이션의 레시피와 같아서, Docker에게 필요한 재료(서비스)와 그 준비 방법을 알려줍니다.

Python Flask와 Redis를 사용하여 간단한 웹 애플리케이션을 만들어보겠습니다. 이 기술에 익숙하지 않아도 걱정하지 마세요! 간단하게 진행하겠습니다!

프로젝트를 위한 새로운 디렉토리를 만들고 그 안으로 이동합니다:

mkdir my_first_compose_project
cd my_first_compose_project

이제 docker-compose.yml 파일을 생성해보겠습니다:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

이를 구분해보겠습니다:

  • version: '3': 사용하는 Docker Compose 파일 형식의 버전을 지정합니다.
  • services: 실행하고 싶은 컨테이너를 정의합니다.
  • web: Flask 애플리케이션 서비스입니다.
  • build: .: 현재 디렉토리에 있는 Dockerfile을 사용하여 이미지를 빌드합니다.
  • ports: - "5000:5000": 호스트의 포트 5000을 컨테이너의 포트 5000으로 매핑합니다.
  • redis: Redis 서비스입니다.
  • image: "redis:alpine": Docker Hub에서 공식 Redis 이미지를 사용합니다.

Flask 애플리케이션 생성

이제 간단한 Flask 애플리케이션을 생성해보겠습니다. app.py 파일을 만듭니다:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
redis.incr('hits')
return f'Hello World! I have been seen {redis.get("hits").decode("utf-8")} times.'

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

이 간단한 앱은 매번 페이지를 방문할 때 Redis에 카운터를 증가시킵니다.

Dockerfile 생성

다음으로, Flask 애플리케이션을 빌드하기 위한 Dockerfile을 생성해야 합니다. Dockerfile 파일을 만듭니다:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

이 Dockerfile은 다음을 수행합니다:

  1. Python 3.7 Alpine 이미지를 시작합니다.
  2. 작업 디렉토리를 /code로 설정합니다.
  3. Flask 환경 변수를 설정합니다.
  4. 필요한 의존성을 설치합니다.
  5. Python 요구 사항을 복사하고 설치합니다.
  6. 포트 5000을 노출합니다.
  7. 현재 디렉토리를 컨테이너로 복사합니다.
  8. Flask를 실행하는 명령을 설정합니다.

요구 사항 파일 생성

마지막으로, Python 의존성을 지정해야 합니다. requirements.txt 파일을 만듭니다:

flask
redis

Docker Compose 애플리케이션 실행

이제 흥미로운 부분입니다 - 애플리케이션을 실행하는 것! 터미널에서 다음 명령어를 실행합니다:

docker-compose up

Docker Compose가 이미지를 빌드하고 서비스를 시작하는 것을 볼 수 있습니다. 완료되면, 웹 브라우저를 열고 http://localhost:5000에 접속합니다. "Hello World" 메시지를 볼 수 있으며, 페이지를 새로 고침할 때마다 카운터가 증가합니다.

Docker Compose 명령어

다음은 일반적인 Docker Compose 명령어 표입니다:

명령어 설명
docker-compose up 컨테이너 생성 및 시작
docker-compose down 컨테이너 중지 및 제거, 네트워크, 이미지, 볼륨 제거
docker-compose ps 컨테이너 목록
docker-compose logs 컨테이너 출력 확인
docker-compose build 서비스 빌드 또는 재빌드
docker-compose start 서비스 시작
docker-compose stop 서비스 중지

결론

축하합니다! Docker Compose를 사용하여 첫 번째 다중 컨테이너 애플리케이션을 생성하고 실행했습니다. Docker Compose의 기능을 아직 미처리한 부분이 많지만, 이 튜토리얼이 충분한 기초를 제공해드렸기를 바랍니다.

Docker와 컨테이너화를 배우는 것은 요리를 배우는 것과 같습니다 - 연습이 필요하지만, 한 번 익혀지면 복잡한 다중 컨테이너 레시피를 쉽게 만들 수 있습니다!

미래의 Docker 셰프 여러분, 즐겁게 조율하세요!

Credits: Image by storyset