Docker Compose에 대한 설명과 사용법에 대해서 알아본다.
Docker Compose 란?
- 여러개의 컨테이너를 실행하기 위해 정의되는 툴이다.
- YAML 파일을 이용하여 각 컨테이너를 정의한다.
- 단일 커맨드를 이용하여 정의한 compose 파일의 서비스들을 실행하거나 중지할 수 있다.
- 어플리케이션의 생명주기를 관리하기 위해 아래와 같은 기능을 제공한다.
- start, stop, rebuild
- 실행중인 서비스들의 상태 확인
- 실행중인 서비스들의 로그 확인
- 서비스에서 일회성 명령실행
Compose 예제
- 참여했던 블록체인 프로젝트를 이용하여 Compose 예제를 작성한다.
- 블록체인은 트랜잭션을 발생시키면 해당 트랜잭션이 최종적으로 블록에 포함되어 합의를 이룬후 처리된다.
- 트랜잭션의 처리 결과에 대해서 조회하는 API를 제공하게 되는데 이부분을 Redis를 이용하여 처리한다.
- 현재 프로젝트는 Redis와 연동하는 부분은 존재하지 않지만 결국 블록체인의 한계로 인해 기존의 솔루션들을 결합해야 할 것이다.
소스코드 체크아웃
# 해당 프로제트에는 이미 Dockerfile이 존재한다.
$ git clone https://github.com/xbctechnologies/go-xblockchain.git xnode
# 테스트를 위한 keystore 압축해제
$ unzip xnode/test/keystore.zip -d xnode/ && cd xnode
간단하게 2개의 서비스(Container)를 정의하는 간단한 Compose 파일을 작성한다.
해당 Compose 파일을 실행하면 2개의 컨테이너를 실행하게 된다.
해당 파일은 위에서 체크아웃한 디렉토리 안에 작성한다.
docker-compose.yml 작성
version: '3'
services:
xnode:
build: . # 현재 디렉토리의 Dockerfile을 이용하여 이미지를 빌드
ports:
- "7979:7979" # 컨테이너의 Port와 Host의 Port를 매핑
command: --singlenet --rpcwhitelist * --verbosity 4 --keystore /go-xblockchain/keys/keystore --password /go-xblockchain/keys/password --validatorpassword /go-xblockchain/keys/val_password --unlock 0x51e5ae98cd821fa044d1eb49f03fb81a7acf3617,0xa809913b5a5193b477c51b4ba4aa0e1268ed6d13,0xdb0c9f45be6b121aaeef9e382320e0b156487b57 --validatoraddrlist 1T:0xdb0c9f45be6b121aaeef9e382320e0b156487b57
links:
- "redis"
volumes:
- /data/xnode:/root/xnode
redis:
image: "redis:alpine" # Docker hub로부터 이미지를 다운로드
Compose Command
# 서비스 시작 (-d : detached)
$ docker-compose up -d
# 서비스 정지
$ docker-compose down
# 서비스 확인
$ docker-compose ps
# 그외 커맨드 확인
$ docker-compose --help