정의
- 애플리케이션을 신속하게 구축, 테스트, 배포할 수 있는 소프트웨어 플랫폼
- 컨테이너라는 표준화된 유닛으로 소프트웨어를 패키징
- 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어 실행에 필요한 모든 것을 포함
- Docker 사용시 환경에 구애받지 않고 애플리케이션을 신속하게 배포/확장하고 코드가 문제없이 실행됨을 보장
사용하는 이유
- Docker는 DevOps 및 개발자에게 도움되도록 설계된 개방형 애플리케이션 개발 프레임워크
- 개발자
- Docker를 사용하여 경량의 휴대 가능한 자립형 컨테이너로 애플리케이션을 쉽게 빌드/패키징/배송/실행
- 운영체제/배포 시스템 등을 걱정하지 않고 애플리케이션 코드에만 집중하면서 사용 가능
- 오픈소스 컨테이너 애플리케이션 활용 가능
- DevOps
- 지속적인 통합(CI) 및 개발 도구 체인에 적합
- 애플리케이션 배포/관리를 위한 시스템 아키텍처 내에서 필요한 제약/복잡성을 줄임
- 애플리케이션이 실행되는 환경설정 등을 생략할 수 있음 - Kubernetes와 같은 서비스를 통해 프로덕션에서 컨테이너화된 애플리케이션을 이동/실행 가능
Kubernetes
- Docker 컨테이너 및 워크로드를 실행할 수 있는 오픈소스 오케스트레이션 시스템
- 수백 개의 컨테이너 조정/확장/관리/예약
- 여러 서버에 배포된 여러 컨테이너를 확장하기 위해 이동할 때 운영 복잡성 관리에 도움이 됨
- 수요에 따라 빠르게 리소스 확장/축소
- 컨테이너 상태를 지속적으로 프로비저닝/예약/삭제/모니터링
Docker 기본 사항
- 핵심 개념은 2가지
- 이미지
- 컨테이너 - Docker 이미지
- 소프트웨어를 실행하는 데 필요한 모든 것을 포함
- 코드
- 런타임(JVM)
- 드라이버
- 도구
- 스크립트
- 라이브러리
- 배포
- Docker 컨테이너
- 실행 중인 Docker 이미지 인스턴스
격리와 가상화
- Docker 컨테이너의 특징 (namespace / cgroup)
- 저수준 컨테이너 런타임 (Low-level Container Runtime)
- namespace
- 자체 파일 시스템
- 자체 네트워크 스택
- 자체 프로세스 공간
- cgroup
- 컨테이너가 사용하는 CPU/메모리 등 리소스 사용량을 제한
- 격리
- 가상화와 달리 Host OS의 리소스를 분리
- Host OS 위에 Guest OS를 제공
유니온 파일 시스템
- 하나의 이미지에서 하나 이상의 컨테이너를 실행
- 컨테이너는 Read-only인 이미지에 대해 Read-Write인 변경사항을 따로 저장
Docker Registry
- 수천 개의 Docker 이미지를 관리하는 것은 어려움
- Docker Registry는 Docker 이미지를 저장/배포하는 표준 방법
- 또한 리포지토리에 저장된 이미지의 액세스 제어/보안 개선
궁금했던 점
Container에 OS이미지가 추가되면 VM과 다른 게 있을까?
- Docker Container는 리눅스 위에서만 동작한다고 함
- Container에는 경량화 리눅스(Alpine)가 들어감
- 이 때 커널은 포함되지 않고, Host OS와 다른 부분만 Container에 들어감
https://aws.amazon.com/ko/docker/
https://www.oracle.com/kr/cloud-native/container-registry/what-is-docker/
https://www.samsungsds.com/kr/insights/docker.html
https://www.joinc.co.kr/w/man/12/docker/InfrastructureForDocker/storage
https://mosei.tistory.com/entry/Docker-Container%EC%9D%98-OS-vs-VM%EC%9D%98-OS?category=1144912
'데이터 엔지니어링 > Docker' 카테고리의 다른 글
[Docker] Container의 Lightweight (컨테이너가 가벼운 이유) (0) | 2022.07.14 |
---|---|
[Docker] Docker Daemon (dockerd) (0) | 2022.07.14 |
[Docker] Docker 정리 (정의/아키텍쳐) (0) | 2022.07.12 |
[Docker] 윈도우 docker 설치 (0) | 2022.06.16 |
[Docker] 명령어 모음 (0) | 2022.05.13 |