도커(Docker) 입문편 컨테이너 기초부터 서버 배포까지
도커(Docker)를 통해 macOS에서 Rocky Linux 환경을 1분 이내에 실행하고 Dockerfile로 이미지를 정의한 후 Docker Compose로 다중 컨테이너를 관리하여 클라우드 배포까지 자동화
AI 요약
Context
Virtual Machine은 하드웨어와 OS를 전체 에뮬레이션하므로 성능 오버헤드가 크다. Rocky Linux 같은 특정 환경을 구축하려면 수십 분의 설정 시간이 필요하다. 서로 다른 개발·테스트·운영 환경에서 애플리케이션 일관성을 유지하기 어렵다.
Technical Solution
- 프로세스 실행 환경 격리: Virtual Machine의 하드웨어 에뮬레이션 대신 Linux 커널의 namespace와 cgroup을 활용하여 프로세스만 격리
- 이미지와 컨테이너 개념 분리: Dockerfile로 계층화된 파일 시스템 기반의 재사용 가능한 이미지 정의, 이미지로부터 실행 가능한 컨테이너 생성
- Docker Desktop 또는 Docker Engine 설치: macOS/Windows는 Docker Desktop(GUI + Docker Compose + Kubernetes 포함), Linux는 Docker Engine만 설치로 선택적 구성
- Docker Compose를 통한 다중 컨테이너 관리: YAML 파일로 여러 컨테이너의 구성, 네트워킹, 볼륨을 선언형으로 정의
- Docker Hub와 클라우드 레지스트리 연동: 이미지를 Docker Hub 또는 Fly.io(registry.fly.io) 같은 원격 저장소에 Push하여 어디서나 Pull 후 실행 가능
Impact
rockylinux:9 이미지 pull 및 실행이 안정적인 네트워크에서 1분 미만 소요, 재실행 시 거의 즉시 결과 출력. Fly.io 배포 시 flyctl deploy 명령 한 번으로 Docker 이미지 빌드·배포 완료.
Key Takeaway
도커는 Virtual Machine 대비 프로세스 격리만으로 성능 오버헤드를 줄이면서도 환경 일관성을 제공하며, Dockerfile과 이미지 계층화를 통해 infrastructure-as-code를 구현할 수 있다. 클라우드 배포 자동화 시 Docker 이미지 표준화가 개발·운영 환경 간 배포 마찰을 제거하는 핵심이다.
실천 포인트
개발 환경에서 로컬 머신의 OS와 무관하게 특정 Linux 배포판이 필요한 경우, Docker Desktop/Orbstack을 설치한 후 `docker run --rm <image>:<tag>` 명령으로 즉시 실행 환경을 얻을 수 있다. 프로덕션 배포 시 Dockerfile로 애플리케이션 환경을 명시적으로 정의하고 Docker Compose로 의존성 있는 여러 서비스(DB, 캐시, 애플리케이션)를 한 번에 관리하면, 로컬·스테이징·운영 환경 간 환경 불일치로 인한 버그를 사전에 차단할 수 있다.