🐳 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이라는 문서 하나에 적어두고 자동화해서 사용
Share article