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를 통해 이미지를 공유할 수 있습니다.