본문 바로가기

Docker

[Docker] 도커(docker) 편리하게 실행하기 - Docker-compose

 

1. Docker-compose란?

- 여러 컨테이너를 편리하게 실행하기 위해서 만들어진 도구

- YAML 파일을 통해 컨테이너를 실행하는데 필요한 옵션(실행 방법, 버전 관리 등) 정의 

 

 

2. Docker-compose 사용을 위해 필요한 것

1) Docker-compose.YAML 파일 👈🏻 직접 만들어야함 

  • 큰 틀에서 구성요소는 services, network, volume, config, secret(version은 deprecated 되어 설정하지 않아도 됨)

 

2) Docker-compose 실행 파일 👈🏻 mac/window 용 도커에 기본으로 되어있음

 

*YAML(Ain't Markup Language): 데이터를 저장하는 파일 포맷으로 비슷한 형식으로 XML과 JSON이 있지만 사람이 읽기 더 편하다는 장점이 있는 마크업 언어

 

 

3. Docker-compose  사용 하기

 

1) Docker-compose.YAML 파일 생성

 

version: "3.9" // docker-compose 버전(deprecated되어 설정 안해도 됨)

services:
  flask: // 이미지명
    build: // 이미지를 빌드하여 사용
      context: . // 이미지가 빌드되는 위치는 docker-compose 파일이 있는 위치
    ports:
      - "5000:5000" // 포트 연결

 

services: 여러 컨테이너를 정의하는데 사용 frontend, backend는 각 컨테이너를 정의하게 되며, 각 컨테이너의 이름이 됨

컨테이너 설정 시 사용되는 키워드

image 컨테이너 이미지 정의
build 위 이미지를 활용하는 방식이 아닌 dockerfile의 경로를 지정해 빌드하여 사용하는 방법
dockerfile 빌드할 dockerfile의 이름이 Dockerfile이 아닌 경우 이름 지정을 위해 사용
ports 호스트와 컨테이너 포트 바인딩 설정에 사용
expose 컨테이너 간 통신을 위한 포트
volumes 호스트의 지정된 경로로 컨테이너의 볼륨을 마운트 하도록 설정
container_name 컨테이너명 설정
command 컨테이너가 실행된 후 컨테이너의 쉘에서 실행시킬 쉘 명령어 설정
environment 환경변수 설정
env_file 환경변수 설정, 이 키워드는 environment와 다르게 env 파일을 이용해서 적용할 수 있음
depends_on 다른 컨테이너와 의존관계 설정, 먼저 실행될 서비스를 적음
restart 컨테이너 재시작 관련 설정

 

 

2) docker-compose로 컨테이너 실행

// docker-compose로 컨테이너 실행
docker-compose up -d

// docker-compose로 컨테이너 삭제
docker-compose down

 

어플리케이션을 이용했더니 에러 발생, db연결 정보가 없기 때문

ctrl + c: docker-compose 멈추기

 

 

3) Docker-compose.YAML 파일 수정

// ..생략
  mongo:
    image: mongo
    ports:
      - 27017:27017

 

4) 확인하기 - 저장이 잘 됨

 

 

 

 

5) volume이 유지되는 어플리케이션 설정

Docker-compose.YAML 파일 수정

version: "3.9"

services:
  flask:
    build:
      context: .
    volumes:
      - ./templates:/templates
    ports:
      - "5000:5000"
  mongo:
    image: mongo
    volumes:
      - mongo:/data/db
    ports:
      - 27017:27017

volumes:
  mongo:

도커 volume 확인