공식 문서 : https://docs.docker.com/get-started/overview/
Docker overview
docs.docker.com
Docker란?
컨테이너 기술을 기반으로 한 오픈소스 가상화 플랫폼
Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술
Docker는 Go 프로그래밍 언어 로 작성되었으며 Linux 커널의 여러 기능을 활용하여 기능을 제공
어플리케이션과 그에 필요한 시스템 툴, 환경설정, 모든 디펜던시를 묶어 다른 곳에 쉽게 배포하고 문제 없이 구동 될 수 있게 함
컨테이너: 운영체제 수준의 가상화 기술로 리눅스 커널을 공유 하며 프로세스를 격리된 환경에서 실행하는 기술
Virtual Machine과 차이
Virtual Machine
- Guest OS는 완전히 독립된 공간과 시스템을 자원을 할당 받아 사용
- Hypervisor를 거쳐서 실행함으로 Host OS보다 성능 저하 발생
- 가상머신 배포시 운영체제를 포함한 라이브러리, 커널 등을 포함하기에 이미지의 크기가 커짐
Docker
- Linux의 자체 기능(chroot, namespace, cgroup)을 이용하여 프로세스 단위의 격리 환경을 생성 (성능 저하 거의 없음)
- 필요한 커널은 공유, 컨테이너 내에는 어플리케이션 구동에 필요한 라이브러리 및 실행 파일만 존재 (이미지의 용량이 작음)
목록 | Hypervisor 가상화 | Container형 가상화 |
격리 수준 | 하드웨어 | 운영체제 |
데이터 | VM 내부 또는 연결된 스토리지에 저장 | Container 내부 데이터는 종료 시 소멸, 필요에 따라 스토리지 사용 가능 |
유지 관리 | 개별적으로 업데이트 필요 | Host OS만 업데이트 |
Docker 장점
- 운영체제 수준의 가상화
- 빠른 속도와 효율성
- 높은 이식성(=확장성)
- Host OS 상관 없이 Docker Engine만 있으면 배포 가능
- 롤백 : 모든 이미지에는 계층이 존재, 이전 버전으로 롤백 가능
Docker architecture
Docker Host
Docker가 띄워져있는 서버이며 컨테이너와 이미지를 관리
The Docker daemon
Docker API 요청 수신, Docker object (image, container, network, volume) 관리
다른 데몬들과 통신하여 Docker 서비스 관리
The Docker client
사용자가 Docker 실행 명령어를 이용하는 곳, 명령어를 이용하면 dockerd(daemon)으로 명령어 전송 (Docker command는 Docker API 이용)
Docker client는 여러 데몬과 통신 가능
Docker Desktop (https://docs.docker.com/desktop/)
사용자 UI 제공 및 Docker 편의 기능 포함 (Docker daemon (dockerd), Docker client (docker), Docker Compose, Docker Content Trust, Kubernetes, and Credential Helper...)
Docker registries
Docker 레지스트리는 Docker 이미지 저장소 (public과 private 있음)
Docker Hub는 누구나 사용할 수 있는 공개 레지스트리이며 Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성되어 있음
개인 레지스트리를 실행할 수도 있음
`docker pull` 또는 `docker run`(가져온 이미지를 이용하여 컨테이너 생성) 명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가지고 옴
`docker push` 명령 을 사용하면 이미지가 구성된 레지스트리로 push
Docker objects
Images
- Docker 컨테이너 생성 지침이 포함된 읽기 전용 템플릿 (개인 이미지 생성 가능, 타 사용자가 생성한 이미지 사용 가능)
- 이미지 빌드를 위해서는 Dockerfile(이미지 생성 및 실행 시 필요한 단계를 정의한 구문) 생성
- Dockerfile의 각 명령어는 이미지에 레이어를 만듦
- Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드됨(다른 가상화 기술과 비교할 때 이미지를 매우 가볍고 작고 빠름)
Containers
- 이미지 실행 가능한 인스턴스
- Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있음
- 현재 상태를 기반으로 새 이미지를 생성할 수 있음 (컨테이너를 하나 이상의 네트워크에 연결하거나 스토리지를 연결하는 등)
- 다른 컨테이너 또는 호스트 시스템과 얼마나 격리할지 제어할 수 있음 (컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템 등)
- 컨테이너는 생성 및 시작 시 구성 옵션과 이미지를 이용함
- 컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태 변경 사항이 모두 제거 됨
Docker 사용 예시
참고 URL
https://docs.docker.com/get-started/overview/
https://seosh817.tistory.com/345
https://youtu.be/LXJhA3VWXFA
https://techblog.lotteon.com/docker%EB%A5%BC-%EC%99%9C-%EC%8D%A8%EC%95%BC%EB%90%98%EB%8A%94%EA%B0%80-2310117b4dea
'DevOps' 카테고리의 다른 글
Docker Compose (0) | 2023.04.10 |
---|---|
Docker Desktop 설치 및 사용 (0) | 2023.04.04 |