Docker-compose 로 개발환경 만들기

지수 🤓·2020년 2월 20일
1

Django

목록 보기
1/2
post-thumbnail

도커 파일들 설정

Dockerfile

FROM python:3
# 파이썬에서 출력 버퍼가 기본으로 작동하면서 출력 로그를 붙잡고 있기 때문에 로그가 한 발 늦게 출력된다.
# 이 버퍼링을 없애려면 아래 환경변수를 추가하면 된다.
ENV PYTHONUNBUFFERED 0
WORKDIR /app
COPY requirements.txt ./
RUN pip install --upgrade pip && pip install -r requirements.txt
# 개발용에서는 소스코드를 컨테이너에 넣을 필요가 없다
# 앱 코드: 앱 코드는 컨테이너 안에 집어 넣지 않고 로컬 컴퓨터의 디렉터리를 참조
# COPY . /app/
EXPOSE 8000
# 데이터베이스 서비스가 실행된 후 초기화되기 전에 Django 서버가 실행되기 때문에 django 서버가 DB를 못찾음
# wait-for-it.sh이라는 셸 스크립트를 사용 - 특정 서버의 특정 포트로 접근할 수 있을 때까지 기다려주는 스크립트
ADD    https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /
RUN chmod +x /wait-for-it.sh
CMD [ "./wait-for-it.sh" ]

docker-compose.yml

version: '3'

# 실행하려는 컨테이너들 정의
services:
	# postgres 서비스의 이름을 db로 정했음
  db:
  	# postgres 공식 이미지
    image: postgres
    # 로컬경로:컨테이너 속 경로
    volumes:
      - ./docker/data:/var/lib/postgresql/data
    # 앱 서비스의 환경 변수로 설정되며, settings.py에서 불러와 사용하게 됨
    environment:
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8
    env_file:
      - ./corona/postgre.env

	# 
  django:
    build:
    	# 빌드 명령을 실행할 디렉터리 경로
      context: .
      # 도커 이미지를 빌드하는데 사용할 도커파일
      dockerfile: ./Dockerfile
    ports:
      - "8000:8000"
    command: 
      - bash
      - -c
      - |
        /wait-for-it.sh db:5432 -t 10
        python manage.py runserver 0:8000
    volumes:
      - ./:/app/

도커 컴포즈 파일 버전 3으로 와서는 links 항목을 사용하지 않더라도 한 네트워크 안에 있는 서비스끼리 서로 통신을 할 수 있기 때문에, 이 항목을 사용하지 않았다. 하나의 docker-compose.yml 안에 있는 서비스들은 별도로 지정하지 않으면 하나의 네트워크에 속하게 된다.

출처

requirements.txt

아래 두가지는 장고에서 기본으로 하는 것들! 꼭 추가한 다음에 할 것

Django>=2.0,<3.0
psycopg2>=2.7,<3.0

장고 프젝 도커를 이용해서 만들기

프로젝트 생성

docker-compose run {service-name} django-admin.py startproject {project-name} .

위 예시에서 service-name은 django가 된다

app 생성

docker-compose run django django-admin.py startapp {app-name}

출처

profile
Backend Junior Developer

0개의 댓글