본문 바로가기
devops

Docker Docker Compose file 열어보기

by Redking

Docker Compose

Docker는 하나의 앱당 1개의 DockerImage를 만들어 사용하기를 권장하기 때문에 여러 컨테이너를 실행해야 되는 경우가 발생할 수 있습니다. 이런 경우 컨테이너마다 실행하는게 번거롭기 때문에 Docker에서 Docker Compose라는 다중 컨테이너를 한번에 실행가능하게 해주는 도구를 제공합니다.

Docker Compose는 Docker를 최초 설치할 경우 함께 설치가 되기 때문에 Docker를 설치하신 분들은 따로 설치할 필요가 없습니다.

 

Docker Compse Example

version: '3'
services:
  mysql:
    build:
      context: ./mysql
      dockerfile: ./Dockerfile
    image: mysql-image
    container_name: mysql-container
    ports:
      - "5432:5432"
  project:
    build:
      context: ./project
      dockerfile: ./Dockerfile
    image: project-image
    container_name: project-container
    ports:
      - "8000:8000"
    depends_on:
      - mysql
    links:
      - mysql
    volumes:
      - ./project:/project
    env_file:
      - ./project/.env

Docker Compose 파일은 *.yml 확장자로 작성해야합니다. 

코드 해석

  1. version: '3' "Docker Compose의 버전을 나타냅니다. 제가 사용하는 버전은 3이고 Docker Engine release 버전
    1.13.0+를 의미합니다. Docker Compose의 버전과 Docker Engine release 버전은 Docker 공식 문서에서 확인할 수 있습니다."
  2. services: "실행하려는 서비스(또는 컨테이너) 목록을 정의합니다."
  3. mysql: "컨테이너 이미지를 정의합니다. 서비스 이름은 임의로 선택할 수 있습니다."
  4. build: "이미지 빌드를 위한 Docker File을 지정하기 위해 사용됩니다."
  5. context: ./proejct "Docker File가 있는 디렉토리의 위치를 선택할 수 있습니다."
  6. dockerfile: ./Dockerfile "Docker file을 선택하게 됩니다. Docker File의 이름을 Dockerfile이 아닌 임의로 설정한 경우 임의로 설정한 이름을 명시해 주면 됩니다."
  7. image: mysql-image "build를 통해서 생성된 Docker Image를 사용하고, 생성된 Docker Image의 이름을 mysql-image로 지정하겠다는 의미입니다. 만약 build가 없을 경우에는 Docker 허브에 있는 이미지를 사용할 경우에 명시합니다."
  8. container_name: mysql-container "사용할 컨테이너의 이름을 임의로 명시합니다."
  9. ports: "ports는 호스트OS와 컨테이너의 포트를 바인딩 시켜줍니다. 각각의 컨테이너마다 별개의 포트가 필요하며 중복될시 오류가 발생하게 됩니다. "
  10. "mysql 컨테이너와 project 컨테이너는 9번까지 설명해야할 내용이 일치하기 때문에 project 컨테이너의 ports까지에 대한 설명은 생략합니다."
  11. depends_on: "depends_on 명령은 서비스간의 종속성 순서대로 서비스를 시작할 수 있습니다. 예를들어 mysql과 project라는 두 이미지가 있을 때 mysql부터 실행하고 project를 실행해야 할 경우 등에 사용 됩니다."
  12. - mysql "mysql을 먼저 실행합니다."
  13. links: "각 컨테이너들을 연결합니다."
  14. - mysql "mysql을 연결합니다."
  15. volumes: "dockerfile에서 사용되던 volume과 같이 컨테이너에 볼륨을 마운트 할 때에 사용 됩니다. host:container 방식으로 사용되고 마지막에 :ro 를 추가하여 볼륨을 읽기 전용으로 사용할 수 있습니다."
  16. - ./project:/project "host, container 지정"
  17. env_file: "dockerfile의 env 명령과 같이 컨테이너의 환경 변수를 지정해줄 수 있습니다. docker-compose가 아닌 다른 파일에 지정할 환경 변수들을 모아두고, 해당 파일을 읽어와서 사용할 때 사용 됩니다."
  18. - ./project/.env "환경변수 위치 지정"

 

'devops' 카테고리의 다른 글

Docker DockerFile  (0) 2021.12.15
Docker로 nodejs 배포하기  (0) 2021.10.28
Jira 쓰는 개발자의 Git 사용방법  (0) 2021.03.29

댓글