개발, 배송 및 배포를 위해 소프트웨어를 표준화 된 단위로 패키지화함.
컨테이너는 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 애플리케이션이 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키지화하는 소프트웨어의 표준 단위이다. Docker 컨테이너 이미지는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등)을 포함하는 가볍고, 독립적이고, 실행 형인 소프트웨어 패키지이다.
container images는 런타임에 containers가 되는데, docker에서는 container images가 도커 엔진에서 실행(런타임)될 때 containers가 된다. Linux 및 Windows 기반 애플리케이션 모두에서 사용할 수있는 컨테이너화 된 소프트웨어는 인프라에 관계없이 항상 동일하게 실행된다. 개발과 staging 간이 서로 다름에도 불구하고, 컨테이너들은 소프트웨어를 각 환경에서 격리하고 균일하게 작동하는지 확인한다.
도커엔진에서 실행되는 도커 컨테이너:
💥 결론 : 도커는 어떤 운영체제에서든 사용할 수 있고, 가볍고, 보안이 철저하다!
LINUX/WINDOWS/DATA CENTER/CLOUD/SERVERLESS,ETC.
Docker 컨테이너 기술은 2013년에 오픈 소스 Docker Engine 으로 출시되었습니다 .
컨테이너 주변의 기존 컴퓨팅 개념을 활용했으며, 특히 리눅스 세계에서는 cgroup 및 namespace로 알려진 원시 개념을 활용했다. 또한 Docker의 기술은 독특하다. 인프라에서 애플리케이션 종속성을 분리하려는 개발자와 시스템 운영자의 요구 사항에 초점을 맞추기 때문에이다.
Linux 세계에서의 성공은 Microsoft와의 파트너십을 이끌었고, Docker 컨테이너와 기능들을 Windows Server로 가져왔다. (Docker Windows containers 로 불리기도 함)
Docker 및 오픈 소스 프로젝트에서 제공되는 기술 Moby는 모든 주요 데이터 센터 공급 업체 및 클라우드 제공 업체에서 활용되었고, 이러한 제공 업체 중 다수는 도커 컨테이너를 네이티브 IaaS 제품으로 활용하고 있다. 또한 선도하고 있는 오픈 소스 서버리스 프레임 워크들은 Docker 컨테이너 기술을 활용한다.
컨테이너와 가상 머신은 서로 비슷한 리소스 격리(resource isolation)와 배분 이점(allocation benefits)을 갖지만, 컨테이너가 하드웨어 대신 운영 체제를 가상화하기 때문에 기능이 서로 다르다. 컨테이너가 이동이 더 쉽고 더 효율적이다.
컨테이너(Containers)
컨테이너는 코드와 종속성을 함께 패키징하는 앱 층에서의 추상이다. 여러 컨테이너가 동일한 시스템에서 실행되고 OS 커널을 다른 컨테이너와 공유 할 수 있으며, 각 컨테이너는 사용자 공간에서 격리 된 프로세스로 실행된다. 컨테이너는 VM보다 적은 공간을 차지하고 (컨테이너 이미지는 일반적으로 수십 MB 크기) 더 많은 애플리케이션을 처리 할 수 있으며, 더 적은 수의 가상머신들과 운영 체제들을 다룬다.
가상 머신(Virtual Machines)
가상 머신 (VMs)은 하나의 서버를 여러 서버로 바꾸는 물리적인 하드웨어의 추상이다. Hypervisor를 사용하면 하나의 머신에서 여러 VM을 실행할 수 있다. 각 VM에는 운영 체제, 애플리케이션, 필요한 바이너리 및 라이브러리의 전체 사본이 포함되며 수십 GB를 차지한다. VM은 부팅 속도가 느릴 수도 있다.
컨테이너와 가상머신을 같이 사용하면 앱 배포 및 관리에 상당한 유연성을 제공한다.