🐳 Docker 가상화 및 컨테이너 관리¶
1. 도커(Docker) 이해하기¶
📌 도커란?¶
-
도커(Docker) 는 프로그램을 격리해서 실행시켜주는 도구예요.
-
"내 컴퓨터에서는 되는데, 다른 컴퓨터에서는 안 돼!" 👉 이런 문제를 해결해줘요.
-
컨테이너(Container) 라는 상자 안에 프로그램을 넣고 실행합니다.
-
가상머신(VM)보다 가볍고 빠르다는 장점이 있어요.
2. 가상화 vs 컨테이너¶
flowchart LR
A["물리 서버<br/>💻"] --> B["가상화 (VM)<br/>🗂️"]
A --> C["컨테이너 (Docker)<br/>📦"]
B --> B1["운영체제 포함<br/>⚙️"]
B --> B2["리소스 사용 많음<br/>📈"]
C --> C1["공유 OS 위 실행<br/>⚡"]
C --> C2["리소스 사용 적음<br/>💡"]
-
가상화(VM): 운영체제(OS)를 여러 개 띄워서 무거움.
-
컨테이너(Docker): 운영체제를 공유하므로 가볍고 빠름.
3. 도커의 기본 개념¶
-
이미지(Image): 프로그램을 찍어낼 수 있는 "빵틀" 같은 것.
-
컨테이너(Container): 이미지를 실행해서 만들어진 "빵" 같은 것.
-
도커 엔진(Docker Engine): 컨테이너를 만들고 실행시키는 프로그램.
-
도커 허브(Docker Hub): 전 세계 사람들이 만든 이미지를 공유하는 "앱스토어" 같은 곳.
4. 도커 컨테이너 생애주기¶
flowchart TD
A[📦 이미지] --> B[▶️ 컨테이너 생성]
B --> C[⏸️ 실행 중]
C --> D[⏹️ 중지]
D --> E[🗑️ 삭제]
C --> F[🔄 새로운 버전으로 교체]
-
컨테이너는 일회용품처럼 쓰고 버리는 게 기본.
-
데이터는 호스트 서버 디스크에 따로 저장해두어야 안전해요.
5. 도커의 장점과 단점¶
✅ 장점 | ⚠️ 단점 |
---|---|
한 대의 서버에 여러 개 실행 가능 | 리눅스 프로그램만 지원 |
관리하기 쉽다 | 서버가 죽으면 컨테이너도 영향 |
개발환경 통일 | 컨테이너 1개만 쓰면 비효율 |
6. 도커 기본 명령어 예시 (한 줄씩 주석 포함)¶
# 도커 허브에서 nginx(웹 서버) 이미지 다운로드
docker pull nginx
# nginx 이미지를 이용해 컨테이너 실행 (이름을 myweb으로 지정)
docker run --name myweb -d -p 8080:80 nginx
# 현재 실행 중인 컨테이너 확인
docker ps
# 컨테이너 중지
docker stop myweb
# 컨테이너 삭제
docker rm myweb
# 이미지 삭제
docker rmi nginx
📝 설명
-
docker pull nginx
→ "nginx라는 빵틀을 가져온다" -
docker run
→ "그 빵틀로 빵(컨테이너)을 굽는다" -
docker ps
→ "지금 오븐에서 굽고 있는 빵들 확인" -
docker stop
→ "빵 굽는 거 멈추기" -
docker rm
→ "빵 버리기" -
docker rmi
→ "빵틀 버리기"
7. 현업에서 도커 활용 사례¶
-
개발 환경 통일
-
팀원 모두 같은 환경에서 개발 가능
-
"내 컴퓨터에서는 되는데?" 문제 해결
-
-
테스트 환경
-
새 버전 프로그램을 쉽게 테스트 가능
-
예: 개발 → 테스트 → 운영 배포
-
-
마이크로서비스
-
여러 개의 작은 서버(웹, DB, API)를 컨테이너로 각각 실행
-
서로 독립적이라 관리가 쉬움
-
-
CI/CD 자동화
-
깃허브 → 도커 빌드 → 서버 배포 자동화
-
실무에서 Jenkins, GitHub Actions, GitLab CI 등과 자주 같이 씀
-
🚀 정리¶
-
도커는 가볍고 빠른 가상화 기술
-
이미지 → 컨테이너 구조
-
현업에서는 개발환경 공유, 배포 자동화, 마이크로서비스 운영에 필수