Python (Django) , Docker 환경에서 구축
in Dev
Python (Django) , Docker 환경에서 구축
공부삼아 장고를 보고 있는데... 패캠에서 들었던 DevOps 수업을 적용해보고자 했는데 스터디 모임에서도!! 계속 도커에 대한 이야기가 계속 나오고 있어서.. 한번 검색해봤다.. 검색하느라 진 빠져서 포스팅 이 더뎌진건 함정.. 검색하는게 힘들어서가 아니라 그냥 찾고 나니 귀찮아짐.. 미루고 미루다가 이제사 다시 쓴다..
#python
django-admin startproject <project_name>
장고 앱으로 기본 프로젝트를 생성하자
생성한 프로젝트 dir 에 dockgrfil 을 만들자. 도커 이미지를 빌드 하기 위해선 Dockerfile 이 필요하다
장고 이미지는 2016-12-31 deprecated 됨 Docker Hub
docker file 간략 설명
FROM base image 를 지정 하는 경우 사용한다
RUN package 를 인스톨 한다던가 shell 명령어를 실행시킬때 사용한다. 예를 들어 nginx를 설치한다면 아래와 같이 사용한다. RUN ["apt-get", "install" , "-y", "nginx"]
CMD docker container 가 시작할때 실행할 커맨드를 지정 할 수 있다. RUN 과 비슷하지만 차이점은 docker image를 빌드할때 실행하는 것이 아니라 docker container 가 시작할때 실행 되는점. docker image 로 빌드된 application 을 실행할때 사용한다.
EXPOSE 외부에 노출할 포트를 지정할때 사용된다. 예를 들어 8080 포트를 외부에 노출시 아래와 같이 사용한다. EXPOSE 8080
WORKDIR 작업 디렉토리를 지정 한다
ADD 파일과 디렉토리를 호스트에서 docker image 로 copy한다 파일 소스는 파일 이름 및 디렉토리 , url 이 될수도 있다. 디렉토리를 추가시 / 로 끝나야 한다. 만일 추가하려는 디렉토리가 image 에 없으면 docker가 자동으로 생성하며 755 로 생성된다. 또한 tar 압축 파일이면 자동으로 압축을 풀어서 추가한다. 빌드 디렉토리 외부의 파일은 ADD 할 수 없다.
COPY ADD 와 기본적인 내용은 동일하나 url을 지정 할 수 없고, 압축 파일을 자동으로 풀어주지 않는다. 빌드 디렉토리 외부 파일은 copy 및 add 할 수 없다. 호스트에서 이루어지는것이 아니라 현재 빌드 디렉토리 가 docker daemon 에 업로드 된 후 작동하기 때문이다.
# 자신의 파이썬 버전을 적는다
# 버전을 적으려면
# FROM python:3.5.7-stretch 으로 작성한다
FROM python 3.6
# 필요한 것들
RUN apt-get update \
&& apt-get install -y --no-install-recommands \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# WORKDIR 은 django-admin startproject 로 만든 django 프로젝트 경로를 입력한다.
# requirements.txt 를 복사해서 pip install
# 본인의 requirements 에 맞게 수정함
WORKDIR /Users/hyeonju/python_withhyun/trollcamp/
COPY requirements.txt ./
RUN pip install -r requirements.txt
# COPY . . 를 통해 코드 복사
COPY . .
#port oepn , runserver 가 8000이 default
EXPOSE 8000
#manage.py 가 있는 dir 로 이동후 runserver 실행
#magage.py 가 dockerfile 과 같은 dir 이면 따로 WORKDIR을 지정할 필요 없다.
WORKDIR /Users/hyeonju/python_withhyun/trollcamp/
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
여기서 도커 이미지를 빌드 하자
docker image build -t django
-t 옵션은 네이밍 태그 옵션이다.
django 란 이름으로 이미지를 빌드한다.
빌드가 끝나면
docker container 를 실행한다 … docker container run -p 80:8000 -rm django
~안되더라~망했어요
도커 문서에 장고와 postgreSQL 과 같이 연동하는 방법이 설명되어있다.
이거 하니깐 된다..허허허허허허허허허허허허
프로젝트 폴더를 만들고
아래내용으로 Dockerfile 을 간략히 만들고
FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/
requirements.txt 도 생성한다
기본 requirements.txt
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
requirements.txt 생성은 #pip freeze > requirements.txt #설치되어있는 패키지들이 알파벳순으로 저장됨.
docker-compose.yml 를 만들어준다
version: '3' services: db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db
web 과 db 에 대한 service 를 정의한다.
터미널에서 프로젝트 폴더로 이동하여 docker-compose 를 기반으로 django 프로젝트를 생성한다. 예제니깐 compose example 이란 프로젝트 명으로 생성함.
sudo docker-compose run web django-admin startproject composeexample .
프로젝트가 정상적으로 생성되면 composeexample/settings.py 에서 DATABASES 수정한다
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }
- docker-compose up 명령어를 통해 docker 를 실행한다.
- http://localhost:8000 통해 접근하면 장고 프로젝트가 보인다!!!
만세에에에에
참고
Compose and Django
Quickstart: Compose and Django | Docker Documentation
도커 관한 설명은 아래 링크를 참고하자.
subicura 님의 초보를 위한 도커 안내서
raccoonyy 님의 docker compose 활용법
Docker(compose)활용법 - 개발환경 구성하기