Docker는 경량 OS 수준 가상화에서 앱을 개발, 배포 및 관리하기 위한 무료 오픈 소스 솔루션입니다. 이 가이드에서는 Docker 컨테이너 내에서 Python 앱을 생성하는 방법을 보여줍니다.
필수 조건
이 가이드에서 설명하는 단계를 수행하려면 다음 구성 요소가 필요합니다:
-
Linux 시스템. CloudSigma에서 자체 Ubuntu VPS를 구성하는 방법을 확인해 보세요.
-
최신 버전의 Docker가 설치 및 구성되어 있어야 합니다. Ubuntu에 Docker를 설치하는 방법에 대해 자세히 알아보세요.
Docker 컨테이너
동일한 환경에서 여러 프로그램을 실행하면 문제가 발생할 수 있으며, 실제로 발생합니다. 프로그램을 더 많이 추가할수록 환경은 더 불안정해집니다. 일반 사용자에게는 큰 문제가 아닐 수 있습니다. 하지만 미션 크리티컬 애플리케이션의 경우 심각한 결과를 초래할 수 있습니다.
시스템에 더 많은 앱이 도입될수록 공격 표면도 커집니다. 단 하나의 앱이 침해되어도 전체 시스템의 붕괴로 쉽게 이어질 수 있습니다.
이러한 문제를 해결하기 위해 소프트웨어 수준 샌드박싱에 Docker 컨테이너를 사용할 수 있습니다:
-
컨테이너 내부의 앱은 파일에 대한 제한된 접근 권한만 갖습니다.
-
컨테이너화된 앱은 시스템에서 실행 중인 다른 프로세스를 볼 수 없습니다.
-
컨테이너에는 특정 양의 하드웨어 리소스를 할당할 수 있습니다.
-
컨테이너의 네트워크 포트는 외부에 노출되지 않습니다.
-
로컬/프로덕션 환경 전반에서 거의 모든 것을 일관되게 패키징할 수 있습니다.
시연을 위해 Docker 컨테이너 내에 간단한 Python 서버를 빌드하고, 컨테이너를 이미지로 변환한 다음, 더미 프로덕션 환경에 이미지를 배포해 보겠습니다.
1단계 – 파일 시스템 구성
프로젝트를 호스팅하기 위해 먼저 전용 디렉터리를 생성합니다:
1 | mkdir -pv python-server-container/ |
1 | cd !$ |
디렉터리 안에 코드를 저장할 하위 디렉터리 src 를 생성합니다:

2단계 – Python 서버 빌드
이 단계에서는 Python으로 간단한 HTTP 서버를 생성합니다. server.py 파일을 생성합니다:
텍스트 편집기에서 엽니다:

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

여기서,
-
프로그램을 단순하게 유지하기 위해 표준 Python 라이브러리의 HTTPServer 클래스와 핸들러를 사용합니다.
-
run 함수는 HTTPserver의 인스턴스를 시작합니다.
-
server_address 인수가 나타내듯이, 서버는 포트 8080에서 들어오는 모든 연결을 수신합니다.
이제 서버가 예상대로 작동하는지 확인합니다. 서버를 실행합니다:
![]()
새 터미널에서 curl을 사용하여 서버에 요청을 보낼 수 있습니다:

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

3단계 – Dockerfile 생성
Dockerfile에는 Docker 이미지를 생성하는 데 필요한 지침이 포함됩니다. 파일의 지침은 순차적으로 실행됩니다. Dockerfile에 대해 자세히 알아보세요.
프로젝트를 위한 새 Dockerfile을 생성합니다:
이제 필요한 코드를 추가합니다. 텍스트 편집기에서 엽니다:
다음 코드를 입력합니다:
여기서,
-
모든 Dockerfile은 FROM 지시문으로 시작해야 합니다. 여기서는 Python을 Docker 이미지의 기반으로 선언합니다.
-
ENV SRC_DIR 지시문은 컨테이너 디렉터리의 위치를 지정합니다.
-
COPY 지시문은 현재 Python 서버를 호스팅하는 src 디렉터리에서 파일을 복사합니다.
-
변수 PYTHONBUFFERED=1은 Python이 출력과 로그를 STDOUT으로 직접 출력하고 기록하도록 지정합니다. 그렇지 않으면 로그가 버퍼로 전송되지 않습니다.
-
CMD 지시문은 컨테이너를 실행할 때 실행할 기본 명령을 지정합니다. 여기서는 이 지시문을 사용해 Python 서버를 시작합니다.
4단계 – Docker 이미지 생성
Dockerfile이 준비되었으므로 이제 이미지를 만들 수 있습니다. 다음 Docker 명령을 실행하여 프로세스를 시작합니다:

여기서,
-
-t 플래그는 Docker 이미지에 python_server라는 태그를 지정하는 데 사용됩니다.
-
Docker는 필요한 모든 구성 요소를 다운로드하고 이를 하나의 이미지로 결합합니다.
5단계 – 이미지 실행
이미지는 배포할 준비가 되었습니다. 다음 명령을 사용해 실행할 수 있습니다:

여기서는 -p 플래그를 사용하여 로컬 머신의 포트 8080을 Docker 이미지로 전달합니다.
curl을 사용해 서버가 실행 중인지 쉽게 검증할 수 있습니다:

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

7단계 – Docker 이미지 내보내기 및 가져오기
이제 Python 서버를 호스팅하는 작동 가능한 Docker 이미지가 있습니다. Docker의 내보내기 및 가져오기 기능을 활용하면 이를 다른 시스템으로 마이그레이션할 수 있습니다.
먼저 현재 시스템의 Docker 이미지 목록을 확인합니다:

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

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

마무리 생각
이 가이드에서는 Python 애플리케이션으로부터 Docker 이미지를 빌드하는 방법을 보여주었습니다. 간단한 Python 웹 서버를 생성하고 이를 기반으로 Docker 이미지를 빌드했습니다. 이제 Docker 이미지는 어떤 환경에도 배포할 수 있으며 일관된 동작을 기대할 수 있습니다.
Docker에 대해 더 자세히 알아보고 싶으신가요? 다음 가이드를 확인해 보세요:
즐거운 컴퓨팅 되세요!

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