💡 목차
이번 시간에 학습할 부분은 아래와 같습니다.
- 도커 컴포즈 사용하는 이유
- 도커 컴프즈를 사용하는 이유를 알아봅니다.
- 도커 컴포즈 설치하기
- 도커 컴포즈를 사용하기 위해 설치를 먼저 해봅니다.
- 도커 컴포즈 사용하기
- 도커 컴프즈를 사용하고 파일 작성 방법에 대해 알아봅니다.
1. 도커 컴포즈 사용하는 이유
여러 개의 컨테이너를 실행해야 할 때나 도커 실행 시 설정이 많아지면 사용할 때 복잡해집니다. 예를 들어 한 워드프레스 애플리케이션을 구축하기 위해 mysql + wordpress 를 생성해야 한다면, 아래와 같이 하나씩 컨테이너를 생성해야 합니다.
해당 예제는 docker를 사용해보자 (docker 기본 명령어 사용해보기) 실습에서 다룬 부분입니다.
이와 같이 여러 개의 컨테이너를 하나의 서비스인 도커 컴포즈를 사용해서 한 파일로 정의한다면 번거롭지 않고 편리할 것 입니다. 그뿐만 아니라 실행에 필요한 옵션을 파일에 작성 가능하며, 컨테이너 간 실행 순서나 의존성도 관리할 수 있습니다.
2. 도커 컴포즈 설치하기
맥, 윈도우 환경은 도커 설치 시 자동 설치되었을 것이다. 따라서 리눅스 설치 방법만 알아보자.
3. 도커 컴포즈 사용하기
도커 컴포즈는 도커 실행 시 복잡한 설정을 쉽게 관리하기 위해 YAML 파일에 정의하는 툴입니다. 위에서 복잡하게 설정해서 실행한 애플리케이션을 docker-compose.yml 파일에 정의해서 간편하게 실행해 봅시다. 도커 문서에 있는 예제를 살펴봅시다.
🔹 docker-compose.yml 파일 작성하기
wordpress 허브에 있는 설명을 보며 작성해 봅시다. 우선 위에서 작성한 도커 실행을 docker-compose.yml 파일을 작성해서 간편하게 실행시켜 보자.
- docker-compose.yml 파일
🔹 docker compose 실행하기
해당 경로에 존재하는 docker-compose.yml 파일을 실행해 준다. -d 옵션은 백그라운드 모드에서 실행됩니다.
localhost:80 에 접속해보면 아래와 같이 워드프레스 화면이 나타납니다.
🔹 docker-compose.yml 파일 의미 살펴보기
그럼 docker-compose.yml 파일의 의미를 살펴봅시다. 그리고 YAML 파일을 작성하는 방법을 알아봅니다. 도커 컴포즈를 사용하기 위해 기존에 사용하던 run 명령어를 YAML 파일로 변환해야 합니다.
YAML 파일은 1. 버전 정의 2. 서비스 정의 3. 볼륨 정의 4 네트워크 정의 로 구성됩니다. 이 중 서비스 정의를 가장 많이 사용하며, 볼륨 정의와 네트워크 정의는 선택적으로 사용됩니다. 해당 파일은 2개의 공백으로 들여 쓰기를 하여 상위 항목과 구분합니다.
🔸 version
YAML 파일 포맷 버전을 나타냅니다. 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하면 최신 버전을 사용하는 것이 좋습니다. 도커 엔진과 도커 컴포즈의 호환성에 대한 내용은 도커 문서를 참고해 주세요.
아래와 같이 3만 적는 경우 3버전 최신 버전을 사용한다는 의미입니다.
🔸 service
생성될 컨터이너를 묶어놓은 단위입니다. 여기서는 wordpress와 db 컨테이너를 생성하였습니다.
- wordpress, db는 생성될 서비스의 이름입니다. 이 항목 아래에는 컨테이너가 생성될 때 필요한 옵션을 지정할 수 있습니다.
🔸 image
서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정합니다. docker run과 같이 이미지가 존재하지 않는 경우 저장소에서 자동으로 내려받습니다.
🔸 environment
docker run 명령어에서 -e 옵션과 동일합니다. 서비스의 컨테이너 내부에서 사용할 환경 변수를 지정합니다.
🔸 port
docker run 명령어의 -p 옵션과 같으며 서비스의 컨테이너를 개방할 포트를 설정합니다.
🔸 volumes
run 명령어에서 -v 옵션과 동일합니다.
🔸 command
컨테이너가 실행될 때 수행할 명령어를 설정합니다. docker run 명령어의 마지막 붙는 커맨드와 같습니다.
🔸 depends_on
특정 컨테이너에 대한 의존 관계를 나타내며, 이 항목에 명시된 컨테이너가 먼저 생성되고 실행됩니다.
해당 예제에서는 wordpress는 mysql db에 의존적이기 때문에 아래와 같이 설정해줍니다.
🔸 build
도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정합니다.
build 항목에 정의된 도커파일에서 이미지를 빌드하여 서비스의 컨테이너를 생성하도록 합니다. image는 빌드되면 생성되는 이미지 이름입니다.
🔹 docker-compose 명령어
🔸 docker-compose up
docker-compose 로 docker-compose.yml 파일에 정의된 컨테이너를 생성합니다. -d옵션으로 백그라운 모드로 실행 가능합니다.
🔸 docker-compose down
docker-compose 로 생성된 컨테이너 정지 후 삭제합니다.
🔸 docker-compose ps
docker-compose 로 생성된 컨테이너 목록을 확인할 수 있습니다.
마무리
이번 시간에는 도커 컴포즈를 직접 사용해 봤습니다. 다음 시간에는 아래의 내용을 학습할 예정입니다. 😀
- 도커 이미지 자동 배포하기