실습 목표: 컨테이너 실행에 필요한 설정을 코드로 선언하고 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의 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 |