Docker의 등장 이유
- 구성 요소 배포가 어려움
- 동일 서비스를 여러 서버에 마이그레이션하는 경우
- 서비스 간 상호작용이 많아 전부 설정해줘야 함. (front, back, db 등)
- 동일 서비스에 대해 HW(운영체제)별로 설치 방식이 다를 수 있어 복잡함
도커
- 서비스와 HW 사이에서 규격화된 컨테이너를 제공
- 규격화된 컨테이너로 모든 운영 체제에서 동일한 동작을 보장
- 컨테이너에 모든 종속성이 포함됨
- 동일 호스트의 다른 컨테이너끼리는 OS 커널을 공유하여 가벼움. (VM과의 차이)
VM과의 차이
- 동일한 OS 위에서 돌아가는가?
- VM은 하이퍼바이저 위에서 개별적인 OS를 갖는 머신들이 돌아가므로 무겁다.
- 컨테이너는 하드웨어의 OS 위의 도커 엔진 위에서 돌아가므로 동일한 OS를 공유함. 그러므로 가볍고, 더 많은 가상화가 가능함.
- 추상화가 어디에 집중되어 있는가?
- VM은 하드웨어를 추상화한다. 또 다른 하나의 컴퓨터를 컴퓨터 내부에 띄운 것
- 컨테이너는 애플리케이션을 추상화한다. VM 내부에 애플리케이션 및 OS를 띄울 수 있음에도 VM은 이를 잘 알지 못하지만, 컨테이너는 특정 애플리케이션 및 OS를 띄우기 위해 추상화되는 것
도커 아키텍처
- Client: docker 명령어를 내리는 사용자
- Docker Host
- Docker Daemon: Docker API 요청을 수신, Docker 개체(이미지 등) 관리
- Docker Image: 컨테이너를 만들기 위한 읽기 전용 템플릿
- Docker Container: 실행 가능한 이미지 인스턴스
- Registry: Image, Extension 등 Docker에 관한 것들을 저장함.
도커 이미지
- 계층화된 저장: 레이어를 한 층 쌓고 파일을 수정하면, 쌓아진 레이어는 수정된 부분만을 포함
- 재사용: 공통 레이어는 여러 이미지에서 재사용 가능 (ex. ubuntu 이미지는 한 번만 저장되고 모든 이미지에서 공유)
- 스토리지 관리: 계층을 사용하여 수정된 부분만 저장하는 방식으로 스토리지를 효율적으로 사용
- 빠른 배포 및 확장성: 캐시된 레이어는 다시 다운로드하거나 생성할 필요가 없음.
도커 컨테이너
라이프 사이클
- Created: 생성만 됨
- Running: 프로세스와 함께 실행 중
- Paused: 프로세스가 일시 중지
- Stopped: 프로세스 정지
- Deleted: 죽음
컨테이너 격리
- 동일 ID의 컨테이너가 아니라면, 동일한 이미지로 만든 컨테이너라도 격리됨
도커 네트워크
- 원래는 컨테이너 간 통신이 불가능
- 도커 네트워킹으로 컨테이너, 외부, host 등과 통신 가능
- CNM(Container Network Model)는 다양한 드라이버를 사용하여 컨테이너 네트워크 표준화
- 드라이버를 사용하여 네트워크를 구축 가능
Docker Bridge Networking
- 기본 네트워크 드라이버
- 컨테이너 간 통신을 가능하게 하는 Bridge
- 같은 브릿지에 속한 컨테이너끼리 통신 가능
- 내부 네트워크가 호스트와 격리
- 호스트 내부에서 private 네트워크 생성
- 리소스 분리와 효율적 관리를 위해 설계
Docker Host Networking
- 컨테이너가 호스트의 네트워크 인터페이스를 직접 사용 (격리 X)
- 내부 네트워크가 호스트의 IP 주소를 사용하기 때문에 포트 포워딩이 필요 없음
- 네트워크 오버헤드 감소로 성능 최적화
- 네트워크 구성이 간소화되어 관리가 편함
- private 내부 네트워크가 존재하지 않으므로 보안을 고려해야 함.
- 단순하거나 빠른 네트워크가 필요하면 사용
Docker Overlay Networking
- 다중 호스트 네트워크
- 가상의 네트워크 레이어(overlay)를 통해 IP주소가 다른 host들끼리도 통신이 가능
- 대규모 클러스터 환경에서 컨테이너 네트워크 확장 가능
- 호스트 별로 격리된 네트워크 환경
- 자동 IP 할당 및 관리를 통해 네트워크 관리 간소화
- DNS 간 서비스 검색 기능 제공으로 컨테이너 간 통신 용이
- 데이터 전송에 암호화 제공
도커 스토리지
- 컨테이너가 생성될 때 이미지 상단에 읽기-쓰기 레이어가 추가됨
- 컨테이너가 실행 중인 상태에서 생성되는 모든 데이터는 해당 레이어에 저장되지만, 휘발성을 띰.
- 도커 볼륨을 사용하여 영구적으로 보관 가능
- Docker Volume, Docker Bind Mount, tmpfs Mounts 등의 타입 존재
Docker Volume
- 도커가 관리하는 볼륨
- 도커 엔진에 의해 자동 생성
- 데이터 백업 및 마이그레이션에 적합
- 호스트 파일 시스템의 구체적 위치를 몰라도 됨
Docker Bind Mount
- 호스트 시스템의 특정 파일, 디렉토리를 컨테이너에 마운트 (마치 USB)
- 개발 과정에서 변동된 데이터를 컨테이너에 실시간으로 반영하는 등의 용도로 사용됨
- 호스트 파일 시스템의 경로를 명시적으로 지정해야 함.
tmpfs Mounts
- 호스트의 메모리에 컨테이너 데이터를 저장하는 마운트
- 컨테이너가 종료되면 데이터 삭제
- 민감한 정보를 임시로 저장하거나, 디스크 I/O를 줄이고 싶을 때 사용
Docker Compose
- 여러 컨테이너를 정의하고 실행하기 위한 도구
- docker-compose.yml 파일을 사용하여 서비스, 네트워크, 볼륨, 컨테이너 간 관계를 정의하고 관리
- 단일 명령어로 여러 컨테이너 기반의 애플리케이션 구축 가능
'GitOps > Docker' 카테고리의 다른 글
[Docker] 도커 네트워크 (0) | 2025.01.12 |
---|---|
[Docker] 웹사이트 배포 (0) | 2025.01.12 |
[Docker] 이미지 (0) | 2025.01.11 |
[Docker] 컨테이너 (0) | 2025.01.10 |