Docker-Compose 서비스 정의 및 사용 방법
Docker-Compose 서비스 정의 및 사용 방법
Docker-Compose 서비스 정의 및 사용 방법
Docker-Compose는 여러 Docker 컨테이너를 쉽게 관리할 수 있도록 도와주는 도구입니다. 이 도구의 중심에는 서비스라는 개념이 있습니다. 서비스는 하나의 애플리케이션 구성 요소를 나타내며, 각 서비스는 독립적으로 실행될 수 있습니다. 이번 블로그 글에서는 Docker-Compose 서비스의 정의와 사용 방법에 대해 자세히 설명하겠습니다.
1. Docker-Compose 서비스란?
서비스는 Docker-Compose 파일(docker-compose.yml
) 내에서 정의된 특정 기능을 수행하는 단위입니다. 각 서비스는 개별적으로 실행되는 Docker 컨테이너를 나타내며, 서로 다른 이미지와 설정을 가질 수 있습니다. 예를 들어, 웹 애플리케이션을 구축할 때, 다음과 같은 서비스를 정의할 수 있습니다:
- 웹 서버 (예: Nginx, Apache)
- 애플리케이션 서버 (예: Node.js, Django)
- 데이터베이스 서버 (예: MySQL, PostgreSQL)
- 캐시 서버 (예: Redis)
서비스는 서로 통신할 수 있도록 설정할 수 있으며, 이로 인해 복잡한 애플리케이션 아키텍처를 구성할 수 있습니다.
2. 서비스 정의 방법
서비스는 docker-compose.yml
파일에서 정의합니다. 기본적인 구조는 다음과 같습니다:
version: '3' # Docker Compose의 버전
services: # 서비스 정의 시작
service_name: # 서비스 이름
image: <image_name> # 사용할 Docker 이미지
build: # 이미지 빌드 설정
context: <path> # Dockerfile 경로
dockerfile: <file_name> # 사용할 Dockerfile 이름
ports: # 포트 매핑
- "<host_port>:<container_port>"
volumes: # 데이터 볼륨
- <volume_name>:<container_path>
environment: # 환경 변수
- <KEY>=<VALUE>
depends_on: # 서비스 종속성
- <dependency_service_name>
2.1. 서비스 이름
각 서비스는 고유한 이름을 가져야 합니다. 이 이름을 통해 다른 서비스와의 관계를 정의할 수 있습니다. 서비스 이름은 명확하고 이해하기 쉬운 것이 좋습니다. 예를 들어, web
, db
, api
와 같은 이름을 사용할 수 있습니다.
2.2. 이미지
image
필드는 해당 서비스에서 사용할 Docker 이미지를 지정합니다. Docker Hub와 같은 이미지 레지스트리에서 이미지를 가져오거나, 로컬에서 빌드한 이미지를 사용할 수 있습니다.
2.3. 빌드 설정
build
필드는 Dockerfile을 사용하여 이미지를 빌드하기 위한 설정입니다. context
는 Dockerfile의 경로를, dockerfile
은 사용할 Dockerfile의 이름을 지정합니다.
build 설정은 docker-compose.yml 파일 내에서 특정 서비스 아래에 정의됩니다. 기본적인 구조는 다음과 같습니다:
services:
service_name: # 서비스 이름
build: # 빌드 설정 시작
context: <path> # Dockerfile의 위치
dockerfile: <file_name> # 사용할 Dockerfile 이름 (선택 사항)
- context: 빌드를 수행할 디렉토리의 경로를 지정합니다. 이 경로는 Dockerfile이 위치한 폴더와 해당 폴더에 포함된 모든 파일을 포함해야 합니다. Docker는 이 경로 내의 파일을 사용하여 이미지를 빌드합니다.
예를 들어, 다음과 같은 디렉토리 구조가 있을 때:
/myapp
|-- docker-compose.yml
|-- Dockerfile
|-- app.py
docker-compose.yml에서 context를 . (현재 디렉토리)로 설정할 수 있습니다:
services:
app:
build:
context: .
- dockerfile: 사용할 Dockerfile의 이름을 지정합니다. 기본적으로 Docker는 Dockerfile이라는 이름의 파일을 찾습니다. 그러나 다른 이름의 Dockerfile을 사용할 경우 이 옵션을 통해 파일명을 명시할 수 있습니다.
예를 들어, MyDockerfile이라는 이름의 Dockerfile을 사용하려면 다음과 같이 설정할 수 있습니다:
services:
app:
build:
context: .
dockerfile: MyDockerfile
2.4. 포트 매핑
ports
필드는 호스트와 컨테이너 간의 포트를 매핑합니다. 이 매핑을 통해 외부에서 서비스에 접근할 수 있게 됩니다.
ports:
- "8080:80" # 호스트의 8080 포트를 컨테이너의 80 포트와 연결
2.5. 볼륨
volumes
필드는 컨테이너의 데이터를 지속적으로 저장하기 위해 사용하는 볼륨을 정의합니다. 이를 통해 컨테이너가 종료되더라도 데이터가 사라지지 않도록 할 수 있습니다.
volumes:
- db_data:/var/lib/mysql # db_data 볼륨을 MySQL 데이터 디렉터리에 연결
2.6. 환경 변수
environment
필드는 서비스의 환경 변수를 정의합니다. 환경 변수를 사용하면 서비스의 동작을 조정할 수 있습니다.
environment:
- NODE_ENV=production # NODE_ENV 변수를 production으로 설정
2.7. 종속성
depends_on
필드는 서비스 간의 종속성을 정의합니다. 이를 통해 특정 서비스가 시작되기 전에 다른 서비스가 먼저 실행되도록 설정할 수 있습니다.
depends_on:
- db # web 서비스가 db 서비스가 실행된 후에 시작됨
3. 서비스 사용 방법
3.1. Docker-Compose 파일 작성
서비스를 정의한 docker-compose.yml
파일을 작성합니다. 예를 들어, 다음은 웹 애플리케이션과 데이터베이스를 설정한 예제입니다:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
3.2. 서비스 시작
서비스를 시작하려면, 터미널에서 docker-compose up
명령어를 실행합니다. 이 명령어는 모든 서비스를 실행하고, 필요한 이미지를 자동으로 다운로드합니다.
docker-compose up
3.3. 서비스 중지 및 제거
서비스를 중지하고, 모든 컨테이너를 제거하려면 docker-compose down
명령어를 사용합니다.
docker-compose down
3.4. 서비스 상태 확인
실행 중인 서비스와 컨테이너의 상태를 확인하려면 docker-compose ps
명령어를 사용합니다.
docker-compose ps
결론
Docker-Compose 서비스를 정의하고 사용하는 방법에 대해 알아보았습니다. 서비스는 Docker-Compose의 핵심 요소로, 애플리케이션의 다양한 구성 요소를 효과적으로 관리할 수 있게 해줍니다. 위의 내용을 바탕으로 여러분의 프로젝트에 Docker-Compose를 적용해 보시기 바랍니다. 다양한 서비스의 조합을 통해 복잡한 애플리케이션도 쉽게 관리할 수 있을 것입니다.