본문 바로가기
TIL

[Docker] 기초내용 (1) - 이미지, 컨테이너, 구성

by qbinee 2022. 8. 15.

도커의 컨테이너는 이미지를 이용하여 생성한다. 

 

이렇게 이미지를 이용하여 만든 컨테이너는 도커 엔진 위에서는 동일하게 동작한다.

 

이미지란?

이때 컨테이너를 만드는 이미지의 구성을 알아보자

 

애플리케이션 구동에 필요한 코드 또는 바이너리, 런타임, 종속성 및 기타 파일 시스템 개체가 필요하다.

이때 이미지는 호스트 운영체제 (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과 완벽하게 격리, 강력한 보안 경계 필요 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/