Docker Compose 기본 이해

SummerToday·2024년 2월 18일

도커, 서버 기술

목록 보기
18/34
post-thumbnail

Docker Compose

  • 여러 컨테이너를 묶어서 관리하기 위한 툴이다.

  • 프론트엔드 서버, 데이터베이스 서버, 벡엔드 서버 각각을 도커 컨테이너로 작성하고, 연결하여 동작을 하기 때문에, 이들을 묶어 관리할 수 있는 Docker Compose 같은 컨테이너 관리 툴이 필요하다.

  • 서비스 규모가 더 커질 시, 쿠버네티스(Kubernetes) 같은 컨테이너 관리 툴이 사용되기도 한다.

Docker Compose는 docker-compose.yml 파일을 작성하여 실행한다.


Docker Compose 기본 사용법

Docker compose 명령은 기본적으로 Dokcerfile의 명령을 기반으로 하고 있다.

  • docker-compose.yml 예시

    version: "3"
    
     services:
       db:
         image: mysql:5.7
         restart: always
         volumes:
           - ./mysqldata:/bar/lib/mysql
         environment:
           - MYSQL_ROOT_PASSWORD=1234
           - MYSQL_DATABASE=db
         port:
           - "3306:3306"
    • version
      Docker Compose 파일 포맷 버전을 명시한다.

      docker 버전에 따라 지원하는 DockerCopmose 버전이 존재하며, 기본적으로 버전 3으로 사용하는 것이 일반적이다. 최신 버전의 특수 문법들 까지는 잘 사용을 하지 않기 때문이다.

      버전별 호환성 확인 사이트 : https://docs.docker.com/compose/compose-file/compose-versioning/


    • services
      여러개 또는 하나의 컨테이너를 정의하고, 설정하는 옵션이다.

      services:
        db: 
          ~ 설정 ~
      • db라는 컨테이너를 정의하고, 컨테이너에 대한 설정들을 적는다.

    • image
      해당 컨테이너의 베이스 이미지를 설정하는 옵션이다.

      image: mysql:5.7
      • 해당 문장은 Docker Hub에 있는 5.7 버전의 mysql 이미지를 기반으로 동작하도록 한다는 의미이다.

      • Dockerfile로 작성한 이미지들을 실행하는 명령은 따로 존재한다.

    • restart
      컨테이너가 다운되었을 때, 항상 재시작하라는 설정의 옵션이다. 해당 옵션 사용시 일반적인 경우에는 해당 컨테이너가 지속적으로 실행이 된다.


    • volumes
      호스트의 특정 디렉토리나 파일을 컨테이너 내의 경로에 마운트하거나, 볼륨 컨테이너를 생성하여 데이터를 공유할 수 있도록 하는 옵션이다. docker run 옵션 중, -v 옵션과 동일한다.
      여러 볼륨을 지정할 수 있기 때문에 리스트로 작성한다.

       volumes:
           - ./mysqldata:/bar/lib/mysql
      • Host PC의 폴더 : 컨테이너 내부 폴더로 설정한다.

    • environment
      컨테이너의 환경 변수를 설정하는 데 사용되는 옵션이다. 이 옵션을 사용하여 컨테이너가 실행될 때 환경 변수를 지정할 수 있다. Dockerfile의 ENV 옵션과 동일하다.

      environment:
            - MYSQL_ROOT_PASSWORD=1234
            - MYSQL_DATABASE=db
      • env_file
        패스워드 등의 보안상으 이유로 Docker Compose에 직접 작성을 하지 않고, 환경 변수 설정들을 파일을 통해 작성하여 env_file 옵션으로 읽어들이는 방식으로도 사용되는 경우도 많다.

        services:
        db:
          image: mysql:5.7
          restart: always
          volumes:
            - ./mysqldata:/bar/lib/mysql
          env_file:
            - ./mysql.env
        • cf. mysql.env의 내용 ( $ cat mysql.env )
          MYSQL_ROOT_PASSWORD=1234
          MYSQL_DATABASE=db

        cf. mysql_env.txt 형식으로도 사용해도 별 문제는 없지만, 공식적인 파일 형식은 .env 이다.


    • ports
      호스트의 포트와 컨테이너 내의 포트를 연결하여 외부에서 컨테이너에 접근할 수 있도록 하는 옵션이다. docker run의 -p 옵션과 동일한 역할을 한다.

      port:
           - "3306:3306"
      • 호스트 포트 : 컨테이너 내부 포트

      YAML 문법에서 xx:YY와 같이 작성시, 시간으로 해석되기 때문에 쌍따옴표("")를 붙여주어야 한다.




해당 글은 다음 강의의 내용을 참고한 글임을 밝힙니다. 자세한 내용은 다음 강의에서 확인해볼 수 있습니다.
인프런, 잔재미 코딩, ⌜풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]⌟
profile
블로그 이관했습니다.

0개의 댓글