🐳 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 해 볼 생각이다. 😄