1. 도커 컴포즈(Docker Compose)란 무엇일까?
만약 MySQL, WordPress를 한 서버에 설치해야 한다고 생각해봅시다. 각각의 컨테이너를 만들고 설정하는 것은 매우 귀찮은 일입니다. 이런 단점을 해결하기 위해 도커 컴포즈(Docker Compose)가 사용됩니다.
도커 컴포즈는 시스템 구축과 관련된 명령어를 하나의 텍스트 파일에 정의해 명령어 한번에 시스템 전체를 실행하고
종료와 폐기까지 한번에 처리할 수 있도록 도와주는 도구입니다.
도커 컴포즈는 시스템 구축에 필요한 설정을 YAML 포맷으로 기재한 정의 파일을 이용해 전체 시스템을 일괄 실행 또는 종료 및 삭제합니다. (정의 파일에는 컨테이너나 볼륨을 어떠한 설정으로 만들지에 대한 항목이 들어가게 됩니다.)
2. 도커 컴포즈와 Dockerfile 스크립트 차이점
도커 컴포즈는 텍스트 파일에 기재된 정의를 따라 컨테이너를 생성합니다.
Dockerfile 스크립트는 이미지를 만들기 위한 것으로 네트워크나 볼륨은 만들 수 없습니다.
- 도커 컴포즈는 docker 명령어를 여러 개 모아놓은 것과 같습니다.
- 도커 컴포즈는 컨테이너 주변 환경을 생성하고 네트워크와 볼륨까지 함께 만들 수 있습니다.
3. 도커 컴포즈 파일을 작성하는 방법
본격적으로 도커 컴포즈를 사용해봅시다.(도커 컴포즈가 설치되어 있어야 합니다.)
도커 컴포즈를 사용하려면 호스트 컴퓨터에 폴더를 만들고 정의 파일을 배치해줍니다.
ex) docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wordpress_db
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: test1234
MYSQL_DATABASE: test
MYSQL_USER: test_user
MYSQL_PASSWORD: test1234
wordpress:
image: wordpress:latest
container_name: wordpress_app
depends_on:
- db
ports:
- "8080:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: test_user
WORDPRESS_DB_PASSWORD: test1234
WORDPRESS_DB_NAME: test
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
도커 컴포즈 파일은 맨 앞에 컴포즈 버전을 적고 service, networks, volums를 차례로 적게 됩니다.
- version : Compose 파일의 형식 버전을 지정합니다.
- services : 애플리케이션을 구성하는 하나 이상의 서비스(컨테이너)를 정의합니다.
- image : 사용할 Docker 이미지를 지정합니다. 해당 이미지를 기반으로 컨테이너가 생성됩니다.
- ports : 호스트와 컨테이너간 포트를 매핑합니다.
- volumes : 호스트와 컨테이너 간 디렉토리를 매핑하거나 볼륨을 사용합니다.
- environment : 컨테이너 내에서 사용할 환경 변수를 설정합니다.
- depends_on : 다른 서비스에 대한 의존관계 컨테이너를 생성하는 순서나 연동 여부를 정의합니다. (위 예시에서는 Mysql을 생성한 후 wordpress 컨테이너를 만든다.)
파일 이름은 docker-compose.yml이라고 지어야합니다. 별도의 파일이름을 지정하고 싶다면 -f 옵션을 사용해 파일이름을 지정해줍니다.
4. 도커 컴포즈 실행
지금까지 작성한 도커 컴포즈 파일을 실행해줍니다.
(해당 파일이 존재하는 폴더로 이동해 docker-compose up 명령어를 실행해도 됩니다.)
up 커맨드 : 파일에 기재된 대로 이미지를 내려받고 컨테이너를 생성 및 실행한다. 네트워크나 볼륨에 대한 정의도 기재할 수 있어 주변 환경을 한꺼번에 생성할 수 있습니다.
docker-compose -f [정의 파일 경로] up [옵션]
docker-compose 정의파일에 설정된대로 컨테이너를 생성하고 정상적으로 작동하는 것을 볼 수 있습니다.
이번에는 생성한 컨테이너와 네트워크를 종료 및 삭제해보겠습니다.
down 커맨드 : 컨테이너와 네트워크를 정지 및 삭제한다(볼륨과 이미지는 삭제하지 않는다) 컨테이너와 네트워크 삭제 없이 종료만 하고 싶다면 stop 커맨드를 이용합니다.
docker-compose down
컨테이너가 정상적으로 종료 및 삭제된 것을 볼 수 있습니다.
(down 커맨드는 컨테이너와 네트워크 정보만 삭제하므로 이미지와 볼륨은 따로 삭제해줘야 합니다.)
참고
그림과 실습으로 배우는 도커 & 쿠버네티스
'Docker' 카테고리의 다른 글
[Docker] MySQL 설치 및 사용자 생성하기 (0) | 2024.02.04 |
---|---|
[Docker] Ubuntu 도커 설치 (0) | 2024.01.11 |