Docker는 웹 애플리케이션뿐만 아니라 다양한 종류의 파이썬 프로그램, 심지어 간단한 게임 프로그램도 컨테이너화하여 쉽게 배포하고 실행할 수 있습니다.
이번 블로그에서는 파이게임(Pygame)을 이용한 간단한 파이썬 게임 프로그램을 Docker로 컨테이너화하는 방법을 다루겠습니다.
초보자도 쉽게 따라할 수 있도록 모든 단계를 자세히 설명할 것입니다.
1. 프로젝트 개요
이번 예제에서는 간단한 Pygame 기반 게임을 컨테이너화할 것입니다.
이 게임은 간단하게 움직이는 캐릭터를 화면에 표시하는 기능만 갖춘 프로그램입니다.
Docker를 통해 Pygame 게임을 실행하는 환경을 구축하고, 이 환경을 어떤 시스템에서도 동일하게 실행할 수 있도록 만드는 것이 목표입니다.
1.1 프로젝트 디렉토리 구조
프로젝트의 디렉토리 구조는 다음과 같습니다.
docker-python-game/
│
├── app/
│ ├── Dockerfile
│ ├── requirements.txt
│ └── game.py
├── docker-compose.yml
└── README.md
2. 파이썬 게임 프로그램 작성
2.1 Pygame 게임 코드 작성
우선 간단한 Pygame 게임 코드를 작성합니다. 이 게임에서는 사용자가 키보드로 제어하는 캐릭터가 화면 위에서 움직이는 간단한 동작을 구현합니다.
app/game.py
import pygame
import sys
# Pygame 초기화
pygame.init()
# 화면 크기 설정
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("간단한 Pygame 게임")
# 색상 및 캐릭터 초기 설정
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
x, y = 320, 240
speed = 5
# 게임 루프
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 키보드 입력 처리
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if keys[pygame.K_UP]:
y -= speed
if keys[pygame.K_DOWN]:
y += speed
# 화면을 흰색으로 채우고 캐릭터 그리기
screen.fill(WHITE)
pygame.draw.rect(screen, BLUE, (x, y, 40, 40))
# 화면 업데이트
pygame.display.flip()
# 게임 속도 조절
pygame.time.Clock().tick(60)
이 코드는 Pygame을 사용해 화면에 파란색 사각형을 표시하고, 사용자가 화살표 키로 이 사각형을 움직일 수 있도록 하는 간단한 게임입니다.
2.2 Pygame 의존성 설정
게임 프로그램의 실행을 위해 필요한 의존성을 명시한 requirements.txt 파일을 작성합니다.
app/requirements.txt
pygame==2.0.1
3. 파이썬 게임 프로그램 컨테이너화
3.1 Dockerfile 작성
이제 Pygame 게임을 Docker 컨테이너로 빌드하기 위한 Dockerfile을 작성합니다.
app/Dockerfile
# Python 3.9 이미지 사용
FROM python:3.9-slim
# 필수 패키지 설치 (SDL, X11 등)
RUN apt-get update && apt-get install -y \
python3-pip python3-dev build-essential \
libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev \
libsm6 libxext6 libxrender-dev libx11-xcb-dev libxcb1-dev
# 작업 디렉토리 설정
WORKDIR /app
# 의존성 파일 복사 및 설치
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 애플리케이션 파일 복사
COPY . .
# Pygame 실행을 위한 환경 변수 설정
ENV DISPLAY=:0
# 게임 실행
CMD ["python", "game.py"]
이 Dockerfile은 Python 3.9-slim을 기반으로 하여, Pygame을 실행하기 위한 필요한 라이브러리와 의존성들을 설치한 후 게임을 실행할 수 있도록 설정합니다.
주요 구성 요소
- apt-get install: 파이게임을 실행하기 위해 필요한 SDL 및 X11 관련 라이브러리를 설치합니다.
- pip install: 파이썬 패키지 관리자인 pip을 통해 requirements.txt에 명시된 Pygame을 설치합니다.
- ENV DISPLAY=:0: X11 서버가 그래픽 디스플레이를 제공하는 환경 변수를 설정합니다.
4. Docker Compose로 컨테이너 관리
이제 게임 프로그램을 Docker Compose로 실행할 수 있도록 설정 파일을 작성합니다.
4.1 Docker Compose 파일 작성
docker-compose.yml
version: '3'
services:
game:
build: ./app
environment:
- DISPLAY=${DISPLAY}
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
stdin_open: true
tty: true
이 docker-compose.yml 파일은 단일 game 서비스를 정의하며, 다음과 같은 설정을 포함합니다:
- environment: DISPLAY 환경 변수를 설정하여 Docker 컨테이너에서 X11을 통해 그래픽을 출력할 수 있도록 합니다.
- volumes: 로컬 머신의 X11 소켓 파일을 컨테이너로 마운트하여 그래픽 출력을 허용합니다.
- stdin_open, tty: 터미널을 통해 상호작용할 수 있도록 설정합니다.
4.2 Docker Compose로 컨테이너 실행
이제 docker-compose 명령어를 사용해 게임 프로그램을 실행합니다.
xhost +local:docker # Docker에서 X11 액세스를 허용
docker-compose up --build
이 명령어는 컨테이너를 빌드하고, 로컬 X11 서버를 사용하여 그래픽을 출력할 수 있도록 설정합니다.
xhost +local명령어는 Docker 컨테이너가 호스트 머신의 X11 서버에 접근할 수 있도록 허용하는 명령어입니다.
5. 결과 확인
Docker가 성공적으로 실행되면, 게임 프로그램이 GUI 화면으로 실행되며 사용자가 화살표 키를 이용해 파란색 사각형을 움직일 수 있습니다.
결과 화면
- Pygame 화면이 열리고, 흰색 배경에 파란색 사각형이 나타납니다.
- 화살표 키를 누르면 사각형이 화면 안에서 움직입니다.
이와 같이, Pygame 게임도 Docker로 컨테이너화하여 실행할 수 있으며, 이를 통해 개발 환경과 배포 환경에서 동일하게 실행할 수 있습니다.
6. Docker 컨테이너 최적화 및 관리 팁
- 이미지 크기 최적화: 불필요한 패키지를 제거하거나, 멀티스테이지 빌드(Multi-stage Build)를 사용해 이미지를 더 작게 최적화할 수 있습니다.
- 볼륨 및 네트워크 설정: X11과 같은 그래픽 출력이 필요한 경우, 로컬 X 서버와의 연결을 위한 볼륨 및 환경 변수를 올바르게 설정해야 합니다.
- 환경 변수 및 설정 파일 분리: 여러 실행 환경에서 동일한 컨테이너를 사용할 수 있도록 환경 변수를 .env 파일로 분리해 관리할 수 있습니다.
이번 블로그에서는 파이썬 Pygame 프로그램을 Docker로 컨테이너화하는 방법을 살펴보았습니다.
간단한 게임 프로그램도 Docker를 사용해 쉽게 배포 가능하며, 이를 통해 개발 환경과 배포 환경에서 일관성을 유지할 수 있습니다.
Pygame 외에도 다양한 파이썬 애플리케이션을 Docker로 패키징하여 더욱 유연한 개발 및 배포 워크플로를 구축할 수 있습니다.
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Docker' 카테고리의 다른 글
Docker 결론 및 추가 학습 자료 / 정리 및 결론: Docker의 장점과 향후 활용 가능성 (1) | 2024.09.14 |
---|---|
Docker 실전 예제 및 사례 연구 / 사례 연구: 성공적인 Docker 사용 사례 (7) | 2024.09.14 |
Docker 실전 예제 및 사례 연구 / 실제 프로젝트 예제: 웹 애플리케이션, 데이터베이스 컨테이너화 (1) | 2024.09.14 |
Docker 보안 및 최적화 / 성능 최적화: 리소스 관리, 이미지 최적화 (0) | 2024.09.14 |
Docker 보안 및 최적화: 컨테이너 보안 검사 및 취약점 관리 (0) | 2024.09.14 |