2. Docker + Nginx 명령어 실습

박은서's avatar
May 01, 2026
2. Docker + Nginx 명령어 실습

🐳 Docker + Nginx 실습 노트 (프리뷰)

🖥️ 윈도우 세상 (Host OS 환경)

1. 컨테이너 실행 (Windows 환경)

docker run -dit -p 8000:80 ubuntu
  • 우분투 취신 이미지를 다운로드하고 컨테이너로 실행
  • d : 백그라운드 실행 (detached)
  • i : 표준 입력 유지
  • t : 터미널 할당
  • p 8000:80 : 포트 포워딩
    • ➡️ 내 PC(윈도우) 8000번 포트로 접속하면 → 컨테이너 80번 포트(Nginx 기본 포트)로 연결
⚠️
docker pull vs docker run
구분
docker pull
docker run
역할
이미지 다운로드
컨테이너 생성 + 실행
실행 여부
❌ 실행 안 함
✅ 실행됨
이미지 없을 때
다운로드만
자동 pull 후 실행
결과
이미지 저장
컨테이너 생성

2. 실행 중인 컨테이너 확인

docker ps
  • 현재 실행 중인 컨테이너 목록 확인

3. 컨테이너 내부 접속 (Linux 환경 진입)

docker exec -it [컨테이너ID] bash
  • 실행 중인 우분투 컨테이너의 문을 열고 들어가서 컨테이너 안의 리눅스 쉘로 진입

🐧 컨테이너 내부 작업 (Linux)

4. 패키지 목록 업데이트

apt update
  • 패키지 목록(설치 메뉴판)을 최신 상태로 동기화
  • 가장 먼저 해야 할 필수 작업

5. nginx 검색

apt-cache search nginx | grep nginx
  • 설치 가능한 nginx 관련 패키지 확인
  • 동기화된 메뉴판에서 nginx라는 단어가 포함된 패키지를 찾아 출력
  • grep은 검색 필터링 역할

6. nginx 설치

apt install -y nginx
  • Nginx 웹 서버를 설치합니다.
  • -y : 설치 중간의 질문에 자동 동의 (-y를 하지 않으면 중간에 터미널 멈춤)

7. 프로세스 확인

ps -ef
  • 현재 리눅스 안에서 실행 중인 프로세스 목록 확인

8. 포트 확인 도구 설치

apt install -y net-tools
  • 네트워크 포트 상태를 확인하는 명령어(netstat)를 쓰기 위해 네트워크 관리 도구를 설치합니다.

9. 포트 상태 확인

netstat -nlpt
  • 현재 열려 있는 포트 확인
    • 아직 Nginx를 켜지 않았기 때문에 80번 포트 없음
  • n : 숫자 형태로 표시
  • l : LISTEN 상태
  • p : 프로세스 정보 포함
  • t : TCP

10. nginx 실행

nginx
  • 설치된 Nginx 웹 서버를 실행

11. nginx 실행 확인

netstat -nlpt
  • Nginx 실행 후, 80번 포트가 정상적으로 열려서 접속을 기다리고 있는지 다시 확인

🌐 브라우저 확인

http://localhost:8000
  • Docker 포트 포워딩
    • 내 PC 8000 → 컨테이너 80
  • nginx 기본 페이지 확인 가능

📁 웹 파일 위치 확인

12. index.html 찾기

find / -name index.html
  • 최상위 경로(/)부터 시작해서 Nginx의 메인 화면인 index.html 파일 위치 찾음

13. 웹 루트 디렉토리 이동

cd /var/www/html ls
  • 찾아낸 경로(Nginx의 기본 웹 문서 보관 폴더)로 이동(cd)
  • 폴더 안에 index.html 파일이 잘 있는지 목록 확인

✏️ 파일 수정

14. nano 설치

apt install -y nano
  • 파일 내용을 터미널에서 바로 수정하기 위해, 가볍고 직관적인 텍스트 에디터 nano 설치

15. 파일 수정

nano index.html
  • 수정 후 저장 및 종료
    • Ctrl + X (종료)
    • Y (저장 동의)
    • Enter (원래 이름으로 덮어쓰기)

🔄 변경 확인

http://localhost:8000
→ 수정된 내용이 브라우저에 반영됨

📘 commit & push

16. 컨테이너 → 이미지 저장

docker commit faa5 parkcoding/nginx:latest
  • 현재 컨테이너 상태를 이미지로 저장
  • Docker Hub에 올릴 준비

17. Docker Hub 로그인

docker login

18. 이미지 업로드

docker push parkcoding/nginx:latest

🚨 컨테이너 실행 문제 케이스

19. 기본 실행 (문제 발생)

docker run -d -p 8000:80 parkcoding/nginx:latest
  • 문제
    • 실행 후 바로 종료됨
  • 이유
    • 실행할 메인 프로세스 없음 (CMD 없음)

20. bash로 실행

docker run -dit -p 8000:80 parkcoding/nginx:latest bash
  • 결과
    • 컨테이너는 유지됨
    • ❌ nginx 실행 안 됨

21. nginx 실행 (문제 발생)

docker run -dit -p 8000:80 parkcoding/nginx:latest nginx
  • 문제
    • 컨테이너 바로 종료됨
  • 이유
    • nginx가 daemon으로 실행됨 (백그라운드)
    • 부모 프로세스는 백그라운드에서 nginx를 실행하고 바로 종료
      • → 컨테이너는 할 일이 없다고 판단하고 종료

22. 해결 방법 (핵심 ⭐)

docker run -dit -p 8000:80 parkcoding/nginx:latest nginx -g "daemon off;"
  • 결과
    • nginx 실행됨 (포그라운드)
    • 컨테이너 유지됨

📌 핵심 개념 요약

1. Docker

  • 컨테이너로 독립된 리눅스 환경 실행

2. 포트 포워딩

  • 외부(Host) ↔ 내부(Container) 연결

3. nginx

  • 웹 서버 (80 포트 사용)

4. /var/www/html

  • nginx의 기본 웹 문서 위치

5. netstat

  • 포트 및 서비스 상태 확인

6. 컨테이너 종료 조건

컨테이너 종료 = PID 1 프로세스 종료
  • 커맨드 없으면 → 바로 종료
  • 실행할 프로세스가 없으면 → 종료

7. 컨테이너 유지 조건

  • 포그라운드 프로세스 필요
  • 대표 예:
    • bash
    • nginx (daemon off)

8. nginx 기본 동작

  • 기본 = 백그라운드 (daemon)
  • 해결 = 포그라운드 실행

9. docker commit 특징

  • 포함
    • 설치한 패키지
    • 수정한 파일
    • 생성한 파일
  • 제외
    • 볼륨 데이터
  • 주의
    • CMD / ENTRYPOINT 자동 설정 안 됨
💡
이번 실습은 인프라 환경을 구축하는 A to Z를 수동으로 작업
(실무) 이 모든 타이핑 과정을 Dockerfile이라는 문서 하나에 적어두고 자동화해서 사용
명령어(GEMINI)
Share article