1. Docker CLI 로 컨테이너 실행
$ docker run -d --name webserver -p 80:80 nginx
2. Docker Compose 로 컨테이너 실행
1) compose.yml 파일 작성
- Windows PowerShell
PS C:\Users\admin> mkdir compose-practice
디렉터리: C:\Users\admin
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2026-05-23 오후 4:14 compose-practice
PS C:\Users\admin> cd .\compose-practice\
- compose-practice/compose.yml
services:
my-web-server:
container_name: webserver
image: nginx
ports:
- 80:80
#1 services: 서비스명:
서비스에 이름 붙임
Docekr Compose 에서 하나의 컨테이너를 서비스(service)라고 함 (여러 개의 서비스를 가질 수 있음)
#2 container_name: 컨테이너명
컨테이너 띄울 때 붙이는 이름
CLI 에서 "--name" 옵션 역할과 동일
#3 image:
컨테이너 실행시킬 때 사용할 이미지 정의
CLI 에서 "docker run 이미지명" 명령어 역할과 동일
#4 ports: - 호스트 포트:컨테이너 포트
포트 매핑 설정 옵션
CLI 에서 "-p" 옵션 역할과 동일
2) compose 파일 실행
#1 포그라운드 실행
- Windows PowerShell
PS C:\Users\admin\compose-practice> ls
디렉터리: C:\Users\admin\compose-practice
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2026-05-23 오후 4:16 124 compose.yml
PS C:\Users\admin\compose-practice> docker compose up
[+] up 11/11
✔ Image nginx Pulled 6.3s
✔ Network compose-practice_default Created 0.0s
✔ Container webserver Created 0.1s
Attaching to webserver
webserver | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
webserver | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
webserver | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
webserver | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
webserver | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
webserver | /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
webserver | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
webserver | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
webserver | /docker-entrypoint.sh: Configuration complete; ready for start up
webserver | 2026/05/23 07:21:01 [notice] 1#1: using the "epoll" event method
webserver | 2026/05/23 07:21:01 [notice] 1#1: nginx/1.31.1
webserver | 2026/05/23 07:21:01 [notice] 1#1: built by gcc 14.2.0 (Debian 14.2.0-19)
webserver | 2026/05/23 07:21:01 [notice] 1#1: OS: Linux 6.6.114.1-microsoft-standard-WSL2
webserver | 2026/05/23 07:21:01 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker processes
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 29
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 30
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 31
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 32
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 33
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 34
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 35
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 36
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 37
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 38
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 39
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 40
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 41
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 42
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 43
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 44
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 45
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 46
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 47
webserver | 2026/05/23 07:21:01 [notice] 1#1: start worker process 48
webserver | 172.18.0.1 - - [23/May/2026:07:21:20 +0000] "GET / HTTP/1.1" 200 896 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" "-"
webserver | 2026/05/23 07:21:20 [error] 29#29: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.18.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost", referrer: "http://localhost/"
webserver | 172.18.0.1 - - [23/May/2026:07:21:20 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36" "-"
# Ctrl + c 로 종료
Gracefully Stopping... press Ctrl+C again to force
Container webserver Stopping
#2 백그라운드 실행
- Windows PowerShell
PS C:\Users\admin\compose-practice> docker compose up -d
[+] up 2/2
✔ Network compose-practice_default Created 0.0s
✔ Container webserver Started 0.3s
What's next:
Filter, search, and stream logs from all your Compose services
in one place with Docker Desktop's Logs view. docker-desktop://dashboard/logs?appId=compose-practice
3) compose 실행 현황 확인
- Windows PowerShell
PS C:\Users\admin\compose-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d726a409fd0b nginx "/docker-entrypoint.…" 4 minutes ago Up About a minute 0.0.0.0:80->80/tcp, [::]:80->80/tcp webserver
PS C:\Users\admin\compose-practice> docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
webserver nginx "/docker-entrypoint.…" my-web-server 4 minutes ago Up About a minute 0.0.0.0:80->80/tcp, [::]:80->80/tcp
4) 브라우저에서 확인
브라우저에서 http://localhost:80/ 접속

5) compose 로 실행된 컨테이너 중지 후 삭제
- Windows PowerShell
PS C:\Users\admin\compose-practice> docker compose down
[+] down 2/2
✔ Container webserver Removed 0.4s
✔ Network compose-practice_default Removed 0.3s
PS C:\Users\admin\compose-practice> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\admin\compose-practice> docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
PS C:\Users\admin\compose-practice> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47c438563cdb my-server "/bin/bash -c 'sleep…" 5 days ago Exited (0) 5 days ago nice_matsumoto
10b3825e00f9 my-node-server "/bin/bash -c 'sleep…" 9 days ago Exited (0) 9 days ago pensive_ride
e8f1ab86997c my-jdk17-server "/bin/bash -c 'sleep…" 9 days ago Exited (0) 9 days ago tender_ride
비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의
현재 평점 4.9점 수강생 14,482명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를
www.inflearn.com
'강의 실습 > 비전공자도 이해할 수 있는 Docker 입문 실전' 카테고리의 다른 글
| [실습] Docker Compose로 Redis 실행시키기 (0) | 2026.05.26 |
|---|---|
| 자주 사용하는 Docker Compose CLI 명령어 (0) | 2026.05.25 |
| Docker Compose를 사용하는 이유 (0) | 2026.05.22 |
| [실습] 웹 프론트엔드 프로젝트(HTML, CSS, Nginx)를 Docker로 배포하기 (0) | 2026.05.21 |
| [실습] 웹 프론트엔드 프로젝트(Next.js)를 Docker로 배포하기 (0) | 2026.05.20 |
댓글