1. 개요
개발자라면 한 번쯤 "내 컴퓨터에서는 잘 되는데, 서버에서는 왜 안 되지?"라는 멘붕에 빠져본 적이 있을 겁니다. 이는 개발 환경과 운영 환경(OS, 라이브러리 버전 등)이 미세하게 다르기 때문에 발생합니다.
도커(Docker)는 애플리케이션과 그 실행 환경을 '컨테이너(Container)'라는 박스에 담아, 어디서든 100% 동일하게 실행되도록 보장해주는 컨테이너 기반 가상화 플랫폼입니다. 오늘은 도커의 핵심 개념과 설치법을 정리합니다.
2. 전체 구조 요약 (VM vs Docker)
기존의 가상머신(Virtual Machine)과 도커의 가장 큰 차이는 Guest OS의 유무입니다.
[ Virtual Machine (VM) ] [ Docker (Container) ]
+-----------------+ +-----------------+
| App A | App B | | App A | App B |
+-------+ +-------+ +------+ +-------+
| Guest | | Guest | | Container |
| OS | | OS | | Engine |
+-------+ +-------+ +-----------------+
| Hypervisor | | Host OS |
+-----------------+ +-----------------+
| Host OS | | Hardware |
+-----------------+ +-----------------+
| Hardware |
+-----------------+
- VM: 하드웨어 전체를 가상화하고 Guest OS를 따로 설치 → 무겁고 느림 (GB 단위)
- Docker: OS 커널을 공유하고 프로세스만 격리 → 가볍고 빠름 (MB 단위)
3. 구성 준비물
| 항목 | 설명 |
|---|---|
| OS | Windows, Mac, Linux 모두 지원 (Linux 권장) |
| Docker Desktop | 로컬 개발용 GUI 및 엔진 통합 설치 툴 (Mac/Win) |
| Terminal | PowerShell, iTerm2 등 명령어 입력 도구 |
| AWS EC2 (선택) | 리눅스 환경 실습이 필요하다면 프리티어 인스턴스 |
4. 단계별 구성 절차
4-1. 도커 설치하기
운영체제에 맞춰 도커를 설치합니다.
- Windows/Mac: Docker Desktop 공식 홈페이지에서 다운로드 후 설치 (가장 간편)
- Linux (Ubuntu 기준):
# 1. 패키지 업데이트 및 필수 패키지 설치
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# 2. 도커 공식 GPG 키 추가
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3. 도커 엔진 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
4-2. 설치 확인 (버전 체크)
터미널을 열고 다음 명령어를 입력하여 정상 설치되었는지 확인합니다.
docker -v
# 출력 예시: Docker version 24.0.5, build ced0996
4-3. 첫 번째 컨테이너 실행 (Hello World)
도커가 잘 작동하는지 테스트하기 위해 공식 테스트 이미지를 실행해봅니다.
docker run hello-world
[실행 과정 분석]
- 로컬에
hello-world이미지가 있는지 확인. - 없으면 도커 허브(Docker Hub)에서 다운로드(Pull).
- 컨테이너를 생성하고 실행(Run).
- 화면에 환영 메시지를 출력하고 종료.
4-4. 핵심 개념 2가지: 이미지와 컨테이너
도커를 이해하려면 딱 두 가지만 기억하면 됩니다.
- 이미지 (Image): 실행 파일 + 설정값 + 라이브러리. (클래스 Class / 붕어빵 틀 / 설치 CD)
- 읽기 전용(Read-only)이며 변하지 않습니다.
- 컨테이너 (Container): 이미지를 실행한 상태. (인스턴스 Instance / 팥붕어빵, 슈크림붕어빵 / 실행된 프로세스)
- 읽기/쓰기가 가능하며 프로세스처럼 생성/삭제가 자유롭습니다.
5. 운영 및 사용 시 고려 사항
- 데이터의 휘발성: 컨테이너를 삭제하면 그 안에 저장된 데이터도 모두 사라집니다. 중요한 데이터(DB 등)는 반드시 Volume(볼륨) 기능을 이용해 로컬이나 별도 스토리지에 연결해야 합니다.
- 가상머신처럼 쓰지 말 것: 컨테이너 하나에 모든 기능(DB, Web, App)을 다 넣지 마세요. "1 컨테이너 = 1 프로세스"가 원칙입니다.
- 루트 권한 주의: 도커 데몬은 루트 권한으로 실행되므로, 보안상 신뢰할 수 없는 이미지를 함부로 실행하면 안 됩니다.
6. 결론
도커는 이제 선택이 아닌 필수입니다. 도커를 사용하면 얻을 수 있는 이점은 다음과 같습니다.
- 환경 일치: 개발, 테스트, 운영 서버 환경을 똑같이 맞출 수 있음 (Environment Parity)
- 빠른 배포: 서버 세팅 시간이 며칠에서 몇 분으로 단축됨
- 자원 효율성: VM 대비 훨씬 적은 리소스로 더 많은 애플리케이션 구동 가능
요약하자면,
- 도커는 애플리케이션 실행을 위한 경량화된 격리 환경이다.
- 이미지(Image)는 변하지 않는 틀, 컨테이너(Container)는 실행된 상태다.
- 이제 복잡한 설치 과정 없이
docker run한 줄이면 DB든 서버든 띄울 수 있다.
'개발 환경 | 도구 > Docker | 컨테이너' 카테고리의 다른 글
| [Kubernetes] 쿠버네티스가 너무 어렵다면? 초경량 MicroK8s(마이크로 k8s)로 입문하기 (0) | 2026.02.08 |
|---|---|
| [Docker] 도커 컴포즈(Docker Compose)로 멀티 컨테이너 한방에 관리하기 (0) | 2026.02.04 |
| [Docker] Dockerfile 작성법과 이미지 빌드(Build) 최적화 가이드 (0) | 2026.02.04 |
| [Docker] 도커 명령어 완전 정복 및 컨테이너 생명주기(Lifecycle) 관리 (0) | 2026.02.01 |