도커의 컨테이너는 이미지를 이용하여 생성한다.
이렇게 이미지를 이용하여 만든 컨테이너는 도커 엔진 위에서는 동일하게 동작한다.
이미지란?
이때 컨테이너를 만드는 이미지의 구성을 알아보자
애플리케이션 구동에 필요한 코드 또는 바이너리, 런타임, 종속성 및 기타 파일 시스템 개체가 필요하다.
이때 이미지는 호스트 운영체제 (OS) 커널에 의존한다.
이 말은 만약 웹 서버 이미지 빌드시에는 Ubuntu Linux(기본 OS)가 포함된 이미지로 시작한다.
이후 php, apache 같은 패키지를 올린다.
물론 수동으로 구성이 가능하지만, 빌드/배포 를 동시하는 CI/CD 환경을 이용하여 도커설정파일(Dockerfile) 생성 가능하다.
근데 한번 생성된 이미지는 변경이 불가하다. 만약 변경하고 싶다면 변경 내용으로 다른 컨테이너를 만든 후 해당 컨테이너를 이용하여 다른 이미지로 저장해야한다.
이미지는 태그로 구분 가능하다 ( 그러나 각 태그는 고유하다 )
컨테이너란?
시스템과 애플리케이션이 서로 영향을 줄 수 없는 애플리케이션이 격리된 장소이다.
격리되었다는 특징으로 민감한 리소스를 가진 어플리케이션인 경우에는 엑세스 권한을 나눔으로써 안전하게 실행하게 할 수 있다.
컨테이너를 리눅스에서 실행된다.
Host 시스템 커널을 공유하여 다른 실행 파일보다 더 많은 메모리를 사용하지 않고 가볍다.
이미지 vs 컨테이너 명확한 차이점은?
이미지는 환경의 스냅샷
컨테이너는 소프트웨어를 실행하는 것
두가지모두 애플리케이션 종속성과 구성을 지정하고 애플리케이션이 구동할 수 있게 설명한다,
도커를 구성하는 컴포넌트
Docker Engine : 이미지 생성 , 컨테이너 실행
Docker Swarm: 여러 도커 호스트를 master , node 구조로 클러스터화 하는 툴. 쿠버네티스와 비슷
Docker Compose: 여러 컨테이너 관리
Docker Machine: 로컬의 VirtualBox 나 퍼블릭 클라우드에 도커 실행 환경 구축하는 툴
Docker Registry : 도커 이미지 공개 및 공유 ( 도커 허브가 이용하는것 )
Kitematic : Docker 설치 및 설정 프로세스를 자동화하고 Docker 컨테이너 실행을 위한 직관적인 GUI(그래픽 사용자 인터페이스)를 제공
도커와 가상화 기술의 차이
컨테이너는 사용자 모드에서 실행되는 앱과 간단한 운영체제 API 및 서비스만 포함된다.
커널을 포함한 완전한 운영체제
그렇다면 어떤 경우에 어떤걸 사용하는지?
기능 | 가상머신 | 컨테이너 |
격리 | 기타 VM과 완벽하게 격리, 강력한 보안 경계 필요 | VM에 비하여 느슨, 그러나 Hyper-V를 이용하여 vm의 각 컨테이너를 분리하는 방식으로 보안 높이는것이 가능하다 |
운영체제 | 완전한 운영체제 실행 ( 커널 포함 ) 따라서 더 많은 시스템 리소스가 필요하다 | 운영체제의 사용자 모드 부분을 실행하며, 앱에 필요한 서비스만 포함하도록 조정하여 시스템 리소스 사용을 줄일수 있다. |
게스트 호환성 | 가상머신 내의 운영체제 내부에서만 실행 | 호스트와 동일한 운영체제 버전에서 실행 |
배포 | Windows Admin Center 또는 Hyper-V 관리자를 사용하여 개별 VM을 배포합니다. PowerShell 또는 System Center Virtual Machine Manager를 사용하여 여러 VM을 배포합니다. | 명령줄을 통해 Docker를 사용하여 개별 컨테이너를 배포합니다. Azure Kubernetes Service 같은 오케스트레이터를 사용하여 여러 컨테이너를 배포합니다. |
운영체제 업데이트 및 업그레이드 | 가상머신위에 업데이트를 다운로드. 완전히 새 운영체제 다운로드시에는 새 VM 만들어야한다. | 1. 최신버전의 운영체제 기본이미지를 가리키는 빌드 파일을 편집 2. .. |
참고 블로그
https://futurecreator.github.io/2018/11/16/docker-container-basics/
'TIL' 카테고리의 다른 글
[Docker] 개발중인 Django Postgresql 프로젝트에 Dockerfile 생성 및 docker-compose 적용하기 (0) | 2022.08.25 |
---|---|
[Docker] 실습 :: 이미지 생성 (0) | 2022.08.19 |
[Docker] Basic - Docker 기본 정리 (0) | 2022.07.03 |
[git Error] There isn’t anything to compare.main and master are entirely different commit histories. (0) | 2022.07.02 |
[TIL] Unit Testing 1,2장 (0) | 2022.05.26 |