Django, Docker 및 PostgreSQL 자습서
Postgres.app와 같은 도구를 사용하여 로컬에서 PostgreSQL을 실행하는 것은 가능하지만, 현재 많은 개발자들이 사용하는 것이 가장 우선이다Docker. 이것은 독립된 운영체제를 만드는 데 사용되는 도구이다.가장 간단한 방법은 이를 대형 가상 환경으로 간주하는 것이다. 그 중에서 Django 프로젝트에 필요한 모든 것을 포함한다. 의존항, 데이터베이스, 캐시 서비스와 기타 필요한 도구이다.
Docker를 사용하는 중요한 이유 중 하나는 로컬 개발 설정을 둘러싼 모든 문제를 완전히 없앴기 때문입니다.어떤 패키지가 설치되어 있거나 프로젝트 옆에서 로컬 데이터베이스를 실행할 염려가 없습니다. 전체 프로젝트의 Docker 이미지만 실행하면 됩니다.가장 중요한 것은 이를 그룹에서 공유하고 팀 개발을 더욱 간단하게 할 수 있다는 것이다.
Docker 설치
첫 번째 단계는 로컬 컴퓨터에 데스크톱 Docker 응용 프로그램을 설치하는 것입니다.
Docker 설치가 완료되면 정확한 버전이 실행 중인지 확인할 수 있습니다.터미널에서 명령
docker --version
을 실행합니다.$ docker --version
Docker version 19.03.5, build 633a0ea
Docker Compose는 Docker의 Mac과 Windows 다운로드에 자동으로 포함되는 추가 도구입니다.그러나 Linux를 사용하는 경우 수동으로 추가해야 합니다.Docker 설치가 완료되면 명령sudo pip install docker-compose
을 실행하여 작업을 완료할 수 있습니다.Django 프로젝트
우리는 Message Board app 중의 Django for Beginners 을 사용할 것이다.이것은 관리자에서 업데이트할 수 있는 SQLite의 기본 게시판 응용 프로그램을 사용하는 코드를 제공합니다.
데스크톱에 새 디렉터리를 만들고 리포를 복제합니다.
$ cd ~/Desktop
$ git clone https://github.com/wsvincent/djangoforbeginners.git
$ cd djangoforbeginners
$ cd ch4-message-board-app
그리고 Pipenv
지정된 패키지를 설치하고 새 셸을 시작합니다.(ch4-message-board-app)
를 보면 가상 환경이 활성 상태임을 알 수 있습니다.$ pipenv install
$ pipenv shell
(ch4-message-board-app) $
이러한 변경 후 migrate
우리의 데이터베이스를 확보하십시오.(ch4-message-board-app) $ python manage.py migrate
현재 python manage.py runserver
명령을 사용하고 있다면, http://localhost:8000 에서 저희 프로그램의 작업 버전을 볼 수 있습니다.Docker(다시)
Docker가 이 점에서 설치를 완료했으면 합니다.설치가 완료되었는지 확인하려면
Control+c
를 사용하여 로컬 서버를 종료하고 명령줄에 docker run hello-world
을 입력합니다.다음과 같은 응답을 볼 수 있습니다.$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image whi
ch runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client,
which sent it to your terminal.
To try something more ambitious, you can run an Ubuntu container
with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
이미지 및 컨테이너
Docker에서 이미지와 컨테이너라는 두 가지 중요한 개념을 파악해야 합니다.
그림: 프로젝트의 모든 소프트웨어 패키지에 대한 설명 목록
컨테이너: 이미지가 실행될 때 인스턴스
Docker 이미지와 컨테이너를 구성하려면
Dockerfile
및 docker-compose.yml
두 파일을 사용합니다.Dockerfile
이미지의 명령 목록, 즉 용기 환경에서 실제로 발생하는 일을 포함합니다.새
Dockerfile
파일을 만듭니다.(ch4-message-board-app) $ touch Dockerfile
그리고 텍스트 편집기에 다음 코드를 추가합니다.# Dockerfile
# Pull base image
FROM python:3.7
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /code
# Install dependencies
RUN pip install pipenv
COPY Pipfile Pipfile.lock /code/
RUN pipenv install --system
# Copy project
COPY . /code/
맨 위 줄에서 우리는 Python 3.7에 대해 하나official Docker image를 사용했다.다음은 두 개의 환경 변수를 만듭니다.PYTHONUNBUFFERED
우리의 콘솔 출력이 익숙해 보이고 Docker에 버퍼되지 않도록 하는 것은 우리가 원하지 않는 것이다.PYTHONDONTWRITEBYTECODE 파이썬이 우리가 원하지 않는 파일을 작성하려 하지 않는다는 것을 의미한다.다음 행은
.pyc
을 WORKDIR
로 설정합니다.이것은 작업 디렉터리가 /code
에 있다는 것을 의미하기 때문에 앞으로 /code
같은 명령을 실행할 때 우리는 manage.py
코드가 Docker에 있는 정확한 위치를 기억할 필요가 없다.그리고 의존항을 설치합니다. 최신 버전
WORKDIR
, 설치pip
, 로컬pipenv
및Pipfile
을 Docker에 복사한 다음 이를 실행하여 의존항을 설치합니다.Pipfile.lock
명령은 명령줄에서처럼 Docker에서 명령을 실행할 수 있도록 합니다.다음은 새로운
RUN
파일이 필요합니다.이것은 Docker가 Docker 컨테이너를 실행하는 방법을 알려줍니다.(ch4-message-board-app) $ touch docker-compose.yml
다음 코드를 입력합니다.version: '3.7'
services:
db:
image: "postgres:11"
volumes:
- postgres_data:/var/lib/postgresql/data/
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
volumes:
postgres_data:
맨 윗줄에서 우리는 Compose의 most recent version, 즉 docker-compose.yml
을 사용했다.데이터베이스
3.7
에서 Postgres 10.1의 Docker 이미지가 필요하며, db
를 사용하여 Compose 용기가 Docker 용기에 있는 위치를 알려 줍니다.volumes
에 대해 우리는 웹 서비스의 운행 방식을 지정했다.우선, Compose는 현재 디렉터리에서 이미지를 구축하고 web
에서 서버를 시작해야 한다.Compose가 코드를 0.0.0.0:8000
Docker 컨테이너에 저장하는 것을 알려주기 위해 volumes
를 사용합니다./code/
구성을 통해 Docker 컨테이너의 포트 8000에 자체 포트 8000을 매핑할 수 있습니다.이것은 기본 Django 포트입니다.마지막으로 ports
웹 서비스를 실행하기 전에 우리는 먼저 depends_on
을 시작해야 한다고 말했다.마지막 부분
db
은 Compose에 규칙이 있기 때문에 최상위volumes
키에 명명된 볼륨을 표시해야 합니다.이제 Docker를 실행하는 것으로 전환하므로 가상 환경
volumes
을 사용할 수 있습니다.(ch4-message-board-app) $ exit
$
이제 exit
명령을 사용하여 Docker 컨테이너를 시작하고 분리 모드에서 실행할 수 있도록 up
로고를 추가하고 -d
로고를 추가하여 초기 이미지를 만듭니다.만약 우리가 이 로고를 추가하지 않았다면, 우리는 명령을 실행하기 위해 단독 명령행 옵션을 열어야 한다.$ docker-compose up -d --build
Docker 준비됐어요!게시판 홈 페이지http://127.0.0.1:8000/에 방문하면 Docker를 통해 실행됩니다.PostgreSQL로 업데이트
게시판 응용 프로그램을 업데이트하고 SQLite가 아닌 PostgreSQL을 사용해야 합니다.먼저 설치
--build
하여 데이터베이스를 PostgreSQL에 바인딩합니다.$ pipenv install psycopg2-binary
그리고 psycopg2-binary
파일을 업데이트하여 SQLite가 아닌 PostgreSQL을 사용하도록 지정합니다.# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db', # set in docker-compose.yml
'PORT': 5432 # default postgres port
}
}
이제 Docker에 데이터베이스를 만들어야 합니다.$ docker-compose exec web python manage.py migrate
관리
게시판 응용 프로그램에서 관리자를 사용해야 하기 때문에 Docker에 수퍼유저를 만듭니다.다음 명령을 실행하고 프롬프트를 입력합니다.
$ docker-compose exec web python manage.py createsuperuser
이제 http://127.0.0.1:8000/admin 로 이동하여 로그인합니다.관리자를 통해 새 게시물을 추가한 다음 홈 페이지에 표시할 수 있습니다 Django for Beginners.완료되면 Docker 컨테이너를 닫는 것을 잊지 마십시오.
$ docker-compose down
빠른 검토
다음은 이 문서에서 설명한 용어와 개념의 간략한 버전입니다.
그림: 프로젝트의 정의
컨테이너: 프로젝트의 실제 실행 내용(이미지 실례)
Dockerfile: 이미지의 모양 정의
docker 작성.yml: Dockerfile을 수신하고 Docker 컨테이너가 생산 중인 행위에 대한 추가 설명을 추가하는 파일YAML
우리는 Dockerfile을 사용하여 Docker가 우리의 이미지를 구축하는 방법을 알려 줍니다.그리고 우리는 하나의 용기에서 우리의 실제 프로젝트를 실행한다.부두 노동자가 글을 쓰다.yml 파일은 Docker 컨테이너가 생산 중인 행위에 대한 추가 정보를 제공합니다.
다음 단계
만약 당신이 Django와 Docker를 함께 사용하는 것에 대해 더 많은 정보를 알고 싶다면, 나는 이미 이 주제에 관한 책 Django for Professionals 을 한 권 썼다.
Reference
이 문제에 관하여(Django, Docker 및 PostgreSQL 자습서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/learndjango/django-docker-and-postgresql-tutorial-be3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)