[Docker] Docker-compose란?

김재연·2022년 3월 17일
0

Docker

목록 보기
2/4

Docker-compose란?

여러개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여 관리를 간단하게 하는 것으로, 여러개의 컨테이너 설정 내용을 하나의 yaml 파일에 모아서 사용한다. compose 파일을 준비해서 커맨드를 1번 실행하는 것만으로 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시킬 수 있다.


Docker-compose 기본 명령

실행 : docker-compose up

중지 : docker-compose stop

실행하면서 빌드(서비스 시작 전 이미지를 새로 만든다) : docker-compose up --build


Docker-compose 사용 방법

  1. 각각의 컨테이너의 Dockerfile을 작성한다.
  2. docker-compose.yml을 작성하고, 각각 독립된 컨테이너의 실행 정의를 실시한다.
  3. docker-compose up 커맨드를 실행해서 docker-compose.yml으로 정의한 컨테이너를 개시한다.

Docker-compose.yml 파일

version: '3.5'
services:
  mockserver:
    build: mockserver
		# mockerserver 폴더 안에 사용할 Dockerfile이 있음
    ports: ['8001:8000']
		# 호스트 OS 8001 <= mockserver 컨테이너 포트 8000
    volumes:
      - './mockserver/public:/home/public'
      - './mockserver/server.py:/home/server.py'
  web:
    build:
      context: .
      dockerfile: web/Dockerfile
			# web 폴더 안에 사용할 Dockerfile이 있음
      cache_from:
        - eu.gcr.io/tmrow-152415/electricitymap_web:production
        - eu.gcr.io/tmrow-152415/electricitymap_web:staging
        - eu.gcr.io/tmrow-152415/electricitymap_web:latest
    image: eu.gcr.io/tmrow-152415/electricitymap_web:latest
		# 베이스 이미지
    command: npm run server-dev
		# 이 서비스가 올라올 때 dockerfile의 CMD를 무시하고 npm run server-dev가 실행됨
    depends_on: ['mockserver']
		# web이 올라오기 전에 mockserver가 먼저 올라와야 함
    environment:
      - NODE_ENV=development
    ports: ['8000:8000']
		# 호스트 OS 8000 <= web 컨테이너 포트 8000
    volumes:
      - './config:/home/config'

- build

해당 서비스의 이미지를 빌드하기 위한 Dockerfile이 위치하는 경로를 저장한다.

- ports

호스트 OS와 컨테이너의 포트를 바인딩시켜준다.

따옴표와 함께 문자열로 지정해야 한다.

형식은 “host:container” 또는 “container”

외부로 노출시킬 포트의 맵핑을 명시하는 부분

바인드(bind)가 필요한 호스트 외부 포트와 컨테이너 내부 포트를 지정

- image

docker-compose 안에서 베이스 이미지를 지정한다.

- command

해당 서비스가 올라올 때 Dockerfile의 CMD 명령문을 무시하고 실행할 명령어를 설정한다.

- depends_on

서비스 간의 종속성 순서대로 서비스를 시작한다.

A: depends_on: -B A 애플리케이션이 올라오기 전에 B가 먼저 올라와야 한다.

- environment

컨테이너의 환경 변수를 지정한다.


Dockerfile 파일

FROM python:3.8-alpine
WORKDIR /home
EXPOSE 8000
ADD server.py server.py
CMD cd public && python ../server.py

- EXPOSE

호스트 OS에 포트를 공개하지 않고, 컨테이너에서만 포트를 공개한다.

- ADD

파일을 이미지에 추가한다.

- CMD

컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행한다.

profile
일기장같은 공부기록📝

1개의 댓글

comment-user-thumbnail
2023년 2월 21일

안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?

클리앙 : https://www.clien.net/service/board/park/17797443

연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.

협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.

sungjh0726@naver.com

협찬제품 링크 : https://incatos.shop/surl/P/11

답글 달기