[ Docker ] Docker Compose

sese·2022년 12월 14일

새싹

목록 보기
38/39

[ Docker Compose란? ]

  • 여러 개의 컨테이너를 하나로 묶어주는 역할을 하는 툴
  • 여러 개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여 관리를 가능하게 해준다.
$ docker-compose up

docker-compose.yml

version: "3.8"
services:
    # 첫번째 컨테이너
    react:
        # 컨테이너만 껐다가 켜도 수정된 코드가 반영이 된다.
        volumes: 
            - /app/node_modules
            # host 경로 : container 경로
            - ./client/:/app/
        build: 
            # 현재 위치의 도커파일을 기반으로 이미지를 만들겠다
            context: .
            # 이름이 다르면 이름을 설정할 수 있다
            # dockerfile: Dockerfile1
        ports:
            # host port는 적지 않으면 랜덤으로 지정이 된다.
            - "3000:3000"
    # 두번째 컨테이너
    node:
        # 기본 이미지 사용
        image: "node:16"
        working_dir: /usr/src/app
        volumes:
            - /app/node_modules
        ports:
            - "8000:8000"
        command: bash -c "npm install && node index"

version : docker-compose.yml 내용을 해석하기 위한 문법 버전

services : 컨테이너를 실행하기 위한 단위로 하위에는 서비스 이름 > 서비스 옵션 순으로 작성된다.
build : build 할 dockerfile의 경로를 지정해준다.

  • context : docker build를 실행할 디렉토리로 dockerfile을 찾는다.
  • dockerfile : 빌드에 사용될 Dockerfile을 찾는데 기본 이름일 경우에는 사용하지 않아도 된다.

ports : 포트 포워딩을 지정한다. <호스트포트> : <컨테이너포트>
volume : 바인드 마운트, 볼륨을 지정할 수 있다.

  • 로컬 PC의 디렉토리와 컨테이너 안의 디렉토리를 연결한다.
  • <호스트>:<컨테이너> 방식으로 사용한다.
  • 보통 docker-compose를 통해 빌드하게 되면 이미지가 생성되는데, 개발을 하다보면 수시로 코드를 수정하게 되는데 이때마다 이미지를 재생성하면 굉장히 비효율적이다.
  • 이때 코드 수정을 하고 있는 호스트의 경로를 컨테이너와 연결시켜 이미지 빌드 없이 코드가 반영될 수 있도록 하는 것이 volume이다.

image : 도커 이미지 ( dockerfile을 사용하지 않는 기본 이미지일 경우 )
command : 마지막 만들어지고 난 후 실행할 명령을 작성한다.

profile
예전 글은 다크모드로 봐야 잘 보일 수도 있습니다.

0개의 댓글