본문 바로가기

Docker

[Docker] Docker Compose 사용

Docker Compose

Docker Compose는 여러 Container를 정의하고 공유 및 한 번의 명령어로 모두 실행하거나 종료할 수 있도록 개발된 도구이다.

그러기 위해서는 기본적으로 서비스를 정의하는 YAML 파일을 만들어야한다.

 

Docker Compose 설치

Windows 또는 Mac용 Docker Desktop을 설치한 경우라면 Docker Compose가 포함되어 설치 되어 바로 진행할 수 있고 Linux라면 Docker Compose를 따로 설치해줘야한다.

 

1. 다음 명령어를 통해 Docker Compose의 현재 공개된 릴리즈버전을 다운받는다

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2. 바이너리에 실행 권한을 적용한다.

$ sudo chmod +x /usr/local/bin/docker-compose

3. 설치 및 버전 확인

$ docker-compose --version

 

Compose 파일 만들기

Compose로 실행시킬 Container를 생성하는데 사용한 명령어

docker run\
 --name discovery-service -d\
 --network test-network -p 8761:8761\
 blac2013/discovery-service:1.0
--------------------------------------
docker run\
 --name config-service -d\
 --network test-network -p 8888:8888\
 -e "spring.rabbitmq.host=rabbitmq"\
 -e "spring.rabbitmq.username=guest"\
 -e "spring.rabbitmq.password=guest"\
 blac2013/config-service:1.0

 

1. 먼저 yml파일을 만들고 스키마 버전을 정의한다. 버전은 최신버전을 사용하는것을 권장한다.

최신버전은 Compose 버전 에서 확인할 수 있다.

version: '3.8'

2. 실행할 container 목록 정의

version: '3.8'
services:
	config-service:
	discovery-service:

3. container의 Image 정의

version: '3.8'
services:
	config-service:
    	image: blac2013/config-service:1.0
	discovery-service:
    	image: blac2013/discovery-service:1.0

4. 서비스의 포트번호 지정 (-p)

version: '3.8'
services:
	discovery-service:
    	image: blac2013/discovery-service:1.0
    	ports:
	      - 8761:8761
          
	config-service:
    	image: blac2013/config-service:1.0
        ports:
	      	- 8888:8888

5. 환경변수 정의 (-e)

version: '3.8'
services:
	discovery-service:
    	image: blac2013/discovery-service:1.0
    	ports:
	     - 8761:8761
          
	config-service:
    	image: blac2013/config-service:1.0
        ports:
	     - 8888:8888
        environment:
          spring.rabbitmq.host: rabbitmq
          spring.rabbitmq.username: guest
          spring.rabbitmq.password: guest

6. 네트워크 정의 (--network)

version: '3.8'
services:
	discovery-service:
    	image: blac2013/discovery-service:1.0
    	ports:
	      - 8761:8761
        networks:
          - my-network
          
	config-service:
    	image: blac2013/config-service:1.0
        ports:
	      	- 8888:8888
        environment:
          spring.rabbitmq.host: rabbitmq
          spring.rabbitmq.username: guest
          spring.rabbitmq.password: guest
        networks:
          - my-network
networks:
  my-network:
    name: test-network

7. 완성된 compose파일 실행

$ docker-compose -f /Users/burger/Desktop/compose-files/discovery-config-compose.yml up -d

[+] Running 3/3
 ⠿ Network test-network                         Created                                                                                                                                                                                                                                                                  0.1s
 ⠿ Container compose-files-discovery-service-1  Started                                                                                                                                                                                                                                                                  0.7s
 ⠿ Container compose-files-config-service-1     Started

 

가끔 yaml파일 내용을 복사하거나 잘못 가져오면 다음과 같은 에러가 나는 경우가 있는데

 found character that cannot start any token

해당 에러는 들여쓰기 오류로 탭을 지우고 스페이스로 들여쓰기를 맞춰주면 오류가 해결되는 경우가 있다.

 

docker ps 명령어로 현재 실행중인 프로세스 목록을 보면 다음과 같이 작성한 container 정의대로 실행된 것을 확인할 수 있다.