웹사이트 검색

Docker 설명: Python 웹 애플리케이션을 컨테이너화하는 방법


상태: 더 이상 사용되지 않음

이 문서는 더 이상 사용되지 않으며 더 이상 유지 관리되지 않습니다.

이유

이 문서의 기술은 구식이며 더 이상 Docker 모범 사례를 반영하지 않을 수 있습니다.

대신 보기

  • Docker 생태계: 공통 구성요소 소개
  • 도커 파이썬 참조
  • Dockerfile 참조
  • Dockerfile 작성 모범 사례

소개

웹 애플리케이션이 하이재킹되어 전체 호스트를 장악하는 데 사용되는 위협은 방대하고 무서운 것입니다. 특히 응용 프로그램이 다른 클라이언트에 속하는 경우 보안 강화를 위해 사물을 서로 격리하는 것은 오랫동안 어려운 과제였습니다. 이 불행한 시나리오를 방지하기 위해 많은 조치를 취할 수 있지만 대부분의 개발자 또는 관리자의 사용 사례에는 일반적으로 비용이 너무 많이 들거나(시간 및 리소스 모두) 너무 복잡합니다.

이 DigitalOcean 기사에서는 Python 웹 애플리케이션을 매우 안전한 샌드박스에 보관하고 자체 환경 내에서 절대적으로 유지하기 위해 Python 웹 애플리케이션을 "컨테이너화\하는 방법에 대해 설명합니다(명시적으로 다른 애플리케이션에 "링크\하지 않는 한). 이를 달성하기 위해 Python 웹 애플리케이션을 호스팅하는 도커 컨테이너를 단계별로 생성하고 마지막으로 빌드 프로세스를 Dockerfile로 부트스트래핑하여 완전히 자동화하는 방법을 살펴보겠습니다.

용어 사전

1. 도커 개요

2. 우분투에 도커 설치하기

3. 기본 Docker 명령

  1. docker 데몬 및 CLI 사용 실행
  2. 도커 명령

4. Sandbox Python WSGI 앱에 Docker 컨테이너 구축

  1. Ubuntu에서 기본 Docker 컨테이너 만들기
  2. 설치를 위한 기본 컨테이너 준비
  3. 배포용 일반 Python 도구 설치
  4. 웹 응용 프로그램 및 해당 종속성 설치
  5. Python WSGI 애플리케이션 구성

5. 이미지를 자동으로 빌드하기 위한 Dockerfile 만들기

  1. 도커파일 기초
  2. Dockerfile 명령 개요
  3. Dockerfile 만들기
  4. 기본 정의
  5. 설치용 기본 애플리케이션 저장소 업데이트
  6. 기본 도구 설치
  7. Python 및 기본 Python 도구에 대한 기본 설치 지침
  8. 애플리케이션 배포
  9. 모든 것을 부트스트래핑
  10. 최종 Dockerfile
  11. Dockerfile을 사용하여 컨테이너 자동 구축

도커 개요

docker 프로젝트는 일부 Linux 커널 기능 위에 구축된 함께 작동하는 상위 수준 도구를 제공합니다. 목표는 개발자와 시스템 관리자가 모든 종속성과 함께 응용 프로그램을 포팅하고 시스템과 시스템에서 두통 없이 실행되도록 돕는 것입니다.

Docker는 docker 컨테이너라고 하는 애플리케이션을 위한 안전한 LXC(예: Linux 컨테이너) 기반 환경을 생성하여 이를 달성합니다. 이러한 컨테이너는 Dockerfile을 통해 수동 또는 자동으로 명령을 실행하여 빌드할 수 있는 도커 이미지를 사용하여 생성됩니다.

참고: docker 및 해당 부분(예: docker 데몬, CLI, 이미지 등)에 대한 자세한 내용은 프로젝트 소개 문서인 docker Explained: Getting Started를 확인하십시오.

Ubuntu에 Docker 설치(최신)

최신 릴리스(0.7.1. 12월 5일 날짜)를 통해 docker는 Ubuntu/Debian 및 CentOS/RHEL을 비롯한 다양한 Linux 운영 체제에 배포할 수 있습니다.

Ubuntu 13.04에 구축된 DigitalOcean의 바로 사용할 수 있는 도커 이미지를 사용하여 빠르게 시작할 수 있습니다.

Ubuntu(최신)의 설치 프로세스를 빠르게 살펴보겠습니다.

Ubuntu 설치 지침

물방울 업데이트:

sudo aptitude    update
sudo aptitude -y upgrade

aufs 지원이 가능한지 확인하십시오:

sudo aptitude install linux-image-extra-`uname -r`

패키지 확인을 위해 apt-key에 도커 리포지토리 키를 추가합니다.

sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"

aptitude 소스에 도커 저장소를 추가합니다.

sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"

새 추가 항목으로 저장소를 업데이트합니다.

sudo aptitude    update

마지막으로 docker를 다운로드하여 설치합니다.

sudo aptitude install lxc-docker

우분투의 기본 방화벽(UFW: Uncomplicated Firewall)은 도커가 필요로 하는 모든 포워딩 트래픽을 기본적으로 거부합니다.

UFW로 전달 활성화:

나노 텍스트 편집기를 사용하여 UFW 구성을 편집합니다.

sudo nano /etc/default/ufw

아래로 스크롤하여 DEFAULT_FORWARD_POLICY로 시작하는 줄을 찾습니다.

바꾸다:

DEFAULT_FORWARD_POLICY="DROP"

와 함께:

DEFAULT_FORWARD_POLICY="ACCEPT"

CTRL+X를 누르고 Y로 승인하여 저장하고 닫습니다.

마지막으로 UFW를 다시 로드합니다.

sudo ufw reload

기본 Docker 명령

docker 작업을 시작하기 전에 사용 가능한 명령을 빠르게 살펴보고 첫 번째 시작하기 문서에서 기억을 되살려 보겠습니다.

docker 데몬 및 CLI 사용 실행

설치 시 docker 데몬이 백그라운드에서 실행 중이어야 하며 docker CLI에서 보낸 명령을 수락할 준비가 되어 있어야 합니다. docker를 수동으로 실행해야 하는 특정 상황의 경우 다음을 사용하십시오.

도커 데몬 실행:

sudo docker -d &

도커 CLI 사용법:

sudo docker [option] [command] [arguments]

참고: 도커가 작동하려면 sudo 권한이 필요합니다.

도커 명령

다음은 현재 사용 가능한(버전 0.7.1) 도커 명령에 대한 요약입니다.

붙이다

실행 중인 컨테이너에 연결

짓다

Dockerfile에서 컨테이너 빌드

저지르다

컨테이너의 변경 사항으로 새 이미지 만들기

CP

컨테이너 파일 시스템에서 호스트 경로로 파일/폴더 복사

차이

컨테이너 파일 시스템의 변경 사항 검사

이벤트

서버에서 실시간 이벤트 가져오기

내보내다

컨테이너의 콘텐츠를 tar 아카이브로 스트리밍

역사

이미지의 기록 표시

이미지

이미지 나열

수입

tarball의 내용에서 새 파일 시스템 이미지 생성

정보

시스템 전체 정보 표시

끼워 넣다

이미지에 파일 삽입

검사하다

컨테이너에 대한 하위 수준 정보 반환

죽이다

실행 중인 컨테이너 죽이기

tar 아카이브에서 이미지 로드

로그인

Docker 레지스트리 서버에 등록 또는 로그인

로그

컨테이너의 로그 가져오기

포트

PRIVATE_PORT로 NAT된 공용 포트 조회

추신

컨테이너 나열

당기다

Docker 레지스트리 서버에서 이미지 또는 리포지토리 가져오기

푸시

Docker 레지스트리 서버에 이미지 또는 리포지토리 푸시

재시작

실행 중인 컨테이너 다시 시작

rm

하나 이상의 컨테이너 제거

rmi

하나 이상의 이미지 제거

달리다

새 컨테이너에서 명령 실행

구하다

tar 아카이브에 이미지 저장

찾다

도커 인덱스에서 이미지 검색

시작

중지된 컨테이너 시작

멈추다

실행 중인 컨테이너 중지

꼬리표

리포지토리에 이미지 태그 지정

맨 위

컨테이너의 실행 중인 프로세스 조회

버전

도커 버전 정보 표시

Sandbox Python WSGI 앱에 Docker 컨테이너 구축

VPS에 도커를 설치하고 해당 명령을 신속하게 검토한 후 Python WSGI 애플리케이션을 실행하는 도커 컨테이너를 만들기 위한 실제 작업을 시작할 준비가 되었습니다.

참고: 다음 섹션에서는 Docker화된(컨테이너화된) Python WSGI 웹 애플리케이션을 사용할 수 있습니다. 그러나 복잡하고 실행 불가능하기 때문에 권장되는 방법은 아닙니다. 라이브 컨테이너로 작업하는 방법을 배우고 프로세스를 자동화하기 위해 다음 섹션에서 나중에 정의해야 하는 명령에 익숙해질 수 있는 기회를 제공합니다.

의 시작하자!

Ubuntu에서 기본 Docker 컨테이너 만들기

docker의 RUN 명령을 사용하여 Ubuntu 이미지를 기반으로 새 컨테이너를 생성하는 것으로 시작합니다. -t 플래그를 사용하여 터미널을 연결하고 bash를 실행 프로세스로 사용합니다.

외부에서 애플리케이션에 액세스할 수 있도록 포트 80을 노출할 것입니다. 향후에는 예를 들어 리버스 프록시 실행 컨테이너를 사용하여 액세스하기 위해 여러 인스턴스의 부하를 분산하고 컨테이너를 서로 "링크\할 수 있습니다.

sudo docker run -i -t -p 80:80 ubuntu /bin/bash

참고: 이 명령을 실행한 후 docker는 새 컨테이너를 생성하기 전에 Ubuntu 이미지를 해야 할 수 있습니다.

기억하세요: 당신은 당신이 만든 컨테이너에 연결될 것입니다. 자신을 분리하고 기본 터미널 액세스 포인트로 돌아가려면 이스케이프 시퀀스(CTRL+P 다음에 CTRL+Q)를 실행합니다. 도커 컨테이너에 연결되는 것은 다른 내부에서 새로운 드롭릿에 연결되는 것과 같습니다.

이 컨테이너에 자신을 다시 연결하려면:

  1. "sudo docker ps\를 사용하여 실행 중인 모든 컨테이너 나열\n
  2. ID 찾기
  3. 터미널에 다시 연결하려면 "sudo docker attach [id]\를 사용하세요.\n

중요: 우리는 컨테이너 안에 있기 때문에 상주하는 호스트에 영향을 주지 않고 다음 명령이 모두 컨테이너에서 실행된다는 점을 잊지 마십시오.

설치를 위한 기본 컨테이너 준비

컨테이너 내부에 Python WSGI 웹 애플리케이션과 프로세스에 필요한 도구를 배포하려면 관련 애플리케이션 리포지토리를 다운로드할 수 있어야 합니다. 불행히도 (그리고 의도적으로 간단하게 유지하기 위해) docker와 함께 제공되는 기본 Ubuntu 이미지의 경우에는 그렇지 않습니다.

기본 이미지의 응용 프로그램 소스 목록의 기본 목록에 Ubuntu의 유니버스 리포지토리를 추가해 보겠습니다.

echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list

새로 추가된 소스로 목록을 업데이트합니다.

apt-get update

Python WSGI 애플리케이션 설정을 진행하기 전에 nano, tar, curl 등과 같은 몇 가지 도구가 있어야 합니다. - 만약.

컨테이너 내부에 몇 가지 유용한 도구를 다운로드해 보겠습니다.

apt-get install -y tar \
                   git \
                   curl \
                   nano \
                   wget \
                   dialog \
                   net-tools
                   build-essential

배포를 위한 일반적인 Python 도구 설치

자습서(예제)에서는 매우 기본적인 Flask 애플리케이션을 만들 것입니다. 이 문서를 따른 후 가상 서버에 배포하는 것과 같은 방식으로 선호하는 프레임워크를 대신 사용하고 배포할 수 있습니다.

기억하세요: 아래의 모든 명령과 지침은 여전히 컨테이너 내부에서 이루어지며, 컨테이너는 거의 자체적으로 새로운 물방울인 것처럼 작동합니다.

Python 및 Python 패키지 관리자를 pip 설치하여 배포 프로세스를 시작하겠습니다.

# Install pip's dependency: setuptools:
apt-get install -y python python-dev python-distribute python-pip

웹 애플리케이션 및 해당 종속성 설치

샘플 애플리케이션 생성을 시작하기 전에 모든 것, 즉 모든 종속성이 있는지 확인하는 것이 좋습니다. 무엇보다도 웹 애플리케이션 프레임워크(WAF)를 애플리케이션의 종속성(예: Flask)으로 가질 가능성이 높습니다.

pip를 설치하고 작업할 준비가 되었으면 pip를 사용하여 모든 종속성을 가져오고 컨테이너 내부에 설정할 수 있습니다.

# Download and install Flask framework:
pip install flask

pip를 설치한 후 "my_application\ 폴더 안에 모든 것을 포함할 기본적인 샘플 Flask 애플리케이션을 만들어 봅시다.

# Make a my_application folder
mkdir my_application

# Enter the folder
cd my_application 

참고: 이 간단한 샘플 예제 대신 애플리케이션 배포에 관심이 있는 경우 아래 "빠른 팁\ 중간 섹션을 참조하십시오.

한 페이지짜리 플라스크 "Hello World!\를 만들어 봅시다. 나노를 이용한 응용 프로그램.

# Create a sample (app.py) with nano:
nano app.py

방금 언급한 이 작은 응용 프로그램에 대해 아래 내용을 복사하여 붙여넣으십시오.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

CTRL+X를 누르고 Y로 승인하여 저장하고 닫습니다.

또는 "requirements.txt\를 사용하여 Flask와 같은 애플리케이션의 종속성을 포함할 수 있습니다.

nano 텍스트 편집기를 사용하여 requirements.txt를 생성하려면:

nano requirements.txt

모든 종속성과 함께 다음을 내부에 입력하십시오.

flask
cherrypy

CTRL+X를 누르고 Y로 승인하여 저장하고 닫습니다.

참고: pip를 사용하여 실제 애플리케이션의 종속성 목록을 만들 수 있습니다. 방법을 알아보려면 공통 Python 도구: virtualenv 사용, Pip으로 설치 및 패키지 관리 튜토리얼을 확인하세요.

최종 애플리케이션 폴더 구조:

/my_application
    |
    |- requirements.txt  # File containing list of dependencies
    |- /app              # Application module (which should have your app)
    |- app.py            # WSGI file containing the "app" callable
    |- server.py         # Optional: To run the app servers (CherryPy)

참고: "server.py” - Python WSGI 애플리케이션 구성에 관한 다음 섹션을 참조하세요.

알아두기: 이 애플리케이션 폴더는 컨테이너 내부에 생성됩니다. 이미지를 자동으로 빌드하는 경우(Dockerfile에 대한 다음 섹션 참조) Dockerfile과 함께 호스트에 이 구조가 있는지 확인해야 합니다.

__ * 실제 배포를 위한 빠른 팁 * __

컨테이너 내에서 애플리케이션 리포지토리 및 해당 요구 사항을 가져오는 방법

위의 예에서는 컨테이너 내부에 애플리케이션 디렉터리를 만들었습니다. 그러나 애플리케이션을 배포하기 위해 그렇게 하지 않을 것입니다. 리포지토리에서 소스를 가져올 가능성이 높습니다.

컨테이너 내에서 리포지토리를 복사하는 방법에는 여러 가지가 있습니다.

다음은 그 중 두 가지입니다.

# Example [1]
# Download the application using git:
# Usage: git clone [application repository URL]
# Example:
git clone https://github.com/mitsuhiko/flask/tree/master/examples/flaskr

# Example [2]
# Download the application tarball:
# Usage: wget [application repository tarball URL]
# Example: (make sure to use an actual, working URL)
wget http://www.github.com/example_usr/application/tarball/v.v.x

# Expand the tarball and extract its contents:
# Usage: tar vxzf [tarball filename .tar (.gz)]
# Example: (make sure to use an actual, working URL)
tar vxzf application.tar.gz

# Download and install your application dependencies with pip.
# Download the requirements.txt (pip freeze output) and use pip to install them all:
# Usage: curl [URL for requirements.txt] | pip install -r -
# Example: (make sure to use an actual, working URL)
curl http://www.github.com/example_usr/application/requirements.txt | pip install -r -

Python WSGI 애플리케이션 구성

이 애플리케이션을 제공하려면 웹 서버가 필요합니다. WSGI 앱을 구동하는 웹 서버는 애플리케이션의 다른 리소스와 동일한 컨테이너에 설치되어야 합니다. 실제로 docker가 실행하는 프로세스가 될 것입니다.

참고: 이 예에서는 단순성으로 인해 CherryPy의 기본 제공 프로덕션 준비 HTTP 웹 서버를 사용합니다. 해당 주제에 대한 자습서를 따라 Gunicorn, CherryPy 또는 uWSGI(및 Nginx 뒤에 설정)를 사용할 수 있습니다.

pip로 CherryPy를 다운로드하고 설치합니다.

pip install cherrypy

"app.py\를 생성합니다:

nano server.py

서버에서 애플리케이션을 가져오고 서비스를 시작하려면 아래에서 콘텐츠를 복사하여 붙여넣으세요.

# Import your application as:
# from app import application
# Example:

from app import app

# Import CherryPy
import cherrypy

if __name__ == '__main__':

    # Mount the application
    cherrypy.tree.graft(app, "/")
        
    # Unsubscribe the default server
    cherrypy.server.unsubscribe()

    # Instantiate a new server object
    server = cherrypy._cpserver.Server()
    
    # Configure the server object
    server.socket_host = "0.0.0.0"
    server.socket_port = 80
    server.thread_pool = 30
    
    # For SSL Support
    # server.ssl_module            = 'pyopenssl'
    # server.ssl_certificate       = 'ssl/certificate.crt'
    # server.ssl_private_key       = 'ssl/private.key'
    # server.ssl_certificate_chain = 'ssl/bundle.crt'
    
    # Subscribe this server
    server.subscribe()
    
    # Start the server engine (Option 1 *and* 2)
    
    cherrypy.engine.start()
    cherrypy.engine.block()

그리고 그게 다야! 이제 "도커화된\ Python 웹 애플리케이션을 샌드박스에 안전하게 보관하고 다음을 실행하여 수천 개의 클라이언트 요청을 처리할 수 있습니다.

python server.py

포그라운드에서 서버를 실행합니다. 중지하려면 CTRL+C를 누르십시오.

백그라운드에서 서버를 실행하려면 다음을 실행하십시오.

python server.py &

백그라운드에서 애플리케이션을 실행할 때 이를 종료(또는 중지)하려면 프로세스 관리자(예: htop)를 사용해야 합니다.

참고: CherryPy로 배포하기 위한 Python WSGI 애플리케이션 구성에 대한 자세한 내용은 CherryPy 웹 서버를 사용하여 Python WSGI 앱을 배포하는 방법 자습서를 확인하십시오.

모든 포트 할당이 이미 처리되어 있어야 모든 것이 원활하게 실행되는지 테스트하려면 브라우저에서 http://[귀하의 드롭릿의 IP]를 방문하여 "Hello World!\를 볼 수 있습니다. 메시지.

이미지를 자동으로 빌드하는 Dockerfile 만들기

이전 단계에서 언급했듯이 확장 가능한 프로덕션 배포를 위해 이러한 방식으로 컨테이너를 생성하는 것은 확실히 권장되는 방법이 아닙니다. 올바른 방법은 Dockerfile을 사용하여 구조화된 방식으로 빌드 프로세스를 자동화하는 것으로 간주할 수 있습니다.

컨테이너 내부에 다운로드 및 설치하는 데 필요한 명령을 수행한 후 동일한 지식을 사용하여 도커가 이미지를 빌드하는 데 사용할 수 있는 Dockerfile을 구성할 수 있습니다. 그런 다음 이 파일을 사용하여 Python WSGI 애플리케이션 컨테이너를 쉽게 실행할 수 있습니다.

Dockerfile 작업을 시작하기 전에 기본 사항을 빠르게 살펴보겠습니다.

도커파일 기초

Dockerfile은 연속적으로 선언된 명령이 포함된 스크립트로, docker가 자동으로 새 docker 이미지를 생성하기 위해 해당 순서대로 실행됩니다. 배포에 큰 도움이 됩니다.

이러한 파일은 항상 FROM 명령을 사용하여 기본 이미지를 정의하는 것으로 시작합니다. 여기서부터 빌드 프로세스가 시작되고 이후에 수행되는 각 작업은 호스트에 커밋될 최종 이미지를 형성합니다.

용법:

# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t nginx_img . 

참고: Dockerfile에 대해 자세히 알아보려면 Docker 설명: Dockerfile을 사용하여 이미지 빌드 자동화 문서를 확인하십시오.

Dockerfile 명령 개요

추가하다

호스트에서 컨테이너로 파일 복사

CMD

실행할 기본 명령을 설정하거나 ENTRYPOINT로 전달

진입 지점

컨테이너 내부에 기본 진입점 애플리케이션 설정

ENV

환경 변수 설정(예: "key = value\)

폭로하다

외부에 포트 노출

에서

사용할 기본 이미지 설정

정비사

Dockerfile의 작성자/소유자 데이터 설정

달리다

명령을 실행하고 종료 결과(컨테이너) 이미지를 커밋합니다.

사용자

이미지에서 컨테이너를 실행하도록 사용자 설정

용량

호스트에서 컨테이너로 디렉토리 마운트

WORKDIR

CMD 지시어가 실행될 디렉토리 설정

Dockerfile 만들기

nano 텍스트 편집기를 사용하여 현재 위치에 Dockerfile을 생성하려면 다음 명령을 실행합니다.

sudo nano Dockerfile

참고: 다음 줄을 차례로 추가하여 Dockerfile을 만듭니다.

기초 정의

FROM 이미지(예: Ubuntu) 및 MAINTAINER와 같은 기본 사항(기본)을 정의하여 Dockerfile을 시작하겠습니다.

다음을 추가합니다.

############################################################
# Dockerfile to build Python WSGI Application Containers
# Based on Ubuntu
############################################################

# Set the base image to Ubuntu
FROM ubuntu

# File Author / Maintainer
MAINTAINER Maintaner Name

설치를 위한 기본 애플리케이션 저장소 업데이트

다음을 실행하여 이전 섹션에서 수행한 것처럼 추가 애플리케이션으로 apt-get 리포지토리를 업데이트합니다.

다음을 추가합니다.

# Add the application resources URL
RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list

# Update the sources list
RUN apt-get update

기본 도구 설치

기본 애플리케이션 리포지토리 소스 목록을 업데이트한 후 필요한 기본 애플리케이션을 가져와 배포 프로세스를 시작할 수 있습니다.

다음을 추가합니다.

# Install basic applications
RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential

참고: 위의 도구 중 일부는 필요하지 않을 것 같지만 경우에 따라 제공됩니다.

Python 및 기본 Python 도구에 대한 기본 설치 지침

Python WSGI 애플리케이션을 배포하려면 이전에 작업했던 일부 도구(예: pip)가 필요할 가능성이 큽니다. 프레임워크(예: WAF) 및 선택한 웹 응용 프로그램 서버(WAS) 설정을 진행하기 전에 지금 설치하겠습니다.

다음을 추가합니다.

# Install Python and Basic Python Tools
RUN apt-get install -y python python-dev python-distribute python-pip

애플리케이션 배포

파이썬 웹 애플리케이션을 배포하기 위해 도커 이미지를 구축하고 있다는 점을 감안할 때 우리는 모두 도커의 ADD 명령을 활용하여 애플리케이션 리포지토리를 복사할 수 있습니다. 바람직하게는 REQUIREMENTS 파일을 사용하여 한 단계에서 빠르게 실행할 수 있습니다.

참고: 모든 것을 하나의 파일로 패키지하고 반복하지 않으려면 아래와 유사한 구조의 응용 프로그램 폴더를 사용하는 것이 좋습니다.

애플리케이션 폴더 구조 예:

/my_application
    |
    |- requirements.txt  # File containing list of dependencies
    |- /app              # Application module
    |- app.py            # WSGI file containing the "app" callable
    |- server.py         # Optional: To run the app servers (CherryPy)

참고: 이 구조 생성에 대해 보려면 롤백하고 웹 응용 프로그램 및 해당 종속성 설치 섹션을 참조하십시오.

다음을 추가합니다.

# Copy the application folder inside the container
ADD /my_application /my_application

참고: 온라인 호스트 git 리포지토리에서 배포하려는 경우 다음 명령을 사용하여 복제할 수 있습니다.

RUN git clone [application repository URL]

URL 자리 표시자를 실제 자리 표시자로 바꾸는 것을 잊지 마십시오.

모든 것을 부트스트래핑

애플리케이션 복사 지침을 추가한 후 requirements.txt에서 종속 항목을 가져오는 것과 같은 최종 구성으로 마무리하겠습니다.

# Get pip to download and install requirements:
RUN pip install -r /my_application/requirements.txt

# Expose ports
EXPOSE 80

# Set the default directory where CMD will execute
WORKDIR /my_application

# Set the default command to execute
# when creating a new container
# i.e. using CherryPy to serve the application
CMD python server.py

최종 Dockerfile

결국 Dockerfile은 다음과 같이 표시됩니다.

############################################################
# Dockerfile to build Python WSGI Application Containers
# Based on Ubuntu
############################################################

# Set the base image to Ubuntu
FROM ubuntu

# File Author / Maintainer
MAINTAINER Maintaner Name

# Add the application resources URL
RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list

# Update the sources list
RUN apt-get update

# Install basic applications
RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential

# Install Python and Basic Python Tools
RUN apt-get install -y python python-dev python-distribute python-pip

# Copy the application folder inside the container
ADD /my_application /my_application

# Get pip to download and install requirements:
RUN pip install -r /my_application/requirements.txt

# Expose ports
EXPOSE 80

# Set the default directory where CMD will execute
WORKDIR /my_application

# Set the default command to execute    
# when creating a new container
# i.e. using CherryPy to serve the application
CMD python server.py

CTRL+X를 누르고 Y로 확인하여 파일을 다시 저장하고 종료합니다.

Dockerfile을 사용하여 컨테이너 자동 빌드

"기본\ 섹션에서 처음 살펴본 것처럼 Dockerfiles의 사용법은 docker build 명령으로 호출하는 것으로 구성됩니다.

현재 디렉토리에서 애플리케이션 폴더(예: /my_application)를 복사하도록 docker에 지시하고 있으므로 빌드 프로세스를 시작하기 전에 이 Dockerfile과 함께 있는지 확인해야 합니다.

이 도커 이미지를 사용하면 단일 명령으로 Python WSGI 애플리케이션을 실행하는 컨테이너를 빠르게 만들 수 있습니다.

사용을 시작하려면 다음을 사용하여 새 컨테이너 이미지를 빌드합니다.

sudo docker build -t my_application_img . 

그리고 my_application_img 태그가 지정된 해당 이미지를 사용하여 애플리케이션을 실행하는 새 컨테이너를 실행할 수 있습니다.

sudo docker run -name my_application_instance -p 80:80 -i -t my_application_img

이제 드롭릿의 IP 주소를 방문할 수 있으며 애플리케이션은 도커 컨테이너를 통해 실행됩니다.

예:

# Usage: Visit http://[my droplet's ip]
http://95.85.10.236/

샘플 응답:

Hello World!

docker(다른 OS 포함) 설치에 대한 전체 지침은 docker.io에서 docker 설치 설명서를 확인하세요.

제출자: