[Docker] Dockerfile부터 Docker Compose까지

Hoochu·2026년 1월 27일

Docker

목록 보기
2/3
post-thumbnail

지난 포스팅 [Docker]선택이 아닌 필수 에서 Docker가 무엇이고, 왜 사용하는지, 이미지가 무엇인지를 알아보았는데요.

이번에는 이 이미지를 어떻게 만드는지 그리고 여러개의 컨테이너를 어떻게 한번에 관리하는지에 대해 알아보겠습니다.

Dockerfile 이란?

여기서 이미지를 만들기 위한 설정 파일이 바로 Dockerfile입니다.

# Dockerfile
FROM ubuntu:latest
MAINTAINER MyName <my-email@example.com>

# Nginx 설치
RUN apt-get update && apt-get install -y nginx

# 파일 복사
COPY index.html /usr/share/nginx/html

# 80번 포트 개방
EXPOSE 80

# Nginx 실행
CMD ["nginx", "-g", "daemon off;"]

예시처럼 FROM, RUN, COPY, WORKDIR, ENV, EXPOSE, CMD 등의 예약어를 사용하여 이미지 생성 과정을 정의합니다. 각 명령어의 역할은 다음과 같습니다.

  • FROM: 베이스 이미지를 지정합니다. (예: FROM ubuntu:latest)
  • RUN: 이미지를 생성하는 과정에서 실행할 리눅스 명령어를 적습니다. (예: 패키지 설치)
  • COPY: 내 컴퓨터(Host)에 있는 파일을 컨테이너 안으로 복사합니다.
  • WORKDIR: 작업할 디렉터리를 지정합니다. (이후 명령어는 이 위치에서 실행됨)
  • ENV: 환경 변수를 설정합니다.
  • EXPOSE: 컨테이너가 사용할 포트를 명시합니다. (문서화 목적이 큼)
  • CMD: 컨테이너가 시작될 때 실행될 기본 명령어를 지정합니다.

이렇게 작성된 Dockerfile은 docker build 명령어를 통해 하나의 이미지로 탄생하게 됩니다.
ex) docker build -t my-image:latest .
생성된 이미지는 컨테이너로 실행하거나 레지스트리에 저장할 수 있습니다.

Docker 이미지 주요 명령어

  1. docker images -> 이미지 목록 확인
  2. docker rmi -> 이미지 삭제
  3. docker push -> 이미지를 원격 저장소(Docker hub)에 업로드

Docker 컨테이너 주요 명령어

  1. docker run [옵션] [이미지이름] -> 이미지로 컨테이너 실행
  2. docker ps -> 실행중인 컨테이너 확인
  3. docker stop [컨테이너 이름] -> 컨테이너 중지
  4. docker rm [컨테이너 이름] -> 컨테이너 삭제

기본 명령어는 이것인데 옵션들을 알면 더 편리하게 컨테이너를 관리 할 수 있어요!

Docker Compose 란?

웹 서비스를 개발하다 보면 단순히 웹 서버 하나만 띄우는 경우는 드뭅니다. Web Server, API Server, Database, Redis 등 여러 개의 컨테이너가 유기적으로 연결되어야 합니다.

이걸 하나하나 docker run 명령어로 실행하는 방법보다는 하나의 파일로 여러개의 컨테이너를 한번에 관리할 수 있는 방법이 있다면 간단할 것입니다. 그것이 바로 Docker Compose입니다.

Docker Compose를 사용하면 명령어 하나로 모든 컨테이너 서비스를 실행하고 정리할 수 있습니다. 또한 Compose로 같은 네트워크에 속해 컨테이너끼리의 통신이 쉽습니다.

Docker Compose 파일 예시

docker-compose.yml

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - api # api 컨테이너가 켜진 후 실행됨

  api:
    image: my-backend-image
    environment:
      - DB_HOST=db
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=secret

yaml 파일에서는 들여쓰기를 주의해야 합니다!

이렇게 파일을 생성한 후 주요 명령어로 컨테이너들을 한번에 관리 할 수 있습니다.

Docker Compose 주요 명령어

  1. docker compose up -d

    • 작성한 yaml 파일을 읽어 모든 컨테이너를 생성하고 실행합니다.

    • -d 옵션은 백그라운드 실행을 의미합니다.

  2. docker compose down

    • 실행 중인 모든 서비스를 중단하고, 컨테이너와 네트워크를 깔끔하게 삭제합니다.
  3. docker compose ps

    • 현재 Compose로 실행 중인 컨테이너들의 상태를 확인합니다.
  4. docker compose logs -f

    • 모든 컨테이너의 로그를 실시간(-f)으로 통합해서 확인합니다.

0개의 댓글