본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

[실습] 웹 프론트엔드 프로젝트(HTML, CSS, Nginx)를 Docker로 배포하기

by jint 2026. 5. 21.

1. 웹 프론트엔드 프로젝트(HTML, CSS, Nginx)를 Docker로 배포
- Windows PowerShell

PS C:\Users\admin> mkdir my-web-server


    디렉터리: C:\Users\admin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-21   오후 8:41                my-web-server


1) HTML, CSS 파일 생성
- my-web-server/index.html

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>My Web Page</h1>
</body>
</html>


* 주의
Nginx 기본 설정에 의해 메인 페이지(첫 페이지)의 파일명을 index.html 로 지어야 함

- my-web-server/style.css

* {
    color: blue;
}


2) Dockerfile 작성
Docker Hub - nginx : https://hub.docker.com/_/nginx

 

nginx - Official Image | Docker Hub

⁠Quick reference ⁠Supported tags and respective Dockerfile links 1.31.0, mainline, 1, 1.31, latest, 1.31.0-trixie, mainline-trixie, 1-trixie, 1.31-trixie, trixie⁠ 1.31.0-perl, mainline-perl, 1-perl, 1.31-perl, perl, 1.31.0-trixie-perl, mainline-trixi

hub.docker.com


- my-web-server/Dockerfile

FROM nginx 
COPY ./ /usr/share/nginx/html


3) Dockerfile 바탕으로 이미지 빌드
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker build -t my-web-server .
[+] Building 6.8s (8/8) FINISHED                                                                                                                                                            docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.1s
 => => transferring dockerfile: 79B                                                                                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/nginx:latest                                                                                                                                             2.2s
 => [auth] library/nginx:pull token for registry-1.docker.io                                                                                                                                                0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.1s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [internal] load build context                                                                                                                                                                           0.1s
 => => transferring context: 340B                                                                                                                                                                           0.0s
 => [1/2] FROM docker.io/library/nginx:latest@sha256:800e7c98538c6bf725f5177e841aa720ae0ed1c378bbea368b6330bfe18a36b3                                                                                       3.7s
 => => resolve docker.io/library/nginx:latest@sha256:800e7c98538c6bf725f5177e841aa720ae0ed1c378bbea368b6330bfe18a36b3                                                                                       0.1s
 => => sha256:388081780287c79616f4c942f3e0d7ce31b37e4b112917eec4c6e4b1103e7e91 1.40kB / 1.40kB                                                                                                              0.2s
 => => sha256:6735e617770dacdaea79e927b4a2e98dea7190e29a6315a67c6aeff9bb817e3b 1.21kB / 1.21kB                                                                                                              0.4s
 => => sha256:e2dc6cdcd98883bb41d951653a5c63be7a1c20d9e38018288a78fe777a5bae47 405B / 405B                                                                                                                  0.6s
 => => sha256:fa14110e5ccbff9407edce43177fcd89d36497c2f03be55a5ede3ef12d745c86 955B / 955B                                                                                                                  0.6s
 => => sha256:564041453b759ee0a5209b9e474b8827949318d9f7ae55f54d6da39201c55cf0 628B / 628B                                                                                                                  0.4s
 => => sha256:cf902b7062fb3bfcceea06550605215730d9c042a8ef4a8a82684793b7741806 33.31MB / 33.31MB                                                                                                            2.2s
 => => sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 29.78MB / 29.78MB                                                                                                            1.6s
 => => extracting sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970                                                                                                                   0.5s
 => => extracting sha256:cf902b7062fb3bfcceea06550605215730d9c042a8ef4a8a82684793b7741806                                                                                                                   0.5s
 => => extracting sha256:564041453b759ee0a5209b9e474b8827949318d9f7ae55f54d6da39201c55cf0                                                                                                                   0.0s
 => => extracting sha256:fa14110e5ccbff9407edce43177fcd89d36497c2f03be55a5ede3ef12d745c86                                                                                                                   0.0s
 => => extracting sha256:e2dc6cdcd98883bb41d951653a5c63be7a1c20d9e38018288a78fe777a5bae47                                                                                                                   0.0s
 => => extracting sha256:6735e617770dacdaea79e927b4a2e98dea7190e29a6315a67c6aeff9bb817e3b                                                                                                                   0.0s
 => => extracting sha256:388081780287c79616f4c942f3e0d7ce31b37e4b112917eec4c6e4b1103e7e91                                                                                                                   0.0s
 => [2/2] COPY ./ /usr/share/nginx/html                                                                                                                                                                     0.1s
 => exporting to image                                                                                                                                                                                      0.4s
 => => exporting layers                                                                                                                                                                                     0.2s
 => => exporting manifest sha256:376de8713688046185bfd95c82f0d38e608ccac0e0ab58363e76adcd28b11398                                                                                                           0.0s
 => => exporting config sha256:46804899155ae59dde0931655d4885b933b3d164557b5d95c04131b2771fb0ad                                                                                                             0.0s
 => => exporting attestation manifest sha256:035ea125fb32fdccad550ee8cd78f6e21165ff9e79188ddbfcc38fa77d31059c                                                                                               0.1s
 => => exporting manifest list sha256:f9c3a888835e53bbf1c6aeba182ab307408961eee1e8f3cefdd19412cb92481b                                                                                                      0.0s
 => => naming to docker.io/library/my-web-server:latest                                                                                                                                                     0.0s
 => => unpacking to docker.io/library/my-web-server:latest                                                                                                                                                  0.0s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/meeyfjqcsiht4bg70alvnhxtm


4) 이미지 생성 확인
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB    U
my-server:latest         c8dad74bef6b        157MB         41.6MB    U
my-web-server:latest     f9c3a888835e        238MB         63.1MB


5) 생성한 이미지 컨테이너로 실행
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker run -d -p 80:80 my-web-server
c5278785a655d0ff0fd10f07af5af5b4fceacbe225ebb0619848bd013bced605


6) 컨테이너 실행 확인
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                 NAMES
c5278785a655   my-web-server   "/docker-entrypoint.…"   15 seconds ago   Up 15 seconds   0.0.0.0:80->80/tcp, [::]:80->80/tcp   competent_mccarthy


7) 브라우저에서 확인
브라우저에서 http://localhost:80/ 접속

 

Docker 로 웹 서버 실행 확인


8) 컨테이너 내부 파일 확인
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker exec -it c527 bash
root@c5278785a655:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@c5278785a655:/# cd /usr/share/nginx/html
root@c5278785a655:/usr/share/nginx/html# ls
50x.html  Dockerfile  index.html  style.css
root@c5278785a655:/usr/share/nginx/html# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug c527
    Learn more at https://docs.docker.com/go/debug-cli/


9) 실행시킨 컨테이너 중지 후 삭제, 이미지 삭제
- Windows PowerShell

PS C:\Users\admin\my-web-server> docker stop c527
c527
PS C:\Users\admin\my-web-server> docker rm c527
c527
PS C:\Users\admin\my-web-server> docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED      STATUS                  PORTS     NAMES
47c438563cdb   my-server         "/bin/bash -c 'sleep…"   3 days ago   Exited (0) 3 days ago             nice_matsumoto
10b3825e00f9   my-node-server    "/bin/bash -c 'sleep…"   7 days ago   Exited (0) 7 days ago             pensive_ride
e8f1ab86997c   my-jdk17-server   "/bin/bash -c 'sleep…"   7 days ago   Exited (0) 7 days ago             tender_ride
PS C:\Users\admin\my-web-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB    U
my-server:latest         c8dad74bef6b        157MB         41.6MB    U
my-web-server:latest     f9c3a888835e        238MB         63.1MB
PS C:\Users\admin\my-web-server> docker image rm f9c3
Untagged: my-web-server:latest
Deleted: sha256:f9c3a888835e53bbf1c6aeba182ab307408961eee1e8f3cefdd19412cb92481b
PS C:\Users\admin\my-web-server> docker image ls
                                                                                                                                                                                             i Info →   U  In Use
IMAGE                    ID             DISK USAGE   CONTENT SIZE   EXTRA
my-jdk17-server:beta     18e650b59b52        682MB          212MB
my-jdk17-server:latest   09a2803e5d8e        682MB          212MB    U
my-node-server:latest    9a1e49574c81       1.77GB          442MB    U
my-server:latest         c8dad74bef6b        157MB         41.6MB    U

 

그림으로 이해하기



참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,479명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글