능글맞은 구렁이

Docker란? 본문

DevOps/Docker

Docker란?

보라색츄르 2023. 12. 21. 23:29

그전에 컨테이너란?

컨테이너는 표준화된 소프트웨어 유닛이다.

이는 기본적으로 코드 패키지이며 해당 코드를 실행하는데 필요한 종속성과 도구가 모두 포함되어 있다.

(환경설정, 디펜전시, 라이브러리 등등)

즉, 어떤 환경에서나 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지이다.

 

이를 위해 컨테이너는 일종의 운영 체제(OS) 가상화를 활용하는데,

이러한 가상화를 수행할 경우 프로세스를 격리하고 이러한 프로세스가 액세스할 수 있는 CPU, 메모리, 디스크의 양을 제어하기 위해 OS 커널의 특성(예: Linux 네임스페이스 및 cgroup, Windows 사일로 및 작업 오브젝트)을 활용할 수 있다.

컨테이너는 작고 빠르며 이동이 가능하다. 가상 머신과는 달리 컨테이너는 모든 인스턴스에 게스트 OS를 포함할 필요가 없기 때문이다. 그 대신 호스트 OS의 기능과 리소스를 활용한다.

 

 

자 그렇다면 이제 도커란?

도커는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다.  도커를 이용하여 

즉, 위에서 언급한 컨테이터를 쉽게 생성하고 관리할 수 있는 컨테이너 도구이다.

 

 

VM보다 도커를 사용하는 이유는?

가상 머신(Virtual MachineVM) 이란?

가상머신의 방법은 컴퓨터내에 가상머신을 설치하고 그위에 OS를 설치한 뒤 그 안에서 환경별 구성하여 사용한다.

덕분에, 분리된 환경을 생성할 수 있고, 그 안에 환경별 구성을 가질 수 있으며, 모든것을 안정적으로 공유하고 재생산할 수 있다.

하지만! 매번 새로운 컴퓨터를 머신내부에 설치해야하기 때문에 메모리, cpu, 또한 우리 하드 드라이브의 공간을 낭비하게된다.

따라서 vm이 많아지면 성능 저하문제가 생길 수 밖에없다.

 

 

반면 도커를 사용한다면?

도커는 운영체제와 시스템에 미치는 영향이 없다.

최소한의 디스크 공간을 사용하며,  애플리케이션에 필요한 모든 것을 캡슐화한 앱과 환경을 보유하고 있어

공유, 재구축 및 배포하는 것이 매우 쉽다. 

 

우린 개발을 하다보면 "내컴퓨터에선 잘되는데!" 라는 현상이 빈번하다.

하지만 이렇게 가볍고 속도 면에서도 빠른 도커를 사용한다면 이러한 현상을 막을 수 있다.

 

 

 

 도커의 동작 순서는?


크게 컨테이너를 만들고 배포하고 구동한다.


컨테이너를 만들기위해선?

 

1. docker.file: 

   컨테이너를 어떻게 만들어야 하는지 설명서와 같다.
   어플리케이션을 구동하기 위해서 꼭 필요한 파일은 무엇이 잇는지, 어떤 프레임워크나 라이브러리를 설치해야하는지
   외부 디펜전시에 대해서 명시할 수 있으며 환경변수를 설정할 수 있다.
   어떻게 구동해야하는지 script도 포함할수있다.


2.image : 

   파일을 이용하여 이미지를 만들 수 있다.
   이 이미지 안에는 우리 어플리케이션을 실행하는데 필요한

   코드, 런타임환경,시스템툴, 시스템 라이브러리등 모든세팅들이 포함되어있다.
   즉, 실행되고있는 우리 어플리케이션의 상태를 찰칵 스냅샷해서 이미지로 만들어 준다.
   이렇게 만들어진 이미지는 변경이 불가능한 불변의 상태로 볼 수 있다.


3.container 

   컨테이너는 우리가 준비한 어플리케이션을 찰칵 스냅샷한 이미지를 이용해서 어플리케이션을 구동하게 되는것으로

   우리 어플리케이션의 이미지를 고립된 환경에서 개별적인 그 파일 시스템 안에서 실행할 수 잇는 것을말한다.
   컨테이너 안에서 우리 어플리케이션이 동작한다 라고 볼수있다.

 

 

Comments