본문 바로가기
개발정리 (docker)

[docker] 내 애플리케이션을 Docker 이미지로 만들기

by 할리갈리0 2025. 9. 22.

Docker의 가장 큰 매력은 내가 만든 프로그램을 “이미지”라는 형태로 묶어 두고,

어느 컴퓨터에서든 똑같이 실행할 수 있다는 점입니다.
단순히 명령어 몇 개를 아는 것보다, 전체 과정을 경험해 보는 것이 중요합니다.
이번 글에서는 Dockerfile 작성 → 이미지 빌드 → 실행 → 포트 연결까지의 전 과정을 실제 예시와 함께 정리합니다.

 

 

1. 애플리케이션 준비하기

먼저 컨테이너로 감쌀 애플리케이션이 필요합니다.

여기서는 Python Flask로 만든 간단한 웹 서버를 예시로 사용합니다.

 

[app.py]

from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
    return "Hello, Docker World!"

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

 

[requirements.txt]

flask==3.0.0

이 애플리케이션은 / 경로로 접속하면 간단한 문자열을 반환하는 웹 서버입니다.

 

2. Dockerfile 작성하기

이제 Flask 애플리케이션을 실행할 환경을 코드로 기록합니다.

Dockerfile에는 운영체제, 패키지 설치, 코드 복사, 실행 방법을 순서대로 적습니다.

FROM은 시작 환경, WORKDIR은 작업 폴더, COPY는 파일 복사, RUN은 패키지 설치, CMD는 실행 명령을 의미합니다.

# Python 3.11 slim 이미지를 기반으로 시작
FROM python:3.11-slim

# 컨테이너 내부 작업 디렉토리 설정
WORKDIR /app

# 의존성 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 소스코드 복사
COPY . .

# 외부에서 접근할 포트 정의
EXPOSE 5000

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

 

 

3. 이미지 빌드하기

Dockerfile을 작성했다면, 해당 디렉토리에서 다음 명령어로 이미지를 빌드합니다.

docker build -t flask-demo .
  • -t flask-demo는 이미지 이름을 지정하는 옵션입니다.
  • 마지막 .은 현재 디렉토리에 있는 Dockerfile을 기준으로 빌드하라는 의미입니다.

빌드가 완료되면 docker images 명령으로 생성된 이미지를 확인할 수 있습니다.

 

4. 컨테이너 실행하기

이미지를 실행하려면 docker run 명령어를 사용합니다.

docker run -d -p 5000:5000 flask-demo
  • -d : 백그라운드 실행(detached mode)
  • -p 5000:5000 : 로컬 컴퓨터 5000번 포트를 컨테이너의 5000번 포트와 연결
  • flask-demo : 실행할 이미지 이름

이제 브라우저에서 http://localhost:5000 에 접속하면 “Hello, Docker World!”라는 문구가 출력됩니다.

 

5. 포트 연결과 네트워크 이해하기

많은 초보자가 헷갈리는 부분이 포트 연결입니다.

컨테이너 내부에서 Flask는 5000번 포트에서 동작하지만, 이를 외부와 연결하지 않으면 접근할 수 없습니다.

docker run -p 8080:5000 flask-demo

이렇게 실행하면 내 PC의 8080번 포트 → 컨테이너의 5000번 포트로 요청이 전달됩니다.

따라서 브라우저에서 http://localhost:8080으로 접속해도 정상적으로 응답을 받을 수 있습니다.

 

6. 실무에서 자주 쓰는 패턴

  • .dockerignore 활용: 불필요한 파일(.git, __pycache__, node_modules)은 이미지에 포함되지 않도록 .dockerignore에 기록합니다.
  • 멀티 스테이지 빌드: Go 같은 언어는 빌드 단계와 실행 단계를 분리하면 이미지 크기를 줄일 수 있습니다.
  • 환경 변수 관리: ENV 명령어를 활용하면 실행 환경에 따라 다른 설정을 쉽게 적용할 수 있습니다.

 

 

Docker 이미지를 만드는 과정은 단순히 명령어 몇 개로 끝나는 것이 아니라,

내 애플리케이션을 어떻게 패키징할 것인가에 대한 고민이 담겨 있습니다.

  • Dockerfile로 환경을 코드로 기록하고
  • docker build로 이미지를 만들고
  • docker run으로 실행하며
  • 포트 연결을 통해 외부와 통신하도록 구성

이 전체 흐름을 한 번 익혀 두면, 어떤 언어의 애플리케이션이든 손쉽게 컨테이너로 배포할 수 있습니다.

반응형