Django 및 NGINX가 있는 Linux에서 Docker Compose를 사용하여 여러 컨테이너 처리
단일 용기는 명령줄에서 강제로 구축하기 쉬우나, 더 복잡한 일을 하면 곧 제어를 잃을 수도 있다.반대로, 우리는 새로운 특수 형식의 프로필
docker-compose.yml
을 사용할 것이다.이러한 성명성 방법은 모든 용기의 이미지를 신속하게 정의하고 그들 사이에 네트워크를 구축할 수 있게 할 것이다.이 예에서는 NGINX 서버, Django 서버를 설정합니다.
선결 조건
Dockerfile을 사용하여 이미지를 구축하는 방법을 이해하는 것은 도움이 될 것입니다. Dockerfilebrush up on here을 사용할 수 있지만, 이것은 초보자에서 주로 해결될 것입니다.
로컬 컴퓨터에 다음 장치가 설치되어 있는지 확인하십시오
virtualenv - Python 로컬 환경용
Python - virtualenv를 실행하기 위해 시스템에 설치해야 합니다.
프로젝트 구조
├── botservice/
├── core
| ├── core/
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ ├── wsgi.py
│ │
│ └── Dockerfile
│ │
│ └── db.sqlite3
│ ├── manage.py
│ └── requirements.txt
├── nginx
│ ├── default.conf
│ └── Dockerfile
├── env/
├──docker-compose.yml
시동 장치
botserver
터미널로 디렉터리를 내비게이션cd botserver
합니다.virtualenv -p python env
.가상 환경 실행 활성화source env/bin/activate
pip install Django
을 통해 Django를 가상 환경에 설치합니다. 최신 버전의 Django 프레임워크를 설치합니다.django-admin startproject core
의 핵심을 만드는 것은 우리 프로젝트의 이름입니다.manage.py
가 있는 핵심 폴더에 requirements.txt
라는 파일을 만듭니다. 이것은 파이톤 의존항을 추가하는 곳입니다. docker가 필요한builds를 실행할 때 이 의존항을 설치합니다.txt 파일은 다음과 같이 종속성을 추가합니다.Django==3.1.1
gunicorn==20.0.4
Gunicorn Green Unicorn은 UNIX용 PythonWSGI
HTTP 서버입니다.NGINX 설정
NGINX 서버는 다른 컨테이너와 다릅니다.NGINX는 서버의 라우터 역할을 하며 요청을 서버 컨테이너로 전달합니다.
특수한 프로필
default.conf
에서, 우리는 upstream
을 사용하여 NGINX 용기마다 어느 서버 포트에서 실행되는지 알려줄 것이다.nginx
botservice
폴더에 botservice
폴더에 mkdir nginx
라는 폴더를 만듭니다.nginx
를 탐색하여 default.conf
라는 파일을 만들고 다음 코드를 추가합니다.upstream botservice {
server botservice:7000;
}
server {
listen 80;
location /{
proxy_pass http://botservice/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}
}
지금 우리는 이 설정을 더 유용한 곳에 두기만 하면 된다.NGINX 컨테이너에 빈 파일default.conf
이 있으므로 파일을 복사한 위치에서 이전 파일을 덮어씁니다.nginx 폴더에
Dockerfile
를 만들고 다음 내용을 Dockerfile
에 추가합니다
FROM nginx
RUN rm -rf /usr/share/nginx/html/*
COPY ./default.conf /etc/nginx/conf.d/default.conf
Django 서버에 Dockerfile을 추가해야 합니다.manage.py
파일이 있는 핵심 디렉터리에 Dockerfile
라는 파일을 추가하고 다음과 같은 내용을 추가합니다.
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /src
COPY requirements.txt /src/
RUN pip install -r requirements.txt
COPY . .
Docker Compose
bot 서비스 폴더에
docker-compose.yml
라는 파일을 만들고 다음을 추가합니다.
version: '3'
services:
botservice:
container_name: botservice
build:
context: ./core
command: sh -c "gunicorn --bind 0.0.0.0:7000 core.wsgi:application"
restart: always
volumes:
- "./core/:/src/"
- static_volume:/src/static
expose:
- "7000"
nginx:
container_name: nginx
restart: always
build: ./nginx
ports:
- "80:80"
volumes:
- static_volume:/src/static
depends_on:
- botservice
volumes:
static_volume:
도대체 무엇을 하고 싶은지 살펴보자.service
- 모든 용기와 그 특정한 설정을 설명하고 우리는 마음대로 이름을 붙일 수 있다.build
- 용기를 구축하는 방법, 이 예에서 어떤 파일을 사용하는지, dockerfile과context의 위치를 설명합니다.restart
- Docker에게 컨테이너가 실행 중 고장나면 어떻게 해야 하는지 알려 줍니다. 이 경우 우리는 항상 컨테이너가 다시 시작하기를 원합니다.ports
- 터미널에서 작업할 때의 -p 로고처럼 우리가 원하는 모든 포트를 기본 포트에 다시 비추십시오.volumes
- 각 용기에 연결된 영구 데이터입니다.용기의 일부분과 의존항을 복사했습니다. 용기를 버리고 새 용기를 시작할 때 모든 내용을 다시 설치하는 시간을 피하기 위해 캐시가 있습니다.depends_on
- 서비스 간의 의존 관계를 나타내는데 두 가지 효과가 있다. container_name
- 생성된 기본 이름 대신 사용자 정의 컨테이너 이름을 지정합니다.expose
- 호스트에 게시하지 않고 포트를 공개하며 링크된 서비스에서만 액세스할 수 있습니다.내부 포트만 지정할 수 있습니다.command
- 기본 명령을 무시합니다.마지막으로, 우리는 서비스를 만들고
docker-compose up
명령과 --build
로고를 사용하여 용기를 연결하여 DockerFile을 구축할 수 있습니다.터미널을 통해
docker-compose.yml
파일이 있는 위치로 이동하여 다음을 실행합니다.docker-compose up --build
결어
이것은 아주 간단한 용례일 수 있지만, Docker Compose는 거의 모든 Docker 프로젝트에서 사용할 주요 도구 중 하나입니다.You can check out a demo here to see how I did it when developing some chatbot.
Reference
이 문제에 관하여(Django 및 NGINX가 있는 Linux에서 Docker Compose를 사용하여 여러 컨테이너 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pmutua/working-with-multiple-containers-using-docker-compose-on-linux-2299텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)