30초에 넷플릭스 웹 서버 배포 (당신도 가능) - Docker 프로젝트 1

발행: (2026년 5월 23일 PM 06:16 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

소개

오늘 만들게 될 것

이 튜토리얼을 마치면 다음을 갖게 됩니다:

  • Docker 안에서 실행되는 실시간 웹 서버
  • 컨테이너에서 제공되는 나만의 HTML 페이지
  • 컨테이너가 종료돼도 살아남는 영구적인 웹사이트
  • 모든 단계가 정상 작동함을 증명하는 스크린샷
  • 소요 시간: 20분

프로젝트 기반 학습이 왜 중요한가

Docker를 배우기 시작했을 때, 나는 몇 시간씩 영상을 보았지만 금방 잊어버렸다. 그래서 실제 프로젝트를 만들기 시작했다. 이것은 내 “Docker Zero to Hero” 시리즈의 6개 프로젝트 중 1번째이다.
내가 만든 과정을 단계별로 보여줄게.

섹션 1: Docker 확인하기

단계 1: Docker가 살아있는가?

docker ps 명령을 실행했을 때 빈 테이블이 나왔다 – 정상이다. 아직 실행 중인 컨테이너가 없기 때문이다.
배운 점: docker ps실행 중인 컨테이너만 보여준다. 중지된 컨테이너까지 모두 보려면 docker ps -a를 사용한다.

섹션 2: 첫 컨테이너 실행하기

단계 2: 5초 만에 웹 서버 띄우기

여기서 마법이 일어났다. 한 줄 명령만으로 프로덕션 수준의 웹 서버를 얻었다.

docker run -d -p 8080:80 nginx
명령어 구성 요소무엇을 하는가
docker run새 컨테이너를 생성하고 실행
-d백그라운드(데몬) 모드
-p 8080:80호스트의 8080 포트를 컨테이너의 80 포트에 매핑
nginx사용할 이미지 이름

긴 컨테이너 ID가 반환되었으며, 이는 명령이 성공했음을 증명한다.
컨테이너 목록에 “Up” 상태로 나타난다.

섹션 3: 브라우저에서 확인하기

단계 3: 웹사이트 열기

Chrome을 열고 다음 주소로 이동했다:

http://localhost:8080

“Welcome to nginx!” 라는 문구가 표시되었다.
5초 만에 Netflix, Airbnb, Uber 등에서 사용하는 웹 서버를 배포한 셈이다.
내 반응: “미쳤다. Apache 설정도, Nginx 설치도, 의존성 지옥도 필요 없다.”
배운 점: 컨테이너는 애플리케이션과 그 의존성을 함께 패키징한다. 그래서 “그냥 동작한다”는 것이다.

섹션 4: 나만의 웹사이트 만들기

단계 4: 웹사이트 수정하기

먼저 나만의 HTML 파일을 만들었다:

echo "
My First Docker Project - Under Maintenance
Back at 9am.
" > index.html

그 다음 실행 중인 컨테이너에 복사했다:

docker cp index.html my-first-website:/usr/share/nginx/html/index.html

브라우저를 새로 고침했다:

배운 점: docker cp는 일반 cp와 비슷하지만 파일을 실행 중인 컨테이너 안으로 복사한다. /usr/share/nginx/html/ 경로가 Nginx가 웹 파일을 찾는 위치이다.

단계 5: 충돌 상황 시뮬레이션

컨테이너를 중지하고 삭제했다:

docker stop my-first-website

삭제 여부를 확인했다:

브라우저를 새로 고침했다:

페이지가 사라졌다. 내가 만든 HTML도 영영 사라졌다.
왜? 컨테이너는 일시적이다 – 죽으면 내부에 있던 모든 것이 함께 사라진다.
문제점: 실제 애플리케이션을 이렇게 배포하면 간단한 재시작만으로도 데이터가 모두 날아간다. 이는 프로덕션에서 용납될 수 없다.

섹션 6: 볼륨으로 해결하기 (프로덕션 솔루션)

단계 6: 볼륨을 이용한 영구 저장소

전용 프로젝트 폴더를 만들었다:

mkdir docker-project-1 && cd docker-project-1

새 HTML 파일을 만들었다:

cat > index.html <<'EOF'
PERSISTENT WEBSITE
This survives container death.
EOF

볼륨 마운트(-v) 옵션을 사용해 컨테이너를 실행했다:

docker run -d --name persistent-site -p 8080:80 -v "$(pwd):/usr/share/nginx/html" nginx

-v "$(pwd):/usr/share/nginx/html" 의미
-v | 호스트 디렉터리와 컨테이너 디렉터리를 연결
$(pwd) | 현재 작업 디렉터리(호스트) 경로
:/usr/share/nginx/html | 컨테이너 내부에서 Nginx가 웹 파일을 찾는 경로

브라우저를 새로 고침했다:

실제 테스트를 위해 컨테이너를 다시 삭제했다:

docker stop persistent-site && docker rm persistent-site

동일한 명령을 다시 실행했다:

docker run -d --name persistent-site -p 8080:80 -v "$(pwd):/usr/share/nginx/html" nginx

브라우저를 새로 고침했다:

여전히 정상 작동했다.

배운 점:

  • 볼륨 없이: 데이터는 컨테이너와 함께 사라진다.
  • 볼륨 사용: 데이터는 호스트에 남아 있고, 컨테이너는 그 데이터를 읽기만 한다.

이 방식이 데이터베이스, 파일 업로드, 사용자 데이터가 프로덕션 환경에서 재시작 후에도 살아남는 원리다.

0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.