블로그로 돌아가기

Docker를 사용하여 Python 앱 컨테이너화하기

Docker를 사용하여 Python 앱 컨테이너화하기

Docker는 경량의 OS 수준 가상화에서 애플리케이션을 개발, 배포 및 관리하기 위한 무료 오픈 소스 솔루션입니다. 이 가이드에서는 Python 애플리케이션을 Docker 컨테이너 내에 생성하는 방법을 보여줍니다.

전제 조건

이 가이드에 소개된 단계를 수행하려면 다음 구성 요소가 필요합니다.

Docker 컨테이너

동일한 환경 내에서 여러 프로그램을 실행할 때, 문제가 발생할 수 있으며 실제로 발생합니다. 프로그램을 더 많이 추가할수록 환경은 더 불안정해집니다. 일반적인 사용자에게는 큰 문제가 아닐 수 있습니다. 하지만 미션 크리티컬한 애플리케이션의 경우 심각한 결과를 초래할 수 있습니다.

시스템에 더 많은 애플리케이션이 도입될수록 공격 표면이 커집니다. 단 하나의 애플리케이션만 침해당해도 전체 시스템이 쉽게 무너질 수 있습니다.

이러한 문제를 해결하기 위해 소프트웨어 수준의 샌드박싱을 위한 Docker 컨테이너를 사용할 수 있습니다.

  • 컨테이너 내의 애플리케이션은 파일에 대한 액세스가 제한됩니다.

  • 컨테이너화된 애플리케이션은 시스템에서 실행 중인 다른 프로세스를 볼 수 없습니다.

  • 컨테이너에 특정 양의 하드웨어 리소스를 할당할 수 있습니다.

  • 컨테이너의 네트워크 포트는 외부에 노출되지 않습니다.

  • 로컬 및 프로덕션 환경 전반에서 거의 모든 것을 일관되게 패키징할 수 있습니다.

이를 실습하기 위해 Docker 컨테이너 내에 간단한 Python 서버를 구축하고, 컨테이너를 이미지로 변환한 다음, 가상의 프로덕션 환경에 해당 이미지를 배포해 보겠습니다.

1단계 – 파일 시스템 구성

프로젝트를 호스팅하기 위해 먼저 전용 디렉터리를 생성합니다.

디렉터리 내에 하위 디렉터리 src 를 생성하여 코드를 저장합니다:

2단계 – Python 서버 구축

이 단계에서는 Python으로 간단한 HTTP 서버를 생성합니다. 다음 파일을 생성합니다. server.py:

텍스트 편집기에서 파일을 엽니다:

다음 Python 코드를 입력합니다:

여기서,

  • 우리는 프로그램을 단순하게 유지하기 위해 HTTPServer 클래스를 사용하고 표준 Python 라이브러리에서 핸들러를 요청합니다.

  • run 함수는 다음의 인스턴스를 시작합니다: HTTPserver.

  • 의 인수 server_address가 나타내듯이, 서버는 8080 포트에서 들어오는 모든 연결을 수신 대기합니다.

이제 서버가 예상대로 작동하는지 확인하겠습니다. 서버를 실행합니다:

새 터미널에서 curl 을 사용하여 서버에 요청을 보낼 수 있습니다:

또는 웹 브라우저에서 다음 링크에 접속할 수도 있습니다:

3단계 – Dockerfile 생성

A Dockerfile  은 Docker 이미지를 생성하는 데 필요한 지침을 포함하고 있습니다. 파일의 지침은 순차적으로 실행됩니다. 다음에 대해 자세히 알아보세요: Dockerfile.

우리 프로젝트를 위한 새로운 Dockerfile 을 생성합니다:

이제 필요한 코드를 입력하겠습니다. 텍스트 편집기에서 파일을 엽니다:

다음 코드를 입력합니다:

여기서,

  • 모든 Dockerfile 은(는) 반드시 FROM 지시어로 시작해야 합니다. 이 예제에서는 Python을 Docker 이미지의 베이스로 선언하고 있습니다.

  • The ENV SRC_DIR 지시어는 컨테이너 디렉터리의 위치를 지정합니다.

  • The COPY 지시어는 현재 Python 서버가 있는 src 디렉터리에서 파일을 복사합니다.

  • 변수 PYTHONBUFFERED=1 은(는) Python이 출력과 로그를 STDOUT에 직접 출력하도록 지정합니다. 그렇지 않으면 로그가 버퍼로 전송되지 않습니다.

  • The CMD 지시어는 컨테이너를 실행할 때 실행할 기본 명령을 지정합니다. 이 경우, 이 지시어를 사용하여 Python 서버를 시작합니다.

4단계 – Docker 이미지 생성

With the Dockerfile이(가) 준비되었으므로 이제 이미지를 빌드할 수 있습니다. 다음 Docker 명령을 실행하여 프로세스를 시작합니다:

여기서,

  • The -t 플래그는 Docker 이미지의 태그를 python_server.

  • 로 지정하는 데 사용됩니다. Docker는 필요한 모든 구성 요소를 다운로드하고 이를 하나의 이미지로 결합합니다.

5단계 – 이미지 실행

이미지가 배포할 준비가 되었습니다. 다음 명령을 사용하여 실행할 수 있습니다:

여기서는 -p 플래그를 사용하여 로컬 머신의 8080 포트를 Docker 이미지로 포워딩하고 있습니다.

서버가 정상적으로 작동하는지 다음을 사용하여 쉽게 확인할 수 있습니다: curl:

6단계 – 서버 종료

터미널에서 “Ctrl + C”를 눌러 Docker 프로세스를 종료합니다:

7단계 – Docker 이미지 내보내기 및 가져오기

이제 Python 서버를 호스팅하는 작동 가능한 Docker 이미지가 준비되었습니다. Docker의 내보내기 및 가져오기 기능을 사용하여 이를 다른 시스템으로 마이그레이션할 수 있습니다.

먼저, 현재 시스템의 Docker 이미지 목록을 확인합니다:

대상은 방금 생성한 python_server Docker 이미지입니다. 다음 명령은 이를 TAR 아카이브로 내보냅니다:

After transferring the python_server.tar 파일을 대상 머신으로 전송한 후, 다음 명령을 사용하여 Docker 이미지를 가져옵니다:

마치며

이 가이드에서는 Python 애플리케이션으로 Docker 이미지를 빌드하는 방법을 살펴보았습니다. 간단한 Python 웹 서버를 만들고 이를 기반으로 Docker 이미지를 빌드했습니다. 이제 이 Docker 이미지를 어떤 환경에나 배포하여 일관된 동작을 기대할 수 있습니다.

Docker에 대해 더 자세히 알고 싶으신가요? 다음 가이드를 확인해 보세요:

즐거운 컴퓨팅 되세요!

author

Preslav Dobrev

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.