Search

개요

대분류
DevOps/Tool
소분류
Docker
설명
Docker 구조, 설명
유형
구조
사용법
주요 레퍼런스
https://github.com/good593/course_devops/tree/main/docker
https://docs.docker.com/get-docker/
https://pseudo-lab.github.io/DevFactory/docker_tutorial/01.what_is_docker.html
최종 편집 일시
2025/04/27 05:31
생성 일시
2024/01/12 05:35
13 more properties

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을 통한 자동화

Docker Container

Docker Image를 담아놓는 곳
호스트 OS상에 논리적인 구획
어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지한다.

정의

이미지에 읽기-쓰기 레이어를 더해 실제 프로세스가 실행되는 인스턴스

특징

격리(Isolation): 네트워크, 프로세스, 파일시스템이 분리
라이프사이클: 생성(create) → 시작(start) → 중지(stop) → 삭제(rm)
일관성: 어디서 실행해도 동일 동작 보장

주요 명령어

docker run <이미지> → 컨테이너 생성·시작
docker ps / docker ps -a → 실행 중/전체 컨테이너
docker exec -it <컨테이너> → 내부 명령 실행
docker stop/start/rm <컨테이너> → 중지·재시작·삭제

컨테이너 기술 발전 과정

Traditional Deployment

하드웨어 위에 OS 설치 후 App 실행에 필요한 Library를 OS에 설치
다양한 서비스를 한 서버에서 운영해야 하는 문제가 발생 (비용 효율성)
서비스간 라이브러리 충돌이 발생함에 까라 서비스간 환경 격리가 요구됨

Virtualized Deployment

Hypervisor: VM(Virtual Machine)을 관리하는 역할을 함
Guest OS(VM)에 하드웨어 자원을 에뮬레이팅을 하다보니 성능 하락이 발생하며, 가상머신을 띄우기 위한 자원의 오버헤드가 발생
Cold Start

Container Deployment

Docker : 대표적인 Container Engine
chroot, namespace 등을 이용한 격리기술 제공
Host Process에서 실행되는 환경이기에 성능하락과 자원 오버헤드 문제에서 벗어남
Cold Start

Kubernetes Deployment

Kubernetes : 대표적인 Container Orchestration System
여러 서버에서 구성된 환경에서 Container를 어떻게 잘 운영할 수 있는지 목적으로 함

virtual Machine vs Docker Container

virtual Machine
성능 손실 발생: 시스템 자원을 가상화하고 독립된 공강을 생성하는 작업(HyperVisor)을 거침
배포가 느려짐: 실행 파일 이외에 Guest OS 등이 추가됨으로써 용량이 큼
Docker Container
성능 손실 없음: 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 구축
배포가 빠름: 실행 파일 및 라이브러리만 필요하여 용량이 적음

Docker Image & Container

도커 이미지와 컨테이너는 1:N 관계
1개의 이미지로 N개의 컨테이너를 만들 수 있다.

Docker Image

컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것
Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작
스택형태로 차곡차곡 쌓임
ubuntu 이미지: Layer A,B,C
nginx 이미지: unbuntu(Layer A,B,C) + nginx Layer
web app 이미지: unbuntu(Layer A,B,C) + nginx Layer+ web app source Layer

정의

읽기 전용 템플릿(스냅샷)으로, 컨테이너 실행에 필요한 애플리케이션 코드·라이브러리·설정 파일을 레이어(layer) 단위로 저장

특징

불변(Immutable): 한 번 빌드된 이미지는 변경되지 않음
레이어 캐시: 변경 없는 레이어는 재빌드하지 않아 빌드 속도 및 저장 효율 증가
공유 가능: 여러 이미지가 동일한 레이어를 참조

주요 명령어

docker build -t <이름>:<태그> . → Dockerfile로 이미지 생성
docker images → 로컬 이미지 목록
docker pull <이미지> / docker push <이미지> → 레지스트리와 동기화

Docker Hub & Docker Registry

Docker Hub : 이미지를 저장하고 관리
많은 회사들이 Docker로 소프트웨어를 배포하기 시작했고 공개이미지들을 공유 가능. Docker Hub를 이용하면 손쉽게 image를 pull 받아 컨테이너에 적용 가능. (사실 GitHub와 동일하게 생각해도 무관함)
Docker Registry : Docker Hub처럼 공개된 방식이 아닌 비공개적으로 격리된 저장소를 구축

Docker Archtecture

Docker Client
사용자 = 우리
도커를 설치하면 그것이 Client며, build, pull, run 등의 도커 명령어를 수행
Docker Host
도커가 띄워져있는 서버를 의미
컨테이너와 이미지를 관리하게 된다.
Docker daemon
도커 엔진
Registry
외부(remote) 이미지 저장소