소개
Docker 는 소프트웨어 개발 분야에서 혁명을 일으켰습니다. 개발자들이 애플리케이션과 종속성을 포터블하고 자립적인 단위인 컨테이너에 패키징할 수 있도록 해줍니다. 이 튜토리얼에서는 Docker 컨테이너에서 Python 애플리케이션을 실행하는 과정을 안내합니다. Docker 이해부터 컨테이너화된 애플리케이션 배포까지 필수적인 단계를 다룹니다.
Docker 는 소프트웨어 개발 분야에서 혁명을 일으켰습니다. 개발자들이 애플리케이션과 종속성을 포터블하고 자립적인 단위인 컨테이너에 패키징할 수 있도록 해줍니다. 이 튜토리얼에서는 Docker 컨테이너에서 Python 애플리케이션을 실행하는 과정을 안내합니다. Docker 이해부터 컨테이너화된 애플리케이션 배포까지 필수적인 단계를 다룹니다.
Docker 는 개발자가 컨테이너 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 지원하는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량, 독립적, 실행 가능한 소프트웨어 패키지입니다. 코드, 런타임, 시스템 도구 및 라이브러리가 포함됩니다. Docker 는 이러한 컨테이너를 패키징하고 배포하는 방법을 제공하여 다양한 환경에서 애플리케이션을 더 쉽게 배포하고 관리할 수 있도록 합니다.
Docker 아키텍처는 Docker 클라이언트가 Docker 데몬과 통신하는 클라이언트 - 서버 모델을 기반으로 합니다. Docker 데몬은 Docker 컨테이너를 구축, 실행 및 관리하는 역할을 합니다. Docker 아키텍처의 주요 구성 요소는 다음과 같습니다.
Docker 를 시작하려면 시스템에 Docker 엔진을 설치해야 합니다. 공식 Docker 웹사이트 (https://www.docker.com/get-started) 에서 Docker 를 다운로드하여 설치할 수 있습니다. 설치 후 docker 명령줄 인터페이스 (CLI) 를 사용하여 Docker 데몬과 상호 작용하고 컨테이너를 관리할 수 있습니다.
다음은 Docker 를 사용하여 간단한 "Hello, World!" 컨테이너를 실행하는 예입니다.
$ docker run hello-world
이 명령은 Docker Hub 레지스트리에서 hello-world 이미지를 가져와 새 컨테이너를 생성하고 컨테이너 내에서 애플리케이션을 실행합니다.
Docker 를 사용하여 Python 애플리케이션을 컨테이너화하려면 Docker 이미지를 생성해야 합니다. Docker 이미지는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량, 독립적, 실행 가능한 패키지입니다. 코드, 런타임, 시스템 도구 및 라이브러리가 포함됩니다.
다음은 간단한 Python 애플리케이션을 위한 Docker 이미지를 생성하는 방법의 예입니다.
프로젝트를 위한 새 디렉터리를 만들고 터미널에서 해당 디렉터리로 이동합니다.
app.py라는 새 파일을 만들고 다음 Python 코드를 추가합니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile이라는 새 파일을 만들고 다음 내용을 추가합니다.
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "app.py"]
이 Dockerfile 은 Python 애플리케이션을 위한 Docker 이미지를 구축하는 단계를 정의합니다. python:3.9-slim 기본 이미지로 시작하여 작업 디렉터리를 /app으로 설정하고, 애플리케이션 파일을 컨테이너로 복사하고, 필요한 종속성을 설치하며, app.py 스크립트를 실행합니다.
requirements.txt라는 새 파일을 만들고 다음 종속성을 추가합니다.
flask
다음 명령을 사용하여 Docker 이미지를 구축합니다.
$ docker build -t my-python-app .
이 명령은 태그 my-python-app으로 Docker 이미지를 구축합니다.
Docker 이미지를 생성한 후 다음 명령을 사용하여 Docker 컨테이너에서 Python 애플리케이션을 실행할 수 있습니다.
$ docker run -p 5000:5000 my-python-app
이 명령은 my-python-app 컨테이너를 실행하고 컨테이너의 포트 5000 을 호스트의 포트 5000 으로 매핑합니다.
이제 웹 브라우저를 열고 http://localhost:5000으로 이동하여 Python 애플리케이션에 액세스할 수 있습니다. "Hello, LabEx!" 메시지가 표시되어야 합니다.
Docker 컨테이너를 배포하려면 Docker Hub 또는 프라이빗 레지스트리와 같은 레지스트리에 Docker 이미지를 먼저 업로드해야 합니다. 이렇게 하면 다른 환경에 애플리케이션을 공유하고 배포할 수 있습니다.
다음은 my-python-app 이미지를 Docker Hub 에 업로드하는 방법입니다.
https://hub.docker.com에서 Docker Hub 계정을 만듭니다 (아직 만든 경우).
docker login 명령을 사용하여 Docker Hub 에 로그인합니다.
$ docker login
프롬프트에 Docker Hub 사용자 이름과 비밀번호를 입력합니다.
로컬 my-python-app 이미지에 Docker Hub 사용자 이름과 태그 (예: latest) 를 지정합니다.
$ docker tag my-python-app username/my-python-app:latest
태그가 지정된 이미지를 Docker Hub 에 업로드합니다.
$ docker push username/my-python-app:latest
이제 Docker 이미지가 Docker Hub 레지스트리에 사용 가능해져 다른 시스템에서 가져와 배포할 수 있습니다.
프로덕션 환경에서 Docker 컨테이너를 배포하려면 Kubernetes 또는 Docker Swarm 과 같은 컨테이너 오케스트레이션 플랫폼을 사용할 수 있습니다. 이러한 플랫폼은 애플리케이션의 확장, 로드 밸런싱 및 컨테이너 수명주기 관리 기능을 제공합니다.
다음은 Docker Swarm 을 사용하여 my-python-app 컨테이너를 배포하는 방법의 예입니다.
Docker Swarm 클러스터를 초기화합니다.
$ docker swarm init
my-python-app 컨테이너를 위한 새 서비스를 만듭니다.
$ docker service create --name my-python-app -p 5000:5000 username/my-python-app:latest
이 명령은 my-python-app이라는 이름의 새 서비스를 만들고 username/my-python-app:latest 이미지를 실행하며, 컨테이너의 포트 5000 을 호스트의 포트 5000 으로 매핑합니다.
여러 복제본으로 서비스를 확장합니다.
$ docker service scale my-python-app=3
이 명령은 my-python-app 서비스를 3 개의 복제본으로 확장하여 애플리케이션의 고가용성과 로드 밸런싱을 제공합니다.
서비스 상태를 모니터링합니다.
$ docker service ls
$ docker service logs my-python-app
이러한 명령은 my-python-app 서비스의 상태를 확인하고 로그를 검사할 수 있도록 합니다.
Docker Swarm 과 같은 컨테이너 오케스트레이션 플랫폼을 사용하면 프로덕션 환경에서 Docker 컨테이너를 쉽게 관리, 확장 및 배포할 수 있습니다.
이 튜토리얼을 마치면 Docker 에 대한 확실한 이해와 Python 애플리케이션을 컨테이너화하는 능력을 갖추게 됩니다. Docker 이미지를 구축하고 컨테이너를 실행하며 일관성 있고 안정적이며 확장 가능한 방식으로 애플리케이션을 배포하는 방법을 배우게 됩니다. Python 개발에 Docker 를 마스터하면 작업 흐름을 간소화하고 애플리케이션의 이식성과 관리를 용이하게 할 수 있습니다.