Docker 입문 가이드: 애플리케이션 컨테이너화 빠르게 시작하기

2/18/2026
7 min read

Docker 입문 가이드: 애플리케이션 컨테이너화 빠르게 시작하기

Docker는 현대 소프트웨어 개발 및 배포에서 없어서는 안 될 부분이 되었습니다. Kubernetes에 대한 논의가 쏟아지고 있지만 Docker는 여전히 많은 회사에서 애플리케이션을 구축, 테스트 및 배포하는 데 선호하는 도구입니다. 이 기사에서는 Docker를 빠르게 시작하고 핵심 개념을 이해하며 애플리케이션 컨테이너화를 시작하는 데 도움이 되는 실용적인 예를 제공합니다.

Docker 핵심 개념

실습을 시작하기 전에 Docker의 몇 가지 핵심 개념을 이해하는 것이 중요합니다.

  • 이미지 (Image): 이미지는 읽기 전용 템플릿으로, 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임 환경, 시스템 도구, 라이브러리 및 종속성)을 포함합니다. 가상 머신 이미지와 유사하지만 훨씬 가볍습니다.

  • 컨테이너 (Container): 컨테이너는 이미지에서 생성된 실행 인스턴스입니다. 이미지의 런타임 인스턴스이며 애플리케이션과 모든 종속성을 포함합니다. 컨테이너는 서로 격리되어 자체 파일 시스템, 프로세스 및 네트워크 공간을 갖습니다.

  • Docker Hub: Docker Hub는 공개 이미지 저장소로, 미리 빌드된 이미지를 다운로드하거나 자신의 이미지를 업로드할 수 있습니다. GitHub와 유사하지만 Docker 이미지 전용입니다.

  • Dockerfile: Dockerfile은 Docker 이미지를 빌드하기 위한 모든 지침이 포함된 텍스트 파일입니다. Dockerfile을 작성하여 이미지 생성 프로세스를 자동화할 수 있습니다.

  • Docker Compose: Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하는 데 사용되는 도구입니다. YAML 파일을 사용하여 애플리케이션 서비스를 구성한 다음 단일 명령으로 모든 서비스를 시작하거나 중지할 수 있습니다.

Docker 설치

먼저 Docker를 설치해야 합니다. Docker는 다양한 운영 체제용 설치 패키지를 제공합니다. Docker 공식 웹사이트를 방문하여 해당 지침에 따라 설치하십시오.

설치가 완료되면 docker --version 명령을 실행하여 Docker가 올바르게 설치되었는지 확인할 수 있습니다.

간단한 Python 애플리케이션 컨테이너화

간단한 Python 애플리케이션을 만들고 Docker를 사용하여 컨테이너화합니다.

1. Python 애플리케이션 만들기

app.py라는 파일을 만들고 다음 코드를 포함합니다.

from flask import Flask
app = Flask(__name__)

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

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

이 간단한 Flask 애플리케이션은 루트 경로 /에서 "Hello, Docker!"를 반환합니다.

2. requirements.txt 파일 만들기

애플리케이션은 Flask 라이브러리에 의존하므로 이러한 종속성을 선언하기 위해 requirements.txt 파일을 만들어야 합니다.

Flask

3. Dockerfile 만들기

Dockerfile이라는 파일을 만들고 다음 내용을 추가합니다.

# 공식 Python 이미지를 기본 이미지로 사용
FROM python:3.9-slim-buster

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

# requirements.txt 파일을 작업 디렉토리에 복사
COPY requirements.txt .

# 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
# 복사 애플리케이션 코드
COPY app.py .

# 포트 5000을 노출 (Flask 기본 포트)
EXPOSE 5000

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

4. 이미지 빌드

Dockerfile이 있는 디렉토리에서 다음 명령을 실행하여 Docker 이미지를 빌드합니다.

docker build -t my-python-app .

5. 컨테이너 실행

이미지가 빌드되면 다음 명령을 사용하여 컨테이너를 실행할 수 있습니다.

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

이제 브라우저에서 http://localhost:5000을 방문하면 "Hello, Docker!" 메시지가 표시됩니다.

Docker Compose 사용 (선택 사항)

Docker Compose를 사용하면 여러 컨테이너를 쉽게 관리할 수 있습니다. docker-compose.yml 파일을 만들고 다음 내용을 추가합니다.

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"

그런 다음 다음 명령을 실행하여 애플리케이션을 시작합니다.

docker-compose up -d

결론

이 가이드에서는 Docker의 기본 사항을 소개하고 간단한 Python 애플리케이션을 컨테이너화하는 방법을 보여주었습니다. Docker는 애플리케이션을 구축, 배포 및 관리하는 데 매우 강력한 도구이며, 이 가이드가 Docker 여정을 시작하는 데 도움이 되었기를 바랍니다.# 애플리케이션 코드를 작업 디렉터리에 복사 COPY app.py .

포트 5000 노출

EXPOSE 5000

시작 명령 정의

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


**Dockerfile 설명:**

*   `FROM python:3.9-slim-buster`: 베이스 이미지를 Python 3.9의 슬림 버전으로 지정합니다.
*   `WORKDIR /app`: 컨테이너 내부의 작업 디렉터리를 `/app`으로 설정합니다.
*   `COPY requirements.txt .`: 현재 디렉터리의 `requirements.txt` 파일을 컨테이너의 `/app` 디렉터리로 복사합니다.
*   `RUN pip install --no-cache-dir -r requirements.txt`: 컨테이너 내에서 `pip` 명령을 실행하여 `requirements.txt` 파일에 지정된 종속성을 설치합니다. `--no-cache-dir` 파라미터는 이미지 크기를 줄일 수 있습니다.
*   `COPY app.py .`: 현재 디렉터리의 `app.py` 파일을 컨테이너의 `/app` 디렉터리로 복사합니다.
*   `EXPOSE 5000`: 컨테이너가 5000 포트를 리스닝하도록 선언합니다.
*   `CMD ["python", "app.py"]`: 컨테이너 시작 시 실행할 명령을 정의합니다.

### 4. Docker 이미지 빌드

`Dockerfile`이 포함된 디렉터리에서 다음 명령을 실행하여 Docker 이미지를 빌드합니다.

```bash
docker build -t my-python-app .
  • docker build: 이미지를 빌드하는 명령입니다.
  • -t my-python-app: 이미지에 이름(my-python-app)을 지정합니다.
  • .: Dockerfile이 있는 디렉터리(현재 디렉터리)를 지정합니다.

빌드 프로세스는 네트워크 속도 및 종속성 크기에 따라 시간이 걸릴 수 있습니다.

5. Docker 컨테이너 실행

다음 명령을 사용하여 Docker 컨테이너를 실행합니다.

docker run -d -p 5000:5000 my-python-app
  • docker run: 컨테이너를 실행하는 명령입니다.
  • -d: 분리 모드(백그라운드에서 실행)로 컨테이너를 실행합니다.
  • -p 5000:5000: 호스트 시스템의 5000 포트를 컨테이너의 5000 포트에 매핑합니다.
  • my-python-app: 사용할 이미지 이름을 지정합니다.

6. 애플리케이션 검증

브라우저에서 http://localhost:5000에 접속하면 "Hello, Docker!"가 표시되어야 합니다.

7. 컨테이너 중지 및 삭제

다음 명령을 사용하여 컨테이너를 중지합니다.

docker stop 

`` 는 docker ps 명령으로 확인할 수 있습니다.

다음 명령을 사용하여 컨테이너를 삭제합니다.

docker rm 

Docker Compose 시작하기

애플리케이션이 여러 서비스로 구성된 경우 Docker Compose를 사용하여 관리할 수 있습니다.

1. docker-compose.yml 파일 생성

docker-compose.yml이라는 파일을 만들고 다음 내용을 추가합니다.

version: "3.9"
services:
  web:
    image: my-python-app
    ports:
      - "5000:5000"

docker-compose.yml 설명:* version: "3.9": Docker Compose 파일의 버전을 지정합니다.

  • services: 애플리케이션의 서비스를 정의합니다.
  • web: "web"이라는 서비스를 정의합니다.
  • image: my-python-app: 서비스에서 사용할 이미지를 지정합니다.
  • ports: 포트 매핑을 정의합니다.

2. 애플리케이션 시작

docker-compose.yml 파일이 포함된 디렉터리에서 다음 명령을 실행하여 애플리케이션을 시작합니다.

docker-compose up -d
  • docker-compose up: 애플리케이션을 시작하는 명령입니다.
  • -d: 분리 모드로 컨테이너를 실행합니다.

3. 애플리케이션 중지

다음 명령을 사용하여 애플리케이션을 중지합니다.

docker-compose down

Docker 보안 모범 사례

논의에서 알 수 있듯이 Docker 이미지의 보안은 중요한 문제입니다. 다음은 몇 가지 Docker 보안 모범 사례입니다.

  • 공식 이미지 사용: 가능한 한 공식적으로 제공되는 이미지를 사용하십시오. 이러한 이미지는 일반적으로 보안 검사를 거치고 유지 관리됩니다.
  • 이미지 취약점 스캔: Trivy와 같은 도구를 사용하여 이미지에서 알려진 취약점을 스캔하고 이미지를 즉시 업데이트하십시오.
  • 최소 권한 원칙 사용: root 사용자로 컨테이너를 실행하지 마십시오.
  • 컨테이너 리소스 제한: cgroups를 사용하여 컨테이너의 CPU 및 메모리 사용량을 제한합니다.
  • 정기적인 이미지 업데이트: 보안 취약점을 수정하기 위해 이미지를 최신 상태로 유지하십시오.
  • 보안 스캔 도구 사용: Snyk, Clair 등과 같은 도구를 CI/CD 프로세스에 통합하여 이미지 취약점을 자동으로 스캔할 수 있습니다.

결론본 문서는 Docker의 빠른 시작 가이드를 제공하며, 핵심 개념, 설치 단계 및 간단한 Python 애플리케이션의 컨테이너화 예제를 다룹니다. 이러한 기본 사항을 학습함으로써 Docker를 사용하여 애플리케이션을 구축, 테스트 및 배포할 수 있습니다. 기억하십시오. 보안이 중요하며 항상 Docker 이미지의 보안에 주의를 기울이고 애플리케이션을 보호하기 위한 적절한 조치를 취해야 합니다. Kubernetes는 대규모 컨테이너 오케스트레이션 측면에서 강력하지만 Docker는 많은 시나리오에서 여전히 간단하고 효과적인 솔루션입니다. Docker를 마스터하면 최신 소프트웨어 개발 및 배포의 과제에 더 잘 대처할 수 있습니다.

Published in Technology

You Might Also Like

클라우드 컴퓨팅 기술 사용 방법: 첫 번째 클라우드 인프라 구축 완벽 가이드Technology

클라우드 컴퓨팅 기술 사용 방법: 첫 번째 클라우드 인프라 구축 완벽 가이드

클라우드 컴퓨팅 기술 사용 방법: 첫 번째 클라우드 인프라 구축 완벽 가이드 서론 디지털 전환이 가속화됨에 따라 클라우드 컴퓨팅은 기업과 개발자들이 선호하는 솔루션이 되었습니다. 클라우드 컴퓨팅을 통해 사용자는 애플...

경고! Claude Code의 아버지, 1개월 후 Plan Mode를 사용하지 않으면 소프트웨어 엔지니어 직함이 사라질 것이라고 단언하다Technology

경고! Claude Code의 아버지, 1개월 후 Plan Mode를 사용하지 않으면 소프트웨어 엔지니어 직함이 사라질 것이라고 단언하다

경고! Claude Code의 아버지, 1개월 후 Plan Mode를 사용하지 않으면 소프트웨어 엔지니어 직함이 사라질 것이라고 단언하다 최근 YC의 원탁 인터뷰가 기술계에서 화제가 되었습니다——Claude Cod...

2026년 Top 10 심층 학습 자원 추천Technology

2026년 Top 10 심층 학습 자원 추천

2026년 Top 10 심층 학습 자원 추천 심층 학습이 다양한 분야에서 빠르게 발전함에 따라, 점점 더 많은 학습 자원과 도구가 등장하고 있습니다. 본문에서는 2026년 가장 주목할 만한 10개의 심층 학습 자원을...

2026년 Top 10 AI 에이전트: 핵심 판매 포인트 분석Technology

2026년 Top 10 AI 에이전트: 핵심 판매 포인트 분석

2026년 Top 10 AI 에이전트: 핵심 판매 포인트 분석 서론 인공지능의 빠른 발전과 함께 AI 에이전트(AI Agents)는 기술 분야의 핫 이슈가 되었습니다. 점점 더 많은 개발자와 기업들이 이러한 스마트 ...

2026년 Top 10 AI 도구 추천: 인공지능의 진정한 잠재력 발휘하기Technology

2026년 Top 10 AI 도구 추천: 인공지능의 진정한 잠재력 발휘하기

2026년 Top 10 AI 도구 추천: 인공지능의 진정한 잠재력 발휘하기 기술이 빠르게 발전하는 오늘날, 인공지능(AI)은 각 산업에서 인기 있는 주제가 되었습니다. 의료 건강에서 금융 서비스, 교육에서 엔터테인먼...

2026년 Top 10 AWS 도구 및 리소스 추천Technology

2026년 Top 10 AWS 도구 및 리소스 추천

2026년 Top 10 AWS 도구 및 리소스 추천 빠르게 발전하는 클라우드 컴퓨팅 분야에서 Amazon Web Services (AWS)는 선두주자로서 풍부한 서비스와 도구를 제공하여 개발자, 기업 및 기술 전문가...