Skip to content

KR_Virt_Docker

somaz edited this page Mar 30, 2026 · 1 revision

Docker & Dockerfile & Docker Compose

2. Docker & DockerFile & Docker Compose

Docker는 소프트웨어 컨테이너 내에서 애플리케이션을 배포하기 위한 오픈 소스 플랫폼이다. 리눅스의 운영체제 수준 가상화에 대한 추가적인 추상화 및 자동화를 제공한다.

Docker는 리눅스 커널의 리소스 격리 기능(예: cgroups 및 커널 네임스페이스)과 유니온 파일 시스템(OverlayFS와 같은)을 사용하여 단일 리눅스 인스턴스 내에서 독립적인 컨테이너가 실행될 수 있도록 하여 가상 머신을 시작하고 유지하는 오버헤드를 방지한다.

Docker의 주요 특징

  1. 컨테이너화: 애플리케이션과 그 의존성을 컨테이너에 패키징하여 개발, 테스트 및 프로덕션 환경에서 일관성을 보장한다.
  2. 경량성: 컨테이너는 기계의 OS 커널을 공유하고 애플리케이션당 OS를 요구하지 않아 가상 머신보다 더 가볍다.
  3. 이식성: Docker로 컨테이너화된 애플리케이션은 Docker를 지원하는 모든 플랫폼에서 어디에서나 실행될 수 있다.
  4. 격리: Docker는 각 컨테이너가 격리되도록 보장한다. 컨테이너는 자체 파일 시스템, 네트워킹 및 고유한 프로세스 공간을 가진다.
  5. Docker Hub: Docker Hub는 Docker 이미지를 위한 저장소이다. 사용자는 Docker Hub에서 이미지를 가져와 애플리케이션의 기반으로 사용할 수 있다.

Dockerfile

Dockerfile은 이미지를 조합하기 위해 사용자가 커맨드 라인에서 호출할 수 있는 모든 명령어를 포함하는 텍스트 문서이다. docker build를 사용하면 연속적인 커맨드 라인 지시어를 수행하는 자동화된 빌드를 생성할 수 있다.

Dockerfile의 기본 구조
  • FROM: 기반 이미지를 지정한다.
  • RUN: 현재 이미지 위에 새 레이어에서 명령을 실행하고 결과를 커밋한다.
  • COPY: src에서 새 파일, 디렉토리 또는 원격 파일 URL을 복사하고 컨테이너의 dest 경로에 추가한다.
  • CMD: 실행 중인 컨테이너에 대한 기본값을 제공한다. 마지막 CMD만 효과가 있다.
  • EXPOSE: Docker에게 컨테이너가 런타임에 지정된 네트워크 포트를 사용한다고 알린다.
  • ENV: 환경 변수 <key>를 값 <value>로 설정한다.
  • ENTRYPOINT: 실행 가능한 컨테이너를 구성할 수 있도록 한다.
Dockerfile 예시
# 공식 Python 런타임을 부모 이미지로 사용(Docker Hub 다운로드)
FROM python:3.7-slim

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

# 현재 디렉토리의 내용을 컨테이너의 /usr/src/app에 복사
COPY . .

# requirements.txt에 명시된 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt

# 컨테이너 외부에서 포트 80 사용 가능하도록 설정
EXPOSE 80

# 환경 변수 정의
ENV NAME World

# 컨테이너가 시작될 때 app.py 실행
CMD ["python", "./app.py"]
  • 해당 Dockerfile은 Python 환경을 만들고, 작업 디렉토리를 설정하고, 현재 디렉토리의 내용을 복사하고, 의존성을 설치하고, 포트를 공개하고, 환경 변수를 설정하고, 컨테이너 시작 시 명령어를 지정한다.

Docker Compose

Docker Compose는 여러 컨테이너를 정의하고 실행하기 위한 도구입니다. docker-compose.yml 파일을 사용하여 애플리케이션의 서비스, 네트워크 및 볼륨을 구성할 수 있다.

Docker Compose 예시
version: "3"
services:
  web:
    image: "webapp:latest"
    ports:
      - "5000:5000"
  db:
    image: "postgres:latest"
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • 해당 docker-compose.yml 파일은 웹 애플리케이션 서비스와 PostgreSQL 데이터베이스 서비스를 정의한다. 웹 서비스는 5000 포트에서 실행되며, db 서비스는 환경 변수를 통해 구성된다.

Reference


참고 자료

Clone this wiki locally