Data science/MLOps

[5분 컷 이해] Docker compose 이해하기

연금(Pension)술사 2022. 11. 4. 21:14

 

요약


도커 컴포즈는 다수의 컨테이너 어플리케이션을 정의하고(생성), 실행하는 툴을 의미한다. 이 도커 컴포즈는 간단히 하나의 텍스트파일(YAML 형식)을 작성해서, 여러개의 시스템을 실행하고, 종료, 폐기하여 컨테이너를 운용할 수 있는 툴이다[1]

이미지 소스: https://ostechnix.com/introduction-to-docker-compose/

 

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/

 

 

반응형