Python Containerizing Applications with Docker


Docker를 이용한 애플리케이션 컨테이너화 (Containerizing Applications with Docker)

Docker 개요 (Overview of Docker)

Docker는 애플리케이션을 표준화된 유닛으로 패키징, 배포, 실행할 수 있는 플랫폼입니다. 이를 통해 개발 환경과 운영 환경의 차이를 줄이고, 일관된 환경에서 애플리케이션을 실행할 수 있습니다. Docker는 컨테이너 기술을 활용하여 애플리케이션과 그 의존성을 격리된 환경에서 실행합니다.

Docker 설치 (Installing Docker)

Docker는 Windows, macOS, Linux에서 사용할 수 있습니다. Docker 공식 웹사이트에서 운영 체제에 맞는 설치 파일을 다운로드하고 설치할 수 있습니다.

예제: Ubuntu에서 Docker 설치

sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

Dockerfile 작성 (Writing a Dockerfile)

Dockerfile은 Docker 이미지를 생성하기 위한 설정 파일입니다. 애플리케이션의 환경을 정의하고, 필요한 의존성을 설치하며, 실행 명령을 포함합니다.

예제: 간단한 Python 애플리케이션을 위한 Dockerfile

# 베이스 이미지 설정
FROM python:3.9

# 작업 디렉토리 설정
WORKDIR /app

# 종속성 파일 복사 및 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 애플리케이션 소스 코드 복사
COPY . .

# 애플리케이션 실행
CMD ["python", "app.py"]

Docker 이미지 빌드 (Building a Docker Image)

Dockerfile을 작성한 후, Docker 이미지를 빌드할 수 있습니다. docker build 명령어를 사용하여 이미지 빌드가 가능합니다.

예제: Docker 이미지 빌드

docker build -t my-python-app .

위 명령어는 현재 디렉토리에 있는 Dockerfile을 사용하여 my-python-app이라는 이름의 이미지를 빌드합니다.

Docker 컨테이너 실행 (Running a Docker Container)

빌드한 이미지를 사용하여 Docker 컨테이너를 실행할 수 있습니다. docker run 명령어를 사용하여 컨테이너를 실행합니다.

예제: Docker 컨테이너 실행

docker run -d -p 5000:5000 my-python-app

위 명령어는 my-python-app 이미지를 사용하여 컨테이너를 백그라운드에서 실행하고, 호스트의 포트 5000을 컨테이너의 포트 5000에 매핑합니다.

Docker Compose를 이용한 다중 컨테이너 설정 (Using Docker Compose for Multi-Container Setup)

Docker Compose를 사용하면 다중 컨테이너 애플리케이션을 정의하고 실행할 수 있습니다. docker-compose.yml 파일을 작성하여 여러 컨테이너를 구성할 수 있습니다.

예제: Docker Compose 파일

version: '3'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis

  redis:
    image: "redis:alpine"

위의 docker-compose.yml 파일은 웹 애플리케이션 컨테이너와 Redis 컨테이너를 설정합니다. web 서비스는 현재 디렉토리의 Dockerfile을 사용하여 빌드하고, Redis 컨테이너에 의존합니다.

예제: Docker Compose 실행

docker-compose up

위 명령어는 docker-compose.yml 파일을 기반으로 모든 서비스를 빌드하고 시작합니다.

Docker Hub에 이미지 푸시 (Pushing Images to Docker Hub)

Docker 이미지를 Docker Hub에 푸시하여 공유할 수 있습니다. Docker Hub에 로그인하고, 이미지를 태그한 후 푸시합니다.

예제: Docker 이미지 푸시

docker login
docker tag my-python-app username/my-python-app
docker push username/my-python-app

위 명령어는 my-python-app 이미지를 username/my-python-app으로 태그하고 Docker Hub에 푸시합니다.

예제 애플리케이션: Flask 웹 애플리케이션 (Example Application: Flask Web Application)

다음은 Docker를 사용하여 Flask 웹 애플리케이션을 컨테이너화하는 예제입니다.

디렉토리 구조

/my-flask-app
    ├── app.py
    ├── requirements.txt
    └── Dockerfile

app.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

requirements.txt

아래의 파일은 makefile 형식이다.

Flask==2.0.1

Dockerfile

FROM python:3.9

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]

위의 파일들을 작성한 후, 다음 명령어를 사용하여 이미지를 빌드하고 컨테이너를 실행합니다.

이미지 빌드 및 컨테이너 실행

docker build -t my-flask-app .
docker run -d -p 5000:5000 my-flask-app

이제 웹 브라우저에서 http://localhost:5000에 접속하면 “Hello, Docker!” 메시지를 확인할 수 있습니다.

이와 같이, Docker를 사용하여 애플리케이션을 컨테이너화하면 일관된 개발 환경을 유지하고, 애플리케이션의 배포와 관리를 쉽게 할 수 있습니다. Dockerfile과 Docker Compose를 활용하여 다양한 애플리케이션을 컨테이너화하고, Docker Hub를 통해 이미지를 공유할 수 있습니다.


Leave a Reply

Your email address will not be published. Required fields are marked *