Docker의 개념과 필요성#
Docker란 무엇인가?#
Docker의 공식 홈페이지에서는 Docker를 아래와 같이 정의하고 있습니다.
Docker는 애플리케이션 개발, 배포 및 실행을 위한 개방형 플랫폼입니다.
Docker를 사용하면 애플리케이션과 인프라를 분리하여 소프트웨어를 신속하게 배포할 수 있습니다.
또한 애플리케이션 관리 방식과 동일한 방법으로 인프라를 관리할 수 있으며,
코드 배포·테스트·배포 방법론을 활용해 코드 작성부터 프로덕션 실행까지의 지연 시간을 크게 줄일 수 있습니다.
여기서 집중해야할 부분은 애플리케이션과 인프라를 분리하여 소프트웨어를 배포한다는 점입니다.
핵심 개념#
컨테이너 기반 가상화 기술
호스트 커널을 공유하면서도 프로세스·네트워크·파일시스템을 격리
전통적 VM 대비 훨씬 가볍고 빠름
이미지(Image)
애플리케이션 실행에 필요한 파일·라이브러리 스냅샷
Dockerfile로 정의하고, 계층(layer) 단위로 캐시 활용
컨테이너(Container)
이미지의 실행 인스턴스
생성·시작·중지·삭제가 자유롭고, 일관된 실행 환경을 보장
왜 Docker가 필요한가?#
환경 일관성 보장#
“제 PC에서는 잘 되는데요?” 문제 해결
개발 · 테스트 · 프로덕션 전 단계에서 동일한 환경 제공
높은 이식성(Portability)#
로컬 노트북, 온프레미스 서버, 퍼블릭 클라우드 어디서나 실행
레지스트리(Docker Hub, Private Registry)에 이미지를 중앙화
빠른 배포 및 스케일링#
컨테이너 단위로 서비스 확장·축소
오케스트레이션(Kubernetes, Docker Swarm)과 연동해 자동 스케일링
리소스 효율성#
VM 대비 오버헤드 적음 → 동일 하드웨어에서 더 많은 워크로드 실행
cgroups를 통한 CPU·메모리 제한 가능
협업 및 CI/CD 최적화#
컨테이너 이미지를 코드처럼 버전 관리
파이프라인 내
docker build→docker push→docker run을 통한 자동화
Image & Container#
이미지(Image)#
정의
읽기 전용 템플릿(스냅샷)으로, 컨테이너 실행에 필요한 애플리케이션 코드·라이브러리·설정 파일을 레이어(layer) 단위로 저장특징
불변(Immutable): 한 번 빌드된 이미지는 변경되지 않음
레이어 캐시: 변경 없는 레이어는 재빌드하지 않아 빌드 속도 및 저장 효율 증가
공유 가능: 여러 이미지가 동일한 레이어를 참조
주요 명령어
docker build -t <이름>:<태그> .→ Dockerfile로 이미지 생성docker images→ 로컬 이미지 목록docker pull <이미지>/docker push <이미지>→ 레지스트리와 동기화
컨테이너(Container)#
정의
이미지에 읽기-쓰기 레이어를 더해 실제 프로세스가 실행되는 인스턴스특징
격리(Isolation): 네트워크, 프로세스, 파일시스템이 분리
라이프사이클: 생성(create) → 시작(start) → 중지(stop) → 삭제(rm)
일관성: 어디서 실행해도 동일 동작 보장
주요 명령어
docker run <이미지>→ 컨테이너 생성·시작docker ps/docker ps -a→ 실행 중/전체 컨테이너docker exec -it <컨테이너>→ 내부 명령 실행docker stop/start/rm <컨테이너>→ 중지·재시작·삭제
지금까지 Docker의 개념과 필요성을 살펴보았습니다.
다음 세션에서는 Docker 기본 명령어(docker run, docker ps, docker exec, docker logs 등)를 직접 실습하며 컨테이너를 생성하고 관리하는 방법을 배워봅니다.