도커 란?
: 리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키징 하고 배포하는 오픈소스 프로그램
※ 컨테이너
: 소프트웨어의 가상화를 지원하는 시스템
: 컨테이너 런타임 위에 게스트 OS 없이 응용 프로그램을 올리는 방식
: 하드웨어와 운영체제에 대해 논리적인 가상화를 거치는 가상머신에 비해 가벼움
=> 사용할 프로그램에 대해서만 가상화
※ 컨테이너 VS 가상머신
: 별도의 가상화된 OS와 하드웨어 없이 도커 이미지 파일 실행을 통해
하나의 프로그램 처럼 가상환경을 구동
: 플랫폼에 상관없이 JAVA 프로그램이 작동하도록 하는 JVM처럼
도커 엔진이라는 런타임 위에서 컨테이너라는 가상환경을 작동하는 방식
도커의 작동 방식
1. 호스트 운영체제에 도커 설치
2. 도커 파일 작성
: 이미지를 다운로드 하고 이미지를 컨테이너로 생성하여 실행가능
3. 작성한 도커 파일을 도커 이미지로 빌드
4. 빌드한 도커 이미지 파일을 컨테이너로 생성하여 실행
도커의 장점
: 충돌 염려 없이 애플리케이션의 독립성을 보장할 수 있음
: 애플리케이션의 구동 환경을 도커 이미지 파일에 설정하여 운영서버에 전달하면 간단하게 배포 가능
: 컨테이너 당 하나의 기능만 제공하는 모듈로 만들면 MSA를 쉽게 구성 가능
도커의 활용
: Jenkins와 같은 CI툴을 통해 이미지를 빌드하고 버전별로 관리
: 도커로 생성한 이미지를 통해 CD를 하여 지속적으로 배포 가능
: Amazon Elastic Container Service / MS Azure Container Instances / GCP Kubernetes Engine
도커를 구성하고 있는 컴포넌트
ㆍDocker Engine
: 도커 이미지를 생성하고 컨테이너를 실행하는 핵심 컴포넌트
ㆍDocker Registry
: 도커 이미지 공개 및 공유. 도커 허브의 핵심 컴포넌트
ㆍDocker Compose
: 여러 컨테이너를 실행하고 관리하기 위한 툴
ㆍDocker Machine
: 로컬의 가상머신이나 퍼블릭 클라우드에서 도커 실행 환경을 구축하는 툴
ㆍDocker Swarm
: 여러 도커 호스트를 클러스터링 하여 컨테이너를 관리하는 컨테이너 오케스트레이션
도커를 이루는 기술
ㆍnamespace
: 내부에 존재하는 요소들을 구분하기 위한 식별자에 대한 유효범위
: 도커에서는 리눅스 커널의 namespace를 이용하여 작동
: 리눅스에는 PID / Network / UID / MOUNT / UTS / IPC 와 같은 네임스페이스가 있음
ㆍcgroups (Control Groups)
: 리눅스에서 프로세스와 쓰레드를 그룹화해서 관리하는 기술
: 호스트OS의 자원을 그룹별로 할당하거나 제한을 두는 등의 관리
: 컨테이너에서 사용하는 리소스를 제한하여 리소스 관리하는데 사용
: cpu / cpuacct (사용량) / cpuset (cpu및 메모리 배치제어) / memory / devices /
freezer (그룹 내 프로세스 정지 및 재개) / net_cls (네트워크 제어) / blkio (블록 디바이스 입출력량 제어)
컨테이너 네트워크 구성
: 컨테이너가 실행되면 172.17.0.0/16 이라는 프라이빗IP 주소가 eth0에 할당됨
ㆍdocker0
: 172.17.0.0/16라는 주소를 가지는 네트워크 브릿지
: 각 컨테이너의 NIC인 eth0에 가상 NIC인 veth를 할당하여 연결
: 외부의 요청을 컨테이너로 라우팅
ㆍNAPT (Network Address Port Translation)
: 컨테이너와 외부 네트워크가 통신하기 위한 기술
: NAT와 달리 포트 정보까지 활용하여 여러 대의 머신을 연결
컨테이너의 데이터 관리 방법
ㆍvolumes
: 호스트의 파일 시스템 내 특정영역 (/var/lib/docker/volumes/)를 도커가 관리하고 사용하는 방법
: 도커가 아닌 다른 프로세스에서는 접근 불가한 영역
ㆍBind mounts
: 호스트의 파일 시스템 자체를 사용하는 방법
: 중요한 시스템 파일이나 디렉터리에 접근 가능
: 호스트와 컨테이너가 설정 파일을 공유하거나 호스트에서 개발하고 컨테이너로 배포하는 방식으로 사용
ㆍtmpfs mounts
: 호스트의 메모리에 저장하는 방식
: 파일 시스템 대신 사용할때 사용
도커 이미지 레이어
: 도커 이미지는 Docker file로 만들어진 여러 레이어로 구성됨
: 각 레이어는 Read-Only
ㆍContainer Layer
: 이미지로 컨테이너를 생성할 때 임시적으로 생성되는 읽고 쓸 수 있는 컨테이너 레이어
: 컨테이너 내에서 작업한 사항을 commit 했을때에도 사용
도커의 파일 관리
ㆍCopy on Write
: 도커의 파일 관리 방식으로, 읽기 시 기존 파일을 참조하고 수정 시에만 파일을 Container Layer로 복사하여
수정하는 방법
: 필요한 경우에만 복사가 되므로 데이터 중복이 없고 효율적으로 사용 가능
ㆍStorage Driver
: 도커에서 레이어와 파일을 관리하기 위해 사용하는 드라이버
: 운영체제 별로 상이
: 참조 (https://docs.docker.com/storage/storagedriver/select-storage-driver/)
도커 에디션 및 릴리즈
ㆍDocker Community Edition (Docker CE)
: 도커 무료버전
: Edge 버전 (매달 업데이트 되는 새로운 기능을 먼저 사용할 수 있는 버전)
: Stable 버전 (분기별로 릴리즈 되는 안정적인 버전)
ㆍDocker Enterprise Edition (Docker EE)
: 도커의 유료버전
: 고객 지원 및 보안, 플러그인 추가 기능 제공
: CE와 같이 stable 버전이 배포됨
Refference
'Container > Docker' 카테고리의 다른 글
도커 애플리케이션 실행 (컨테이너로 애플리케이션 실행) (0) | 2021.08.23 |
---|---|
도커 컨테이너 포트포워딩 (0) | 2021.08.23 |
도커 이미지 및 컨테이너 기초 [docker 기초] (0) | 2021.08.22 |
도커 주요 명령어 모음 (0) | 2021.08.22 |
레드햇 리눅스에 도커 설치 (Docker install on Redhat Linux) (0) | 2021.08.19 |