DevOps

[docker-compose] 운용 가이드

nineDeveloper 2020. 3. 15. 17:38
728x90

docker-compose 운용 가이드

docker-compose 의 버전 확인

docker-compose --version

docker-compose 의 기본 명령

서브 명령 설명
up 컨테이너 생성/시작
ps 컨테이너 목록 표시
logs 컨테이너 로그 출력
run 컨테이너 실행
start 컨테이너 시작
stop 컨테이너 정지
restart 컨테이너 재시작
pause 컨테이너 일시 정지
unpause 컨테이너 재개
port 공개 포트 번호 표시
config 구성 확인
kill 실행 중인 컨테이너 강제 정지
rm 컨테이너 삭제
down 리소스 삭제

docker-compose.yml 을 바탕으로 컨테이너 생성/시작

current directory 이외의 장소에 docker-compose.yml을 놓아 둔 경우는 -f 옵션으로 파일 경로를 지정

docker-compse -f ./sample/docker-compose.yml up

특정 컨테이너 조작

서브 명령 다음에 컨테이너명을 지정하면 해당 컨테이너만을 조작할 수 있음

  • webserver 라는 이름의 컨테이너만 정지
    docker-compose stop webserver

여러 컨테이너 생성(up)

docker-compose up 명령

docker-compose.yml을 바탕으로 여러 개의 컨테이너를 생성하여 시작할 때 사용

docker-compose up [옵션] [서비스명 .]
지정할 수 있는 주요 옵션
옵션 설명
-d 백그라운드에서 실행한다
--force-recreate 컨테이너를 지우고 새로 만든다
--no-deps 링크 서비스를 시작하지 않는다
--build 이미지를 빌드한다
--no-build 이미지를 빌드하지 않는다
-t, --timeout 컨테이너의 타임아웃을 초로 지정(기본 10초)한다
--scale SERVICE=서비스수 서비스 수를 지정

여러 컨테이너의 일괄 생성 및 시작

docker-compose up

여러 컨테이너를 백그라운드로 시작

docker-compose up -d

docker 이미지 빌드

Dockerfile을 수정 했을 때 build 명령을 사용하여 도커 이미지를 새로 만들어야 함
up 명령에 다음 과 같이 --build 옵션을 넣으면 알아서 이미지를 새로 만들고 서비스를 재시작 함

docker-compose up --build

컨테이너 명을 뒤에 붙이면 해당 컨테이너에 대해서만 build 한다

docker-compose up --build |<컨테이너>|

docker-compose up --scale 명령

컨테이너를 생성할 개수를 지정할 때 --scale 옵션을 사용

docker-compose up --scale [서비스명=수]

컨테이너 개수 지정

docker-compose.ymlserver_aserver_b라는 2개의 정의가 있고
server_a의 컨테이너를 10개, server_b 컨테이너를 20개 시작하고 싶을 때

docker-compose up --scale server_a=10 --scale server_b=20

여러 컨테이너 확인(ps/logs)

여러 컨테이너의 상태확인

docker-compose ps

컨테이너 ID 확인

docker-compose ps -q

docker 명령을 사용한 컨테이너 확인

docker container ls

docker 명령을 사용한 로그 확인

docker-compose logs

컨테이너에서 명령 실행(run)

docker-compose 로 시작한 컨테이너에서 임의의 명령을 실행

docker-compose up 명령을 사용하여 시작한 server_a라는 이름의 컨테이너에서 /bin/bash를 실행하는 예

docker-compose run server_a /bin/bash

여러 컨테이너 시작/정지/재시작(start/stop/restart)

여러 컨테이너 일괄 시작

docker-compose start

여러 컨테이너 일괄 정지

docker-compose stop

여러 컨테이너 일괄 재시작

docker-compose restart

특정 컨테이너 재시작

docker-compose restart server_a

여러 컨테이너 일시 정지/재개(pause/unpause)

여러 컨테이너 일시 정지

docker-compose pause

여러 컨테이너 일시 정지 재개

docker-compose unpause

서비스의 구성 확인(port/config)

서비스 공개용 포트 확인

docker-compose port [옵션] <서비스명> <프라이빗 포트 번호>
지정할 수 있는 주요 옵션
옵션 설명
--protocol=proto 프로토콜 tcp 또는 udp
--index=index 컨테이너의 인덱스 수

공개 포트 확인

webserver80 private port의 공개 포트 확인

docker-compose port webserver 80

구성 확인

docker-compose config

여러 컨테이너 강제 정지/삭제(kill/rm)

https://docs.docker.com/compose/reference

docker-coompose kill 명령을 사용해서 컨테이너에게 시그널을 송신할 수 있음
시그널이란 프로세스 간의 연락을 주고 받기 위한 장치로 Linux 커널에 내장되어 있음

컨테이너에 시그널 송신

docker-compose kill -s SIGINT

옵션을 지정하지 않고 docker-compose kill을 실행하면 SIGKILL이 송신됨

여러 컨테이너 일괄 삭제

docker-compose rm

Linux의 시그널

Linux에서는 프로그램을 실행할 때 파일에 쓰여 있는 프로그램을 읽어 들여 메모리상에 배치함
이 메모리상에 배치된 프로그램이 실행되면 '프로세스'가 됨
그리고 이 프로세스에 대해 명령을 송신할 수 있는데, 이 명령을 시그널이라고 함
시그널은 POSIX.1-1990 라는 규격으로 정의되어 있음

docker-compose 의 주요 서브 명령

지원하는 시그널 종류는 kill -l 명령으로 확인할 수 있음
| 시그널 | 설명 |
| --------- | --------------------------------------------- |
| SIGHUP | 프로그램 재시작 |
| SIGINT | 키보드로 인터럽트 CTRL+C 로 송신할 수 있음 |
| SIGQUIT | 키보드에 의한 중지 CTRL+\ 로 송신할 수 있음 |
| SIGTERM | 프로세스 정상 종료 |
| SIGKILL | 프로세스 강제 종료 |
| SIGSTOP | 프로세스 일시 정지 |

여러 리소스의 일괄 삭제(down)

docker-compose.yml 정의 파일을 바탕으로 docker-compose up 명령으로 생성한 컨테이너 이미지를 모아서 삭제할 때 사용
실행 중인 컨테이너를 정지시키고, docker 이미지, 네트워크, 데이터 볼륨을 일괄 적으로 삭제함

docker-compose down 명령

docker-compose down [옵션]
지정할 수 있는 주요 옵션
시그널 설명
--rmi all 모든 이미지를 삭제
--rmi local 커스텀 태그가 없는 이미지만 삭제
-v, --volumes Compose 정의 파일의 데이터 볼륨을 삭제

이미지 삭제 시 볼륨까지 삭제

이미지를 삭제 하면서 연결된 볼륨까지 삭제함

docker-compose down --volume

여러 이미지 삭제

docker-compose.yml 정의 파일에서 지정한 컨테이너를 정지시키고 모든 이미지를 삭제

docker-compose down --rmi all
728x90