본문 바로가기
Docker

Docker 실제 프로젝트 예제/ 파이썬 간단 게임프로그램 컨테이너화

by Maccrey Coding 2024. 9. 14.
반응형

 

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 컨테이너 최적화 및 관리 팁

  1. 이미지 크기 최적화: 불필요한 패키지를 제거하거나, 멀티스테이지 빌드(Multi-stage Build)를 사용해 이미지를 더 작게 최적화할 수 있습니다.

  2. 볼륨 및 네트워크 설정: X11과 같은 그래픽 출력이 필요한 경우, 로컬 X 서버와의 연결을 위한 볼륨 및 환경 변수를 올바르게 설정해야 합니다.

  3. 환경 변수 및 설정 파일 분리: 여러 실행 환경에서 동일한 컨테이너를 사용할 수 있도록 환경 변수를 .env 파일로 분리해 관리할 수 있습니다.

 

이번 블로그에서는 파이썬 Pygame 프로그램을 Docker로 컨테이너화하는 방법을 살펴보았습니다.

간단한 게임 프로그램도 Docker를 사용해 쉽게 배포 가능하며, 이를 통해 개발 환경과 배포 환경에서 일관성을 유지할 수 있습니다.

Pygame 외에도 다양한 파이썬 애플리케이션을 Docker로 패키징하여 더욱 유연한 개발 및 배포 워크플로를 구축할 수 있습니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형