1. 개요 및 정의
Docker는 Go 언어로 작성된 리눅스 컨테이너 기반 오픈소스 플랫폼으로,
애플리케이션을 컨테이너(Container)라는 독립된 환경에서 실행하도록 도와줍니다.
즉, “내 PC에서 되는데 서버에선 안 돼요” 문제를 해결해주는 기술입니다.
Docker는 2013년에 등장하여 현재는 개발 환경, 테스트, 배포 자동화의 핵심 기술로 자리 잡았습니다.
2. 개념의 필요성
“개발 서버에서는 잘 돌아가는데, 운영 서버에서는 에러가 나요.”
이 문제의 원인은 환경 차이(Environment Gap)입니다.
운영체제 버전, 라이브러리, 설정 파일 등 미묘한 차이가 문제를 일으키죠.
Docker는 이 문제를 ‘컨테이너’로 해결합니다.
- 하나의 앱과 필요한 실행 환경을 이미지(Image)로 묶어
- 어디서든 같은 방식으로 실행되게 합니다.
3. 핵심 개념 구분
| 구분 | 설명 | 대표 기술 |
|---|---|---|
| 가상머신(VM) | OS 전체를 가상화 (무겁고 느림) | VMware, VirtualBox |
| 컨테이너(Container) | OS 커널 공유, 프로세스 단위 격리 (가볍고 빠름) | Docker, Podman |
VM vs Container 구조 비교
VM 구조
[App] → [Guest OS] → [Hypervisor] → [Host OS]
Container 구조
[App] → [Docker Engine] → [Host OS]
주의: 컨테이너는 커널을 공유하기 때문에 완전한 보안 격리는 아닙니다.
(보안이 중요한 환경에서는 VM 병행 사용을 고려하세요.)
4. Docker의 핵심 구성요소
- Docker Client (CLI) – 명령을 입력하는 인터페이스 (
docker run,docker build등) - Docker Daemon (Server / Engine) – 실제로 컨테이너를 만들고 실행하는 백엔드 서비스
- Docker Hub / Registry – 컨테이너 이미지를 저장하고 공유하는 저장소
(기본값: hub.docker.com)
5. Docker 설치 방법
1. Linux (Ubuntu 기준)
sudo apt update
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
docker --version
결과 예시: Docker version 27.0.3, build xxxxx
Tip: sudo 없이 실행하려면 현재 사용자를 docker 그룹에 추가하세요.
sudo usermod -aG docker $USER
2. Windows / macOS
Docker Desktop을 설치하면 됩니다.
docker run hello-world
Hello from Docker! 메시지가 출력되면 성공입니다.
6. 실무 활용 예시
기본 실행 예시
docker run -it ubuntu bash
-it: 대화형 터미널 연결ubuntu: 이미지 이름bash: 실행할 명령
실행 중 컨테이너 목록 보기
docker ps
컨테이너 중지 및 삭제
docker stop <container_id>
docker rm <container_id>
7. 마무리 및 정리
Docker는 애플리케이션을 빠르고 일관되게 배포하기 위한 컨테이너 기술입니다.
가상머신보다 가볍고 효율적이며, DevOps 환경에서 CI/CD의 핵심 요소로 자리 잡았습니다.
- 개발 환경 통일 → “내 환경에서는 잘 돼요” 문제 제거
- CI/CD 자동화 파이프라인과 궁합이 뛰어남
- 운영 환경 이식성 극대화
8. 전 이걸로 그냥 끝냈습니다.
Ubuntu는 아래처럼 한방으로 끝내보았습니다.
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done &&
sudo apt-get update -y &&
sudo apt-get install -y ca-certificates curl &&
sudo install -m 0755 -d /etc/apt/keyrings &&
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc &&
sudo chmod a+r /etc/apt/keyrings/docker.asc &&
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo “${UBUNTU_CODENAME:-$VERSION_CODENAME}”) stable” | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null &&
sudo apt-get update -y &&
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin &&
sudo groupadd docker &&
sudo usermod -aG docker $USER &&
newgrp docker &&
sudo apt-get install -y nano