본문 바로가기

두두의 IT

도커 컴포즈 파일(docker-compose.yml) 개념/작성/실행

728x90

개념

  • 각 프로젝트의 Dockerfile을 생성해야하고, 프로젝트끼리 연결해줘야 하는 번거로움을 없앨 수 있는 파일
  • 상차림의 매뉴얼
  • 어느 서버에든 도커 환경만 설치되어 있으면 git 등으로 이 프로젝트를 다운받고 도커로 실행해서 이 컴퓨터와 똑같은 환경을 조성하고 문제 없이 서비스 돌릴 수 있음
  • 컨테이너에 만들 내용을 레시피처럼 적어놓고 실행만 하면 됨

 

 

 

[실습 1]

docker-compose.yml
#https://docs.docker.com/compose/compose-file/compose-file-v3/ 에서 버전 확인 가능
version: '3'
services:
  #항목명 = 서비스명 = 네트워크 호스트명
  database:
    # Dockerfile이 있는 위치
    build: ./database
    # 내부에서 개방할 포트 : 외부에서 접근할 포트
    ports:
      - "3306:3306"
  #항목명 = 서비스명 = 네트워크 호스트명
  backend:
    build: ./backend
    # 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
    volumes:
      - ./backend:/usr/src/app
    ports:
      - "5000:5000"
    # 환경변수 설정
    environment: 
      - DBHOST=database
  #항목명 = 서비스명  = 네트워크 호스트명
  frontend:
    build: ./frontend
    # 연결할 외부 디렉토리 : 컨테이너 내 디렉토리
    volumes:
      - ./frontend:/home/node/app
    ports:
      - "8080:8080"​
> docker-compose up -d
> docker-compose up --build

 

[실습 2]

[1번 방법]

> docker run -d --name mysql alicek106/composetest:mysql mysqld
> docker run -d -p 80:80 --link mysql:db --name web alicek106/composetest:web apachectl -DFOREGROUND
  • mysql 이미지 컨테이너로 실행
  • apache 이미지 컨테이너로 실행

 

[2번 방법]

docker-compose.yml
version: '3'
services:
  web:	#이름 정할 수 있음
    build: .
    image: alicek106/composetest:web
    ports:
      - 80:80
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: alicek106/composetest:mysql
    command: mysqld​
> docker-compose up -d

 

> git clone ssh://git@13.125.232.197:/home/git/repos/encore
  • docker-compose.yml 있는 폴더에서 실행

 

git 프로젝트 내 docker-compose.yml
version: '3'

services:
  web:
  	#Dockerfile을 build함
    build: . 
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./:/usr/src/app/
    ports:
      - 8000:8000
git 프로젝트 내 Dockerfile
# pull official base image
FROM python:3.8.0-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apk update
RUN apk add postgresql-dev mariadb-dev gcc python3-dev musl-dev zlib-dev jpeg-dev  #--(5.2)

COPY . /usr/src/app/
# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt​

 

encore 프로젝트 안에서 저장해야 함

> docker-compose build
> docker-compose up

 

git 프로젝트 내 .env.dev
DEBUG = 1
SECRET_KEY = 'django-insecure-al8snexs%yj2+$uo3v&ct!9al=w-d75@3-84)e-i)ymqvd!np)'
DJANGO_ALLOWED_HOSTS = localhost 127.0.0.1 [::1]
git 프로젝트 내 docker-compose.yml

version: '3'

services:
  web:
  	#Dockerfile을 build함
    build: . 
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./:/usr/src/app/
    ports:
      - 8000:8000
> docker-compose build
> docker-compose up

 

> git pull origin master
> docker-compose --env-file .env build
> docker-compose up
또는
> docker-compose up -d
  • git clone한 폴더 내에서 실행
  • git이 수정될 때마다 바꾸고 실행하려면 위에서 3줄 반복
  • git 안쓰면 2번째 줄부터 반복

 

git 프로젝트 내 docker-compose.yml 수정
version: '3'

services:
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/usr/scr/app/static
    ports:
      - 80:80
    depends_on:
      - web
  web:
    build: . 
    command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - static_volume:/usr/src/app/static
      - ./:/usr/src/app/
    ports:
      - 8000:8000
volumes:
  static_volume:

> docker-compose down
  • up한거 down