Docker & kubernetes
05. Docker compose
최슬슬
2024. 2. 12. 00:45
Docker compose
- 여러 개의 컨테니어 옵션과 환경을 정의한 파일(YAML)을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작하는 시스템
- docker compose를 쓰기 위해서는 반드시 컨테니어 설정이 정의된 YAML 파일을 작성해야함
- 리눅스 같은 경우 따로 docker compose 설치를 해야함
- 파일을 github에서 다운받고, 받은 파일을 "/usr/local/bin/"에 "docker-compose"라는 이름으로 저장
- chmod +x /usr/local/bin/docker-compose 이후, docker-composer -v로 설치 잘 되었는지 확인 가능
- 일반적으로 docker compose는 현재 디럭터리의 이름으로 된 프로젝트를 제어
- "-p" 옵션으로 제어할 프로젝트를 지정할 수 있음
- docer-compose -p {프로젝트 이름}
YAML 파일
- 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의로 구성됨
- 가장 많이 사용하는 것은 서비스 정의
- 볼륨과 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용 가능
- 일반적으로 현재 디렉터리 혹은 상위 디렉터리에 있는 "docker-compose.yml" 파일을 찾아 컨테이너를 실행하지만, 파일위치를 직접 입력해줄 수 있음
- docker-compose -f {파일 경로}
버전 정의
- 일반적으로 yml 파일 가장 위에 들어감
- 최신 버전을 사용하는 것을 권장
서비스 정의
- docker compose로 생성할 컨테이너 옵션을 정의
- 각 서비스는 컨테이너로 구현되고 하나의 프로젝트로서 도커 컴포즈에 의해 관리됨
- 서비스 이름들은 service의 하위 항목으로 정의되고 컨테이너 옵션은 서비스 이름의 하위 항목에 정의됨
- 하위 항목: image, links, enviroment, command, 네트워크 정의, 볼륨 정의 등
docker-compose config
- yml파일의 검사하여 오타나 파일 포맷이 적절한지 확인해줌
- "-f" 옵션으로 yml 파일 경로 지정 가능
-
- 만약 네트워크 정의를 하지 않는다면?
- 도커 컴포즈는 프로젝트 별로 브리지 타입의 네트워크를 생성하여 사용함
- 예시 yml 파일
- 만약 네트워크 정의를 하지 않는다면?
version: '3.0'
services:
web:
image: test
ports:
-"80:80"
mysql:
image: sql
command: mysql