코알못

[Docker] Docker Compose 란? 본문

ETC

[Docker] Docker Compose 란?

코린이s 2022. 12. 9. 23:29
728x90

이번 시간에는 Docker Compose 를 알아보도록 한다!

Docker Compose 를 이용하면 Docker 명령어를 사용할때 보다 여러 컨테이너 관리가 쉬워진다.

docker-compose.yml 이라는 파일로 어떻게 빌드할지, 여러 컨테이너들이 어떤 관계가 있는지 문서화를 할 수 있으며

실제 depends_on 을 정의하여 의존 관계를 주어 컨테이너 기동 순서를 정할 수 있다.

그러나 depends_on 의 경우 기동 순서만 정할뿐 앞 순서 컨테이너가 정상적으로 기동 됐는지는 확인하지 않는다.

이때 restart 옵션의 always 값을 지정하여 앞 순서 컨테이너가 정상적으로 기동되지 않아 컨테이너가 죽었을시 다시 기동되게 할 수 있으며 restart 옵션의 unless-stopped 값을 지정하여 서버가 죽었을시에도 다시 기동되게 할 수 있다.

그리고 scale 옵션을 통해 동일한 컨테이너를 여러개 띄우는 작업도 할 수 있다.

위와 같이 여러 컨테이너를 관리 하기 위한 기능을 가지고 있어 docker compose 를 이용하면 관리를 좀 더 쉽게 할 수 있다.

우선 명령어를 알아보자!

실행중인 프로젝트 목록 확인하는 명령어는 아래와 같다.

$ docker-compose ls
$ docker-compose ps

 

전체 프로젝트 목록을 확인할시에는 -a 를 붙이면 된다.

$ docker-compose ls -a

이미지를 빌드 하고 컨테이너 생성/시작 하고자 할때는 아래와 같이 입력한다.

$ docker-compose up

 

 

만약 프로젝트명을 지정하고 싶을때는 -p 백그라운드로 실행하고자 한다면 -d 를 붙이면 된다.

$ docker-compose -p [projectName] up -d

프로젝트 명칭과 네트워크 명칭은 아래와 같이 생성된다.

natwork name : [project name]_[natwork name or default]
volume name : [project name]_[volume name]
container name :  [project name]-[service name]-[container no]

만약 컨테이너/네트워크를 종료 하고 제거 하고자 하면 아래와 같이 입력하면 되며

$ docker-compose down

볼륨까지 제거하고자 한다면 -v 옵션을 넣는다.

$ docker-compose down -v

한번에 컨테이너를 재기동 하고 싶다면 아래와 같이 입력한다.

$ docker-compose stop
$ docker-compose start
$ docker-compose restart

만약 특정 컨테이너만 조작하고 싶다면 아래와 같이 서비스명을 뒤에 입력한다.

web 서비스 컨테이너가 3개 떠있다면 3개 모두 stop하게 된다.

$ docker-compose stop web

컨테이너 일시정지와 재개도 docker 명령어와 같다. (서비스명을 뒤에 입력하면 해당하는 서비스만 일시정지/재개 된다.)

$ docker-compose pause
$ docker-compose unpause

이제 scale 기능을 알아보자!

만약에 동일한 컨테이너를 여러개 띄우고 싶다면 docker compose 명령어를 통해 실행중에 바로 이벤트를 줄 수 있다.

참고로 scale 기능을 이용하기 위해서는 docker-compose.yml 파일에 container_name 옵션과 ports 옵션에 로컬 포트 지정("[로컬포트]:[컨테이너포트]") 하면 동일한 이름/포트로 생성 요청이 되어 scele 기능이 동작 하지 않으니 주의해야 한다.

$ docker-compose up --scale [serviceName]=[scale 숫자] -d

 

만약 web 컨테이너가 4개 떠있는 상태에서 web=3 을 입력했다면 기존 컨테이너 모두 kill 되며 3개의 컨테이너가 새로 생성 된다. 

확인을 위해 컨테이너의 이벤트를 보고 싶다면 아래와 같은 명령어로 확인 할 수 있다.

$ docker-compose events

 

프로젝트 내 로그 확인을 위해서는 아래와 같이 입력한다.

$ docker-compose logs

 

프로젝트 내 이미지 목록은 아래와 같이 입력한다.

$ docker-compose images

컨테이너 내 실행중인 프로세스 목록

$ docker-compose top

끝!

728x90
Comments