본문 바로가기

[Tool]/[Docker]

[Docker] 도커 개념

728x90
반응형

Docker

어플리케이션(Application)을 패키징(Packaging)할 수 있는 툴


컨테이너(Container)라는 하나의 작은 소프트웨어 유닛 안에 어플리케이션(Application)과 그에 필요한 시스템 툴(System Tools), 모든 디펜던시(Dependencies)를 하나로 묶어서 다른 서버, PC 등에 쉽게 배포하고 안정적으로 구동할 수 있게 도와준다.
기술이 발전함에 따라 어플리케이션을 구동하는 데 많은 것이 필요해졌다.
이때 도커 컨테이너를 사용해서 어플리케이션을 구동하기 위해 필요한 모든 것을 어떤 PC에서도 언제든 동일하게 구동할 수 있다.

내 로컬 PC 환경에서 잘 동작 하는 것을 서버에서도 같은 환경으로 동작하게 함으로써 매번 설정을 셋팅해야 하는 번거로움을 해결해 주는 유용한 패키징 트리라고 볼 수 있다.

VM VS. Container

VM은 하드웨어 Infrastructure 위에 vmware나 VirtualBox와 같은 Hypervisor 소프트웨어를 이용해서 각각의 가상의 머신을 만들 수 있다.
하나의 운영체제 안에서 동일한 어플리케이션을 각각 다른 환경에서 구동하기 위해서는 Virtual Machine을 이용해서 어플리케이션을 구동해야 한다.
VM은 각각의 운영체제를 포함하고 있기 때문에 Mac OS 위에서 Window와 Linux를 동시에 구동할 수 있다.
그러나 VM은 무거운 운영체제를 포함하기 때문에 시작하는 데 시간이 오래 걸리고, 컴퓨터 운영체제에 리소스를 많이 잡아먹는다.

이 VM을 경량화 한 컨셉이 바로 '도커의 컨테이너'이다.

컨테이너는 하드웨어에 설치된 운영체제, Host OS에서 컨테이너 엔진(Container Engine)이란느 소프트웨어를 설치하면 개별적인 컨테이너를 만들어서 각 어플리케이션을 고립된 환경에서 구동할 수 있게 해준다.

사진에서 볼 수 있듯이 VM과 Container의 가장 큰 차이점은 '운영체제'이다.

VM은 운영체제를 포함했다면, Container는 운영체제를 포함하지 않고, 컨테이너 엔진에 설치된 Host OS를 공유한다.

따라서 컨테이너가 구동되기 위해서는 컨테이너 엔진이 필요하고, 컨테이너 엔진이 Host OS에 접근해서 필요한 것들을 처리 해 준다.

여기서 가장 많이 사용되는 컨테이너 엔진이 바로 'Docker Engine'이다.

 

이게 어떻게 가능한지를 알기 위해서는 운영체제 커널(Kernal)이 어떻게 동작하는지 알아야 한다.

도커 구성

도커는 컨테이너를 만들고, 배포하고, 구동한다.

이때 컨테이너를 만들기 위해서 필요한 세 가지는 다음과 같다.

 

Dockerfile

컨테이너를 어떻게 만들어야 하는지에 대한 설명서이다.

요리를 할 때 레시피와 같다.

  • Copy files
  • Install dependencies
  • Set environment variables
  • Run setup scripts

Image

도커 파일을 이용해서 이미지를 만든다.

실행되고 있는 어플리케이션의 상태를 스냅샷(Snap shot) 해서 이미지로 만든다.

이렇게 만들어진 이미지는 변경이 불가능한 상태 즉 불변의 상태이다.

Container

컨테이너 안에서 어플리케이션이 동작한다.

객체 지향에서 이미지는 Class라고 볼 수 있다.
동작하고 있는 어플리케이션을 스냅샷 해서 템플릿 형태인 이미지로 만들어 두고, 이 클래스 이미지를 이용해서 실제로 어플리케이션이 동작하는 각각의 컨테이너를 만들 수 있다.
이렇게 만들어진 컨테이너는 클래스로부터 만들어진 인스턴스라고 볼 수 있다.

도커 이미지 배포 과정

 

  1. Local Machine에 도커를 설치한다.
  2. 어플리케이션 구동에 필요한 도커 파일을 작성한다.
  3. 도커 파일을 이용해서 이미지를 만든다.
  4. 깃헙과 같은 Container Registry라는 곳에 만든 이미지를 Push한다.
  5. 필요한 서버나 다른 개발자 PC에서 만들어둔 이미지를 Pull 받는다.
  6. 가져온 컨테이너를 그대로 실행하면 된다.
    1. 정상적으로 실행하기 위해서는 해당 서버에 도커와 같은 컨테이너 엔진을 설치해야 한다.

Container Registry

이미지를 업로드/공유 할 수 있는 Container Registry는 Public과 Private으로 나누고, 그 예는 다음과 같다.


Reference

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

반응형