Django 및 NGINX가 있는 Linux에서 Docker Compose를 사용하여 여러 컨테이너 처리

본고에서 우리는 응용 프로그램을 여러 개의 Docker 용기로 구성된 작은 네트워크로 어떻게 분할하는지 탐색할 것이다. 용기마다 자신의 이미지가 있다.
단일 용기는 명령줄에서 강제로 구축하기 쉬우나, 더 복잡한 일을 하면 곧 제어를 잃을 수도 있다.반대로, 우리는 새로운 특수 형식의 프로필 docker-compose.yml 을 사용할 것이다.이러한 성명성 방법은 모든 용기의 이미지를 신속하게 정의하고 그들 사이에 네트워크를 구축할 수 있게 할 것이다.
이 예에서는 NGINX 서버, Django 서버를 설정합니다.

선결 조건
Dockerfile을 사용하여 이미지를 구축하는 방법을 이해하는 것은 도움이 될 것입니다. Dockerfilebrush up on here을 사용할 수 있지만, 이것은 초보자에서 주로 해결될 것입니다.
로컬 컴퓨터에 다음 장치가 설치되어 있는지 확인하십시오

  • virtualenv - Python 로컬 환경용
  • Docker
  • Docker Compose

  • 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 프로젝트 실행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 - 기본 명령을 무시합니다.
  • More info about Docker Compose file.
    마지막으로, 우리는 서비스를 만들고 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.

    좋은 웹페이지 즐겨찾기