운영체제

Docker & 가상화

rnrwk0502 2024. 9. 13. 01:50

도커란 ?
애플리케이션을 패키징할 수 있는 툴,
컨테이너라고 불리는 하나의 작은 소프트웨어 유닛 안에 어플리케이션과 그에 필요한 시스템 툴, 
환경설정, 모든 Dependencies를 하나로 묶어서 다른 서버, 다른 pc 그 어떤 곳에도 쉽게 배포하고
안정적으로 구동할 수 있게 도와주는 툴
->어플리케이션이 구동하는데 필요한 모든 것들을 도커 컨테이너에 담아놨다고 볼 수 있다.

VM vs 컨테이너(도커)
 VM는 하드웨어 Infrastructure 위에 vmware나 VirtualBox와 같은 이런 Hypervisor 소프트웨어를 
이용해서 각각의 가상의 머신을 만들 수 있다. 한 운영체제 위에서 동일한 어플리케이션을 각각의 
고립된 다른 환경에서 구동하기 위해서는 이 VM을 이용해서 어플리케이션을 구동해야 했다.
 VM은 각각의 운영체제를 포함하고 있기 때문에 맥os에서 VM을 이용하면 윈도우와 리눅스를 
동시에 구동할 수 있다.
 이렇게 고립된 환경에서 어플리케이션을 구동하기 위해서 VM을 사용하면 운영체제를 포함하고 
있기 때문에 굉장히 무겁고, 시작하는 시간도 오래걸리고, 또 컴퓨터 운영체제 Infrastructure의 
리소스를 많이 잡아먹는 범인이 될 수 있다.

컨테이너
 vm에서 조금 경량화된 컨셉이 컨테이너이다. 
 컨테이너는 하드웨어에 설치된 운영체제, 즉 Host OS에서 컨테이너 엔진이라는 소프트웨어를 
설치만 하면 개별적인 컨테이너를 만들어서 각각의 어플리케이션을 고립된 환경에서 구동할 수 
있게 해준다. 
 컨테이너는 OS를 포함하지 않고 컨테이너 엔진이 설치된 Host OS를 공유한다. 컨테이너 엔진 중에 
제일 많이 이용되는 것이 도커이다.

도커는 컨테이너를 만들고 배포하고 구동한다라고 이해하면 된다.
 컨테이너를 만들기 위해서는 총 3가지가 필요하다. 
 먼저 도커파일을 만들어야 한다. 도커파일을 이용해서 이미지를 만들어서 컨테이너를 구동할 수 
있다. 도커파일은 컨테이너를 어떻게 만들어야 하는지 설명서 또는 레시피와 같다. 어플리케이션을 
구동하기 위해서 꼭 필요한 파일들은 무엇이 있는지, 어떤 프레임워크나 라이브러리를 설치해야 
하는지, 외부 Dependency에 대해서 명시할 수 있다. 그리고 필요한 환경 변수에 대해서 설정할 수
있고 어떻게 구동해야 하는지 스크립트도 포함할 수 있다.

 이런 도커파일을 이용해 만든 이미지 안에는 어플리케이션을 실행하는데 필요한 코드, 런타임 환경, 시스템 툴, 시스템 라이브러리 모든 세팅들이 포함되어 있다. 한마디로 말하면 실행되고 있는 어플리케이션의 상태를 캡쳐해서 이미지로 만들어 둔다라고 생각하면 된다.
 이렇게 만들어진 이미지는 변경이 불가능한 불변의 상태로 볼 수 있다.

 컨테이너는 샌드박스처럼 어플리케이션의 이미지를 고립된 환경에서 개별적인 파일 시스템 안에서
실행할 수 있는 것을 말한다.
 컨테이너 안에서 어플리케이션이 동작한다라고 볼 수 있다. 만든 이미지를 이용해 컨테이너는 어플리케이션을 구동할 수 있다. 이미지는 우리가 캡쳐했을 당시 그 프로젝트 상태를 불변의 상태로
가지고 있고 컨테이너에서 구동되는 어플리케이션은 파일도 만들 수 있고, 수정할 수도 있고 개별적으로 설정이 가능한 상태라고 볼 수 있다. 각각의 컨테이너에서 수정된 부분은 이미지에 전혀 영향을 
끼치지 않는다.
 즉, 이미지는 클래스, 각각의 컨테이너는 인스턴스라고 볼 수 있다.


컨테이너 배포 방법 & 이미지 공유방법

 내 로컬 머신에서 이미지를 만들어서 컨테이너 레지스트리라는 곳에 내가 만든 이미지를 Push를 
하고 필요한 서버나 다른 개발자 pc에서 내가 만들어둔 이미지를 가지고 와서 그걸 그대로 실행하면
된다. 물론 이미지를 정상적으로 실행하기 위해서는 도커와 같은 컨테이너 엔진을 꼭 설치해두어야 
한다. 
 컨테이너 레지스트리는 Public과 Private이 있다. 

0. 로컬 머신과 서버에 도커를 설치한다.
1. 도커파일을 작성하고, 이를 이용해서 이미지를 만든다.
2. 이미지를 컨테이너 레지스트리에 올린다.
3. 서버는 컨테이너 레지스트리에서 이미지를 다운받아서 컨테이너를 실행할 수 있다. 

 

 

 

편집/수정/추가 예정

 

출처

https://www.youtube.com/watch?v=LXJhA3VWXFA