Docker
- 클라우드 또는 온-프레미스로 실행될 수 있는 컨테이너로서, 애플리케이션 배포를 자동화하기 위한 오픈 소스 프로젝트
- 컨테이너를 위한 운영체제
컨테이너화
애플리케이션 또는 서비스의 구성이 컨테이너 이미지로 패키지되는 소프트웨어 개발 방법
컨테이너화된 애플리케이션은 하나의 단위로 테스트하고 컨테이너 이미지 인스턴스로 호스트 OS(운영 체제)에 배포할 수 있습니다.
컨테이너
Docker 이미지의 인스턴스로 컨테이너는 단일 애플리케이션, 프로세스 또는 서비스의 실행을 나타냅니다.
- 특정 이미지 기반으로 실행된 격리된 프로세스
컨테이너 이미지
컨테이너를 만드는 데 필요한 모든 종속성 및 정보를 포함한 패키지
이미지에는 모든 종속성(예: 프레임워크) 및 컨테이너 런타임에서 사용할 배포 및 실행 구성이 포함됩니다. 일반적으로 이미지는 컨테이너의 파일 시스템을 구성하기 위해 계층으로 서로 포개진 여러 개의 기본 이미지에서 파생됩니다. 이미지를 만들면 변경할 수 없습니다.
- 실행파일, 라이브러리, 소스 등으로 구성된 특정 어플리케이션이 실행 가능한 고유의 환경
Docker 컨테이너와 가상 머신 비교
가상 컴퓨터
애플리케이션, 필수 라이브러리 또는 바이너리 및 전체 게스트 운영 체제가 포함됩니다. 전체 가상화를 위해서는 컨테이너화보다 더 많은 리소스가 필요합니다.
Docker 컨테이너
애플리케이션과 모든 종속성이 포함됩니다. 그러나 컨테이너는 호스트 운영 체제의 사용자 공간에 있는 격리 프로세스로 실행 중인 다른 컨테이너와 OS 커널을 공유합니다. 컨테이너는 훨씬 적은 리소스를 필요로 하므로(예: 전체 OS가 필요하지 않음) 보다 쉽고 빠르게 배포할 수 있습니다. 따라서 밀도가 높아지고, 이는 동일한 하드웨어 장치에서 더 많은 서비스를 실행할 수 있어 비용을 절감할 수 있음을 의미합니다
Docker의 이점
모듈성
Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어 있습니다. 사용자는 이 마이크로서비스 기반 접근 방식 외에도 SOA(service-oriented architecture)의 작동 방식과 동일하게 멀티플 애플리케이션 사이에서 프로세스를 공유할 수 있습니다.
계층 및 이미지 버전 제어
각 Docker 이미지 파일은 일련의 계층으로 이루어져 있으며 이 계층들은 단일 이미지로 결합됩니다. 이미지가 변경될 때 계층이 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성됩니다.
Docker는 새로운 컨테이너를 구축할 때 이러한 계층을 재사용하므로 구축 프로세스가 훨씬 더 빨라집니다. 중간 변경 사항이 이미지 사이에서 공유되므로 속도, 규모, 효율성이 더 개선됩니다. 계층화에는 버전 관리가 내재되어 있으며 새로운 변경 사항이 발생할 때마다 내장 변경 로그가 기본적으로 적용되므로 컨테이너 이미지를 완전히 제어할 수 있습니다.
롤백
계층화에서 가장 유용한 부분은 아마도 롤백 기능일 것입니다. 모든 이미지에는 계층이 있으며, 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 됩니다. 이 기능은 애자일(agile) 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적인 통합 및 연속 배포(Continuous Integration and Deployment, CI/CD)를 수행하는 데 도움을 줍니다.
신속한 배포
새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 일반적으로 며칠이 소요되었습니다. 많은 노력과 부가적인 업무가 필요하므로 부담도 상당했습니다. Docker 기반 컨테이너는 배포 시간을 몇 초로 단축할 수 있습니다. 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있습니다. 또한, 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축됩니다. 이뿐만 아니라 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있고 사용자는 우려를 할 필요가 없습니다.
docs.microsoft.com/ko-kr/dotnet/architecture/microservices/container-docker-introduction/
www.redhat.com/ko/topics/containers/what-is-docker
'IT' 카테고리의 다른 글
/bin/bash^M: bad interpreter: No such file or directory 해결 방법 (1) | 2021.06.25 |
---|---|
[MSA] 환경 배포 전략 (0) | 2021.06.21 |
[docker] 명령어 정리 (0) | 2021.06.21 |