도커 컴포즈(Docker Compose)의 정의 및 설치 방법
2020, Sep 08
Docker Compose란?
- 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구
- YAML 파일을 사용하여 애플리케이션의 서비스를 구성
- 단일 명령으로 구성에서 모든 서비스를 만들고 시작
Docker Compose의 3단계 프로세스
Dockerfile
정의docker-compose.yml
로 격리된 환경에서 함께 실행할 수 있도록 정의docker-compose up
로 전체 앱을 시작하고 실행
Docker Compose의 기능
- 단일 호스트의 여러 격리된 환경
- 컨테이너가 생성될 때 볼륨 데이터 보존
- 변경된 컨테이너만 재생성
- 변수 및 환경 간 컴포지션 이동
Docker Compose 설치 및 간단한 예제 실행
Docker Compose 설치 (CentOS 7 minimal 버전 기준)
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 바이너리 실행 권한 부여
chmod +x /usr/local/bin/docker-compose
# docker-compose 설치되었는지 확인
docker-compose --version
파이썬 개발환경 세팅 (requirements.txt 생성)
//파이썬 3 버전대가 설치되지 않을 때 강제로 다운받아서 압축풀고 설치
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
tar xzf Python-3.7.1.tgz
cd Python-3.7.1
./configure --enable-optimizations
make altinstall
python3.7 -V
vi /root/.bashrc
//.bashrc 파일에 내용 추가
alias python="/usr/local/bin/python3.7"
source /root/.bashrc
python -V
yum install epel-release
yum -y update
yum -y install python-pip
pip install --upgrade pip
pip freeze > requirements.txt
Dockerfile 생성 (django build용)
FROM python:3
RUN apt-get update && apt-get -y install \
libpq-dev
WORKDIR /app
ADD ./requirements.txt /app/
RUN pip install -r requirements.txt
docker-compose.yml 파일 정의
## 파일의 규격 버전 (3이라고 적으면 3으로 시작하는 최신버전 사용)
version: '3'
## 실행할 서비스들 정의
services:
## 서비스의 이름을 db라고 정의 (별명일뿐)
db:
## DB 서비스에서 사용할 도커 이미지 정의
image: postgres
## [호스트 공유폴더 경로]:[컨테이너 공유폴더 경로](상대경로 입력가능)
volumes:
- ./data:/var/lib/postgresql/data
## 환경변수 설정 (docker run 명령어의 -e에 있던 내용들)
environment:
- POSTGRES_DB=sampledb
- POSTGRES_USER=sampleuser
- POSTGRES_PASSWORD=samplesecret
- POSTGRES_INITDB_ARGS=--encoding=UTF-8
## 앱의 서비스 이름(별명)을 django로 정함
django:
## db서비스와 다르게 특정 이미지 대신 build 옵션을 추가
build:
context: .
## docker build 명령을 실행할 디렉터리 경로
dockerfile: ./Dockerfile-dev
## 환경변수 설정 (docker run 명령어의 -e에 있던 내용들)
environment:
- DJANGO_DEBUG=True
- DJANGO_DB_HOST=db
- DJANGO_DB_PORT=5432
- DJANGO_DB_NAME=sampledb
- DJANGO_DB_USERNAME=sampleuser
- DJANGO_DB_PASSWORD=samplesecret
- DJANGO_SECRET_KEY=dev_secret_key
## 포트 지정(docker run -p 옵션과 같음)
ports:
- "8000:8000"
## (docker run 마지막 명령어 부분과 같음)
command:
- python manage.py runserver 0:8000
## 프로젝트 루트 디렉토리와 컨테이너 안의 /app 디렉토리 연결
volumes:
- ./:/app/
docker-compose 실행
docker-compose up -d
//다른 부분은 문제가 없었는데 장고를 실행하는데 있어서 오류가 발생했다.
ERROR: Service 'django' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1