🐳 Docker, 신세계를 보다

오늘은 백엔드 개발의 필수 스킬이라는 Docker를 드디어 시작했다. “제 컴퓨터에선 됐는데…” 이 지긋지긋한 말을 없애준다는 마법의 도구. 기본 개념을 배우고 nginx 웹 서버를 직접 컨테이너로 띄워보니, 왜 다들 Docker, Docker 하는지 바로 알 수 있었다. 한마디로 정말 강력하다.

🤔 Docker, 왜 써야만 하는가?

내가 만든 코드가 서버에만 올라가면 말썽을 부리는 경험, 다들 있을 것이다. Docker는 바로 그 ‘환경 차이’ 문제를 뿌리 뽑아준다. 개발 환경 자체를 통째로 코드처럼 관리해서, 어디서든 똑같은 환경을 보장한다. 덕분에 개발자는 인프라 걱정 없이 코드에만 집중할 수 있다. 👍


🔥 가상 머신(VM) vs 컨테이너(Container)

Docker를 이해하려면 가상화의 두 거두, 가상 머신컨테이너의 차이를 알아야 한다

구분 가상 머신 (Virtual Machine) 컨테이너 (Container)
구조 호스트 OS 위에 Hypervisor를 두고, Guest OS를 통째로 올린다. 호스트 OS의 커널(Kernel)을 공유하고, 프로세스만 격리한다.
장점 완벽한 격리 가볍고 빠르다, 리소스 차지도 적다
단점 무겁고 느리다, 오버헤드가 크다 격리 수준이 VM보다 낮다
비유 독채 건물 🏠 룸 셰어링 🛋️

가상 머신이 무겁게 집을 한 채 새로 짓는 거라면, 컨테이너는 이미 있는 집을 효율적으로 나눠 쓰는 느낌이다. Docker가 왜 그렇게 빠른지 바로 이해됐다.


⚙️ Docker의 핵심 부품들

Docker는 몇 가지 중요한 부품들이 모여 돌아간다.

용어 설명
🐳 Docker Image 컨테이너 제작용 설계도. 코드, 라이브러리 등 모든 걸 담고 있다.
📦 Docker Container 이미지를 실행한 결과물. 격리된 공간에서 앱이 돌아간다.
📜 Dockerfile 나만의 이미지를 만드는 레시피. 명령어만 착착 적으면 끝.
⚓ Docker Hub 이미지를 저장하고 공유하는 원격 창고. GitHub랑 비슷하다.

🛠️ 실습: Nginx 웹 서버 직접 띄워보기

nginx 웹 서버를 컨테이너로 직접 다뤄봤다.

1. 이미지 다운로드 (pull)

일단 Docker Hub에서 nginx 공식 이미지를 받아왔다.

docker pull nginx

2. 컨테이너 실행 (run)

다운받은 이미지로 컨테이너를 실행했다. 옵션 몇 개를 추가했다.

# -p 80:80 : 내 컴퓨터 80번 포트와 컨테이너 80번 포트를 연결.
# -d : 백그라운드에서 실행.
# --name my-nginx : 컨테이너에 'my-nginx'라고 이름 붙이기.
docker run -p 80:80 -d --name my-nginx nginx

그리고 브라우저에서 http://localhost로 접속하니… 성공! 🎉 Nginx 환영 페이지가 떴다. 웹 서버 하나가 이렇게 간단하게 만들어지다니, 놀라웠다.

3. 컨테이너 관리 (ps, stop, rm)

다 쓴 컨테이너는 깔끔하게 정리했다.

# 실행 중인 컨테이너 확인
docker ps

# 컨테이너 중지
docker stop my-nginx

# 컨테이너 삭제
docker rm my-nginx

✨ 오늘의 회고

Docker
처음엔 복잡해 보였지만 막상 해보니 정말 직관적이고 편했다. 앞으로 프로젝트를 더 편하게 할 생각에 기대된다.
다음엔 Dockerfile로 나만의 이미지를 만들어 push 해 볼 생각이다. 😄