일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 다트 언어
- gitlab
- 플러터
- 포인터
- 도커
- Algorithm
- docker
- 구조체
- c# 추상 클래스
- C++
- github
- HTML
- c# 윈폼
- 유니티
- Houdini
- Unity
- dart 언어
- Flutter
- c#
- c언어
- 깃
- git
- c# winform
- vim
- Python
- jupyter
- C# delegate
- Data Structure
- jupyter lab
- C언어 포인터
- Today
- Total
nomad-programmer
[DevOps/Docker] Docker Compose가 제공하는 운용 명령들 본문
Docker Compose의 버전 확인
Docker Compose는 Docker for Mac 또는 Docker for Windows에 미리 설치되어 있다. Linux는 아래의 링크를 통해 설치할 수 있다.
docs.docker.com/compose/install/
// Docker Compose 버전 확인
$ docker-compose --version
compose 정의 파일의 지정
현재 디렉토리 안에 docker-compose.yml 파일이 없는 상태에서 docker-compose up 명령을 실행하면 다음과 같은 에러를 확인할 수 있다.
$ docker-compose up
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
docker-compose에서 지원하는 정의 파일의 이름은 다음 중 하나이다.
- docker-compose.yml
- docker-compose.yaml
이 파일명 이외의 경우는 명령의 -f 옵션을 사용하여 정의 파일명을 지정할 필요가 있다.
Docker Compose의 기본 명령
docker-compose 명령에는 몇 가지 서브 명령이 있다. 주요 서브 명령은 다음과 같다.
서브 명령 | 설명 |
up | 컨테이너 생성/시작 |
ps | 컨테이너 목록 표시 |
logs | 컨테이너 로그 출력 |
run | 컨테이너 실행 |
start | 컨테이너 시작 |
stop | 컨테이너 정지 |
restart | 컨테이너 재시작 |
pause | 컨테이너 일시 정지 |
unpause | 컨테이너 재개 |
port | 공개 포트 번호 표시 |
config | 구성 확인 |
kill | 실행 중인 컨테이너 강제 정지 |
rm | 컨테이너 삭제 |
down | 리소스 삭제 |
docker-compose 명령은 docker-compose.yml 을 저장한 디렉토리에서 실행된다. 만일 현재 디렉토리 이외의 장소에 docker-compose.yml 을 놓아 둔 경우는 -f 옵션으로 파일 경로를 지정해야 한다.
// docker-compose.yml 파일을 바탕으로 컨테이너 생성/시작
$ docker-compose -f ./sample/docker-compose.yml up
서브 명령 다음에 컨테이너명을 지정하면 해당 컨테이너만을 조작할 수 있다. 예를 들어 webserver라는 이름의 컨테이너만 정지시키고 싶을 때는 다음의 명령을 실행한다.
// 특정 컨테이너 조작
$ docker-compose stop webserver
여러 컨테이너 생성 (up)
작성한 docker-compose.yml 을 바탕으로 여러 개의 컨테이너를 생성하여 시작할 때는 docker-compose up 명령을 사용한다.
$ docker-compose up [옵션] [서비스명 .]
지정할 수 있는 주요 옵션
옵션 | 설명 |
-d | 호스트 머신에서 백그라운드에서 실행한다. |
--no-deps | 링크 서비스를 시작하지 않는다. |
--build | 이미지를 빌드한다. (또는 Dockerfile 파일을 수정했을 경우 이 옵션 적용) |
--no-build | 이미지를 빌드하지 않는다. |
-t, --timeout | 컨테이너의 타임아웃을 초로 지정한다. (기본 10초) |
--scale SERVICE=서비스 수 | 서비스 수를 지정한다. |
--force-recreate | docker-compose.yml 파일을 수정했다면 이 옵션을 적용한다. (컨테이너를 지우고 새로 만듦) |
다음과 같이 docker-compose.yml 을 작성한다. 이것은 Nginx가 베이스 이미지인 serverA와 Redis가 베이스 이미지인 serverB, 이 두개의 컨테이너로 구성되어 있다.
// docker-compose.yml
version: '3.3'
services:
server_a:
image: nginx
server_b:
image: redis
이 docker-compose.yml에 정의된 2개의 컨테이너를 시작하려면 다음의 명령을 실행한다. 컨테이너를 정지시킬 때는 Ctrl + c 를 누른다.
// 여러 컨테이너의 일괄 생성 및 시작
$ docker-compose up
컨테이너를 백그라운드에서 실행시킬 때는 -d 옵션을 지정한다. -d 옵션으로 시작하면 프롬프트 화면으로 돌아간다.
// 여러 컨테이너를 백그라운드로 시작
$ docker-compose up -d
컨테이너 시작 시에 Dockerfile을 빌드하고 싶을 때는 --build 옵션을 지정한다.
// docker 이미지 빌드
$ docker-compose up --build
컨테이너를 생성할 개수를 지정할 때는 docker-compose up 명령에서 --scale 옵션을 사용한다.
$ docker-compose up --scale [서비스명=수]
예를 들어 docker-compose.yml 에 server_a와 server_b라는 2개의 정의가 있고, server_a의 컨테이너를 10개, server_b의 컨테이너를 20개 시작시키고 싶을 때는 다음의 명령을 실행한다.
// 컨테이너 개수 지정
$ docker-compose up --scale= server_a=10 --scale server_b=20
여러 컨테이너 확인 (ps / logs)
docker-compose 에서는 여러 개의 컨테이너가 연결되어 작동한다. 이러한 컨테이너들의 목록을 표시할 때는 docker-compose ps 명령을 사용한다.
// 여러 컨테이너의 상태 확인
$ docker-compose ps
명령을 실행하면 시작되어 있는 컨테이너의 이름, 실행되고 있는 명령, 상태, 포트를 확인할 수 있다. 또한 다음과 같이 -q 옵션을 지정하면 컨테이너 ID만 표시된다.
// 컨테이너 ID 확인
$ docker-compose ps -q
또한, docker-compose 를 사용하여 시작한 경우도 보통의 Docker 명령을 사용할 수 있다. 다음은 docker container ls 명령을 사용하여 컨테이너의 상태를 확인하는 예이다.
// 도커 명령을 사용한 컨테이너 확인
$ docker container ls
컨테이너의 로그를 확인하려면 docker-compose logs 명령을 사용한다.
// 로그 확인
$ docker-compose logs
컨테이너에서 명령 실행 (run)
docker-compose로 시작한 컨테이너에서 임의의 명령을 실행하고 싶을 때는 docker-compose run 명령을 사용한다.
다음의 명령은 docker-compose up 명령을 사용하여 시작한 server_a 라는 이름의 컨테이너에서 /bin/bash를 실행하는 예이다.
// 컨테이너에서 명령 실행
$ docker-compose run server_a /bin/bash
여러 컨테이너 시작 / 정지 / 재시작 (start / stop / restart)
docker-compose를 사용하면 여러 개의 서비스를 일괄적으로 시작/일시 정지/정지/재시작을 할 수 있다. 각각의 명령은 다음과 같다.
// 컨테이너 일괄 시작/정지/재시작
$ docker-compose start
$ docker-compose stop
$ docker-compose restart
특정 컨테이너만을 조작하고 싶을 때는 명령의 인수에 컨테이너명을 지정한다. 예를 들어 server_a 라는 이름의 서비스만을 재시작할 때는 다음의 명령을 실행한다.
// 특정 컨테이너 재시작
$ docker-compose restart server_a
여러 컨테이너 일시 정지/재개 (pause/unpause)
docker-compose를 사용하면 여러 개의 서비스를 일괄적으로 일시 정지/재개할 수 있다. 각각의 명령은 다음과 같다.
// 컨테이너 일시 정지/재개
$ docker-compose pause
$ docker-compose unpause
서비스의 구성 확인 (port / config)
서비스의 공개용 포트를 확인할 때는 docker-compose port 명령을 사용한다.
$ docker-compose port [옵션] <서비스명> <프라이빗 포트 번호>
지정할 수 있는 주요 옵션
옵션 | 설명 |
--protocol=proto | 프로토콜. tcp 또는 udp |
--index=index | 컨테이너의 인덱스 수 |
예를 들어 webserver라는 이름의 서비스의 80번 포트에 할당되어 있는 설정을 확인하려면 다음의 명령을 실행한다.
// 공개 포트 확인
$ docker-compose port webserver 80
또한 Compose의 구성을 확인할 때는 docker-compose config 명령을 사용한다. 다음의 명령을 실행하면 Compose 구성 파일의 내용을 확인할 수 있다.
// 구성 확인
$ docker-compose config
여러 컨테이너 강제 정지 / 삭제 (kill / rm)
실행 중인 컨테이너를 강제로 정지시킬 때는 docker-compose kill 명령을 사용한다. 이 명령을 사용하면 컨테이너에게 시그널을 송신할 수 있다.
시그널이란, 프로세스 간의 연락을 주고받기 위한 장치로 Linux 커널에 내장되어 있다.
실행 중인 프로세스의 처리를 멈추고 다른 프로세스를 처리하고 싶은 경우나 프로세스를 강제 종료시키고 싶을 때에 사용한다.
예를 들어 다음의 명령을 실행하면 컨테이너에게 SIGINT를 송신한다.
// 컨테이너에 시그널 송신
$ docker-compose kill -s SIGINT
Killing sample_server_b_1 ... done
Killing sample_server_b_2 ... done
Killing sample_server_b_3 ... done
옵션을 지정하지 않고 docker-compose kill 을 실행하면 SIGKILL이 송신된다. SIGKILL은 프로세스를 강제로 종료시키는 것이다.
생성한 여러 컨테이너를 삭제할 때는 docker-compose rm 명령을 실행한다. 명령을 실행하면 다음과 같이 정말로 삭제해도 좋은지 확인 메시지가 표시되므로 y 또는 n을 입력한다.
또한 -f 옵션을 지정하면 확인 메시지를 표시하지 않고 강제적으로 삭제한다.
docker-compose rm 명령은 docker-compose로 실행한 컨테이너 중 정지되어 있는 컨테이너만 제거한다.
// 여러 컨테이너 일괄 삭제
$ docker-compose rm
Going to remove sample_server_b_1, sample_server_b_2, sample_server_b_3
Are you sure? [yN] y
Removing sample_server_b_1 ... done
Removing sample_server_b_2 ... done
Removing sample_server_b_3 ... done
그 외 다른 명령에 대한 자세한 내용은 아래의 공식 사이트를 참조하면 된다.
docs.docker.com/compose/reference/
Linux의 시그널
Linux에서는 프로그램을 실행할 때 파일에 쓰여 있는 프로그램을 읽어 들여 메모리상에 배치한다. 이 메모리상에 배치된 프로그램이 실행되면 '프로세스'가 된다. 그리고 이 프로세스에 대해 명령을 송신할 수 있는데, 이 명령을 시그널이라고 한다. 시그널은 POSIX.1-1990 이라는 규격으로 정의되어 있다. 주요 Linux의 시그널은 다음과 같다.
docker-compose kill -s 의 주요 서브 명령
시그널 | 설명 |
SIGHUP | 프로그램 재시작 |
SIGINT | 키보드로 인터럽트. ctrl + c 로 송신할 수 있다. |
SIGQUIT | 키보드에 의한 중지. ctrl + \ 로 송신할 수 있다. |
SIGTERM | 프로세스 정상 종료 |
SIGKILL | 프로세스 강제 종료 |
SIGSTOP | 프로세스 일시 정지 |
지원하는 시그널의 종류는 kill -l 명령으로 확인할 수 있다.
여러 리소스의 일괄 삭제 (down)
Compose 정의 파일을 바탕으로 docker-compose up 명령으로 생성한 컨테이너나 Docker 이미지를 모아서 삭제할 때는 docker-compose down 명령을 사용한다. docker-compose down 명령은 실행 중인 컨테이너를 정지시키고, Docker 이미지, 네트워크, 데이터 볼륨을 일괄적으로 삭제한다.
docker-compose down [옵션]
지정할 수 있는 주요 옵션
옵션 | 설명 |
--rmi all | 모든 이미지를 삭제 |
--rmi local | 커스컴 태그가 없는 이미지만 삭제 |
-v, --volumes | Compose 정의 파일의 데이터 볼륨을 삭제 |
예를 들어 다음의 명령을 실행하면 Compose 정의 파일에서 지정한 컨테이너를 정지시키고 모든 이미지를 삭제한다.
// 여러 이미지 삭제
$ docker-compose down --rmi all
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] Docker를 이용한 로컬 환경에서 GitLab-CE 서버 구축 (with docker-compose) (0) | 2020.12.08 |
---|---|
[DevOps/Docker] 멀티호스트 환경에서 컨테이너 관리 (0) | 2020.12.06 |
[DevOps/Docker] Docker Compose를 사용한 여러 컨테이너의 구성 관리 (0) | 2020.12.05 |
[DevOps/Docker] 여러 컨테이너 관리 및 Docker Compose의 개요 (0) | 2020.12.04 |
[DevOps/Docker] 클라우드 서비스를 사용한 Private Docker 저장소 구축 (0) | 2020.12.03 |