Docker Compose는 복잡한 애플리케이션을 여러 개의 컨테이너로 나누어 관리할 수 있게 도와주는 도구입니다.
여러 개의 컨테이너를 함께 실행하고 설정하는 데 필요한 정보를 docker-compose.yml 파일에 정의합니다.
이 블로그에서는 docker-compose.yml 파일의 기본적인 작성법과 서비스 정의, 네트워크 설정 방법에 대해 초보자가 이해하기 쉽게 설명하겠습니다.
1. docker-compose.yml 파일이란?
docker-compose.yml 파일은 Docker Compose에서 사용할 설정 파일입니다.
이 파일에는 여러 컨테이너(서비스), 네트워크, 볼륨 등의 설정을 정의할 수 있습니다. YAML 형식으로 작성되며, 구성 요소들을 계층적으로 표현할 수 있습니다.
2. 서비스 정의
서비스는 Docker 컨테이너를 정의합니다. 각각의 서비스는 애플리케이션의 일부로서 독립적인 컨테이너로 실행됩니다. 예를 들어, 웹 서버, 데이터베이스 서버, 캐시 서버 등이 각각 하나의 서비스가 될 수 있습니다.
2.1 서비스 정의 기본 구조
서비스를 정의하는 기본적인 구조는 다음과 같습니다.
version: '3.8'
services:
service_name:
image: image_name:tag
ports:
- "host_port:container_port"
volumes:
- host_path:container_path
environment:
- ENV_VAR_NAME=value
- version: Compose 파일의 버전을 정의합니다.
- services: 컨테이너 서비스를 정의하는 블록입니다.
- service_name: 서비스의 이름을 정의합니다.
- image: 사용할 Docker 이미지를 정의합니다.
- ports: 호스트와 컨테이너 간의 포트를 매핑합니다.
- volumes: 호스트와 컨테이너 간의 디렉토리 매핑을 설정합니다.
- environment: 컨테이너의 환경 변수를 설정합니다.
2.2 서비스 정의 예제
간단한 웹 애플리케이션과 데이터베이스를 설정하는 예제를 보겠습니다.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- mynetwork
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydatabase
volumes:
- db_data:/var/lib/mysql
networks:
- mynetwork
- web: Nginx 웹 서버를 사용하는 서비스입니다. 호스트의 8080 포트를 컨테이너의 80 포트와 매핑합니다.
- db: MySQL 데이터베이스를 사용하는 서비스입니다. 환경 변수로 루트 비밀번호와 초기 데이터베이스 이름을 설정합니다.
3. 네트워크 설정
네트워크는 여러 컨테이너가 서로 통신할 수 있도록 설정하는 부분입니다. Docker Compose는 기본적으로 모든 서비스가 동일한 네트워크에 연결되도록 설정합니다. 필요에 따라 사용자 정의 네트워크를 생성할 수 있습니다.
3.1 네트워크 설정 기본 구조
네트워크를 설정하는 기본 구조는 다음과 같습니다.
networks:
network_name:
driver: network_driver
- networks: 네트워크 설정을 정의하는 블록입니다.
- network_name: 네트워크의 이름을 정의합니다.
- driver: 네트워크 드라이버를 정의합니다. 기본적으로 bridge가 사용됩니다.
3.2 네트워크 설정 예제
다음 예제에서는 mynetwork라는 사용자 정의 네트워크를 설정합니다.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
networks:
- mynetwork
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydatabase
volumes:
- db_data:/var/lib/mysql
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
volumes:
db_data:
- networks: mynetwork라는 이름의 네트워크를 정의합니다. driver는 기본적으로 bridge를 사용합니다.
- volumes: 데이터베이스 데이터의 영속성을 보장하기 위해 db_data라는 볼륨을 정의합니다.
4. docker-compose.yml 파일 작성 시 고려사항
- 환경 변수: 컨테이너에서 사용할 환경 변수를 설정할 때는 .env 파일을 사용하여 보안을 강화할 수 있습니다.
- 볼륨: 데이터의 영속성을 보장하려면 볼륨을 사용하여 호스트와 컨테이너 간의 데이터 공유를 설정합니다.
- 포트 매핑: 호스트와 컨테이너 간의 포트 매핑을 설정하여 외부와의 통신을 관리합니다.
- 네트워크: 여러 컨테이너가 서로 통신할 수 있도록 네트워크를 적절히 설정합니다.
Docker Compose는 여러 개의 컨테이너를 쉽게 정의하고 관리할 수 있게 도와주는 도구입니다. docker-compose.yml 파일을 작성하면, 다양한 서비스를 설정하고 네트워크를 구성할 수 있습니다. 이를 통해 복잡한 애플리케이션을 단순하고 일관된 방식으로 관리할 수 있습니다.
이 블로그에서는 Docker Compose의 기본 개념과 docker-compose.yml 파일 작성법을 초보자가 이해하기 쉽게 설명했습니다.
이 내용을 바탕으로 다양한 애플리케이션을 구성하고 관리하는 데 도움이 되길 바랍니다.
추가적인 기능이나 고급 설정은 Docker Compose 공식 문서를 참고하세요.
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.