요약
도커 컴포즈는 다수의 컨테이너 어플리케이션을 정의하고(생성), 실행하는 툴을 의미한다. 이 도커 컴포즈는 간단히 하나의 텍스트파일(YAML 형식)을 작성해서, 여러개의 시스템을 실행하고, 종료, 폐기하여 컨테이너를 운용할 수 있는 툴이다[1]
Docker-compose vs Dockerfile vs 쿠버네티스
1. 도커 컴포즈(docker-compose)은 다수의 컨테이너의 실행(run), 정지(stop), 삭제(rm)을 한번해 실행 시킬 수 있는 명령어(툴)이다. 또한, 컨테이너와 주변환경, 네트웤, 볼륨까지 한번에 생성할 수 있다. 즉
2. Dockerfile은 이미지를 만들기 위한 것이다. 도커 이미지 내에 여러 서비스를 넣어둘 수 있긴하지만, 동작상태의 컨테이너가 아닌 붕어빵 틀에 해당하는 이미지를 만들기 위한 것이다.
3. 쿠버네티스도 여러개의 컨테이너를 오케스트레이션(=다수의 컨테이너를 운용)한다는 점에서 동일하다. 단, 관리기능이 더 자세하다.
즉, 도커 컨테이너-> docker compose, 도커 이미지->Dockerfile에 해당하다. 도커 컴포즈와 쿠버네티스의 차이는 컨테이너는 더 자세히 관리할 수 있는 툴인 것에 비해서, 도커 컴포즈는 단순히 여러 컨테이너를 정지/삭제 정도밖에할 수 없다.
도커 컴포즈 작성하는 법: 도커 컴포즈에서 쓰는 YAML파일 작성방법
도커 컴포즈는 한 파일 내에 docker-compose.yml 파일 있으면된다. 여러 도커 컴포즈를 생성할 경우, 각 폴더별로 docker-compose.yml파일이 있어야 한다. 꼭 "docker-compose.yaml"으로 YAML파일이 있을 필요는 없으나, 하나씩은 있어야한다. 도커 컴포즈의 파일은 아래와 같이 작성한다. "version"을 제외하고 "services", "networks", "volumes"은 모두 s가 붙는다
1) version 을 적는다
2) services
3) networks (옵션)
4) volumes (옵션)
# example) docker-compose.yaml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
Docker compose 명령어: up, down, stop
// 도커 컴포즈내에 정의된 컨테이너 실행
$ docker-compose -f [docker-compose_file_path] up 옵션
// 도커 컴포즈내에 정의된 컨테이너만 정지
$ docker-compose -f [docker-compose_file_path] stop 옵션
// 도커 컴포즈내에 정의된 컨테이너만 종료/삭제, 네트워크 종료
$ docker-compose -f [docker-compose_file_path] down 옵션
아래와 같이 도커 컴포즈에 정의된 컨테이너 2개와 네트워크1개를 한번에 폐기할 수 있다. 네트워크도 삭제되는 것에 주의하고, stop이 아닌 remove된다는 것에 주의를 기울이자.
// docker-compose에 정의된 컨테이너를 한번에 종료 후 삭제
$ docker-compose -f docker-compose.yml down
[+] Running 3/3
- Container 03-wordpress000ex12-1 Removed 1.5s
- Container 03-mysql000ex11-1 Removed 2.2s
- Network 03_wordpress000net1 Removed 0.5s
Reference
[1] https://docs.docker.com/compose/
[2] https://docs.docker.com/compose/gettingstarted/
'Data science > MLOps' 카테고리의 다른 글
[쿠버네티스] 서비스(Service) 이용하기, 클러스터IP에 접속이 안될 때, (0) | 2022.12.10 |
---|---|
[MLOps 해제(解題) 1] MLOps workflow에 대한 기본 이해 (0) | 2022.11.05 |
Docker: 파일 복사 및 볼륨 마운 (0) | 2022.11.01 |
쿠버네티스 오류 해결: The connection to the server localhost:8080 was refused - did you specify the right host or port (0) | 2022.07.26 |
[Kubernetes] Controller 이해하기 (0) | 2022.07.26 |