본문 바로가기

개발/Docker

[Docker] Docker Compose

실습 목표: 컨테이너 실행에 필요한 설정을 코드로 선언하고 Docker Compose로 관리하기

 

Step 1. compose.yaml 파일 생성

프로젝트 루트에서 다음 내용의 compose.yaml 파일을 생성한다.

services:
  nginx:
    build: .
    container_name: my-nginx
    ports:
      - "8080:80"

 

services:

실행할 컨테이너들을 정의하는 영역

 

nginx:

하나의 실행 단위(서비스)를 부르기 위한 이름(식별자)을 지정한 것으로

예를 들어,

services:
  nginx:

  backend:

  database:

와 같이 확장하여 여러 컨테이너를 하나의 프로젝트 단위로 관리할 수 있으며

서비스 식별자를 통해 특정 서비스만을 제어하거나 서로 다른 서비스 간에 통신을 한다.

 

build: .

현재 디렉터리를 Build Context로 사용하고, 그 안의 Dockerfile을 이용해서 이미지를 빌드하라는 의미이다.

현재 디렉터리 구조

즉, 이전 실습에서 진행했던

docker build -t my-nginx:1.0 .

와 같은 역할을 Compose가 대신 수행한다.

 

container_name: my-nginx

컨테이너 이름을 직접 지정한다. (my-nginx)

 

ports:
  - "8080:80"

로컬 머신의 8080 포트와 도커 컨테이너의 80 포트를 연결한다.

 

Step 2. Compose로 Nginx 컨테이너 실행하기

프로젝트 루트 경로에서

docker compose up -d

을 실행한다. (기존 컨테이너 존재하는 경우 제거)

여기서 -d 는 Detached Mode로 백그라운드에서 실행하라는 의미이다.

compose 명령어 로그

 

compose의 up 명령어는 필요한 경우 build까지 자동으로 수행하기 때문에 일반적인 개발 과정에서는 
명시적으로 이미지만을 빌드하는 docker compose build 명령은 생략하고 docker compose up -d 만을 사용하는 경우가 많다.

 

이제

프로젝트 루트 경로에서 다음 명령어를 입력하여

docker compose ps

현재 폴더의 compose.yaml 파일과 연결된 컨테이너들을 필터링해서 출력한다.

정상적으로 nginx가 컨테이너가 실행 중인 것을 확인할 수 있다.

 

Step 3. 브라우저에서 확인

다음 주소들로 접속해 보면

http://localhost:8080/

http://localhost:8080/docs/guide.txt

http://localhost:8080/static/test.txt

 

정상적으로 nginx 컨테이너가 동작하는 것을 확인할 수 있다.

 

Step 4. 컨테이너 종료

다음 compose 명령어를 실행하여

docker compose down

Compose가 생성한 컨테이너와 네트워크 등을 정리한다.

 

컨테이너가 정리된 것을 확인할 수 있다.

 

이번 실습에서의 주안점

이전에는 컨테이너를 실행하기 위해 명령어에 많은 정보를 

docker run -d \
  --name my-nginx \
  -p 8080:80 \
  my-nginx:1.0

와 같이 직접 작성했지만


이제는 compose.yaml 파일에 

services:
  nginx:
    build: .
    container_name: my-nginx
    ports:
      - "8080:80"

 

그 설정이 저장되어 있다.


따라서 다른 사람이 프로젝트를 받더라도 docker compose up -d 명령만 실행시키면 동일한 환경을 구성할 수 있다.
 

Step 5. Compose의 장점 이해하기

현재까지의 실습에서는 Nginx 하나밖에 다루지 않았기 때문에 사실 Compose가 크게 필요해 보이지 않을 수 있지만

예를 들어, backend와 database가 서비스 환경에 추가되는 경우에 Compose를 사용하면 추가된 서비스 환경을 포함한 전체 환경을

services:
  nginx:
    ...

  backend:
    ...

  database:
    ...

위와 같이 하나의 파일(compose.yaml)에서 정의할 수 있고

docker compose up -d

명령 한 번으로 전체 환경을 시작할 수 있다.

이것이 Docker Compose를 배우는 핵심적인 이유이다.

 

결과적으로 Compose는 여러 개의 도커 컨테이너를 하나의 파일로 정의하고, 단 하나의 명령어로 동시에 실행 및 관리할 수 있게 해주는 다중 컨테이너 관리 도구라고 볼 수 있다.

'개발 > Docker' 카테고리의 다른 글

[Docker] Reverse Proxy  (0) 2026.08.12
[Docker] Dockerfile  (0) 2026.08.10
[Nginx] alias 설정  (0) 2026.08.10
[Nginx] location 설정  (0) 2026.08.10
[Docker] Nginx 설정 파일인 nginx.conf 이해하기  (0) 2026.08.06