
Docker는 애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행할 수 있게 돕는 플랫폼입니다. 실행에 필요한 라이브러리, 설정, 코드를 하나로 묶어 어디서든 동일한 환경을 보장합니다.
📦 컨테이너화: 필요한 모든 것을 하나로 묶어 어디서든 즉시 실행
⚡ 경량화: 호스트 OS 커널을 공유하여 VM보다 훨씬 빠르고 가벼움
🌍 이식성: 내 컴퓨터에서 되던 게 서버에서도 똑같이 동작
📈 확장성: 여러 컨테이너를 효율적으로 관리하고 손쉽게 늘릴 수 있음
가장 큰 차이는 '무게감'과 '격리 방식'입니다.
쉽게 비유하자면?
가상 머신(VM): 지정된 땅 위에 독립된 집을 새로 짓는 것 (느리고 무거움)
Docker: 이미 지어진 집의 방 한 칸을 빌려 쓰는 것 (빠르고 효율적임)
VM은 지정된 땅(하드웨어) 안에서 여러 채의 독립된 집을 나눠서 짓는 것이라면, Docker는 이미 지어진 집의 방 한 칸을 빌려 쓰는 것이라고 할 수 있습니다.
| 구분 | 가상 머신 (VM) | 도커 (Docker) |
|---|---|---|
| 핵심 가치 | 완벽한 격리와 보안 | 효율성과 빠른 속도 |
| 추천 상황 | 보안 중시 시스템, 독립된 OS 환경 필수 시 | 빠른 배포, MSA, 개발 환경 통일 필요 시 |
| 한 줄 결론 | 철저한 리소스 분리가 우선이라면 VM | 서비스의 성능과 확장성이 우선이라면 Docker |
정리하자면:
가상 머신은 독립적인 OS를 포함해 완벽한 격리가 필요한 보안 중시 환경에 적합하며, 도커는 호스트 OS의 커널을 공유하여 가볍고 빠른 배포와 확장이 필요한 개발 환경 일치화에 유리합니다.
이미지 (Image): 컨테이너의 청사진. 실행에 필요한 모든 상태를 저장한 파일입니다.
컨테이너 (Container): 이미지를 실행시킨 상태. 격리된 공간에서 앱이 돌아가는 실체입니다.
Dockerfile: 이미지를 만들기 위한 레시피(스크립트)입니다.
Docker Hub: 전 세계 사람들과 이미지를 공유하는 도서관(저장소)입니다.
볼륨 (Volume): 컨테이너가 사라져도 데이터를 남기기 위한 외장 하드 같은 저장 공간입니다.
네트워크 (Network): 컨테이너끼리 서로 대화(통신)할 수 있게 연결해주는 통로입니다.
자주 쓰이는 명령어들을 이미지와 컨테이너로 나누어 정리했습니다.
이미지를 내려받고 확인하고 삭제하는 명령어입니다.
| 명령어 | 설명 |
|---|---|
docker build -t [이미지명:태그] . | 이미지 제작: 현재 경로의 Dockerfile 빌드 |
docker pull [이미지명] | 이미지 다운: 레지스트리에서 가져오기 |
docker images | 목록 확인: 내 컴퓨터의 이미지들 보기 |
docker rmi [이미지ID/명] | 이미지 삭제: 설계도 파일 제거 |
이미지를 실행하여 컨테이너를 만들고 관리하는 명령어입니다.
| 명령어 | 설명 |
|---|---|
docker run [옵션] [이미지명] | 실행: 컨테이너 생성 및 즉시 시작 |
docker exec -it [컨테이너ID] /bin/bash | 내부 접속: 실행 중인 컨테이너 안으로 들어가기 |
docker ps | 상태 확인: 실행 중인 컨테이너 보기 (-a는 전체) |
docker stop [컨테이너ID/명] | 중지: 실행 중인 프로세스 멈추기 |
docker rm [컨테이너ID/명] | 삭제: 컨테이너 완전히 제거하기 |
💡 Tip:
컨테이너 ID는abcdef123456처럼 길지만, 다 칠 필요 없이 앞의 3~4자리(abc)만 입력해도 중복되지 않는다면 도커가 똑똑하게 알아듣습니다!