Docker 기본 정리

Docker란 무엇인가?

Container Engeine 중에서 가장많이 쓰이는 녀석이다.

 

 

그럼 컨테이너(Container)란 무엇인가?

컨테이너는 하나의 리눅스 프로세스가 마치 전용 서버에서 동작하고 있는 것 같은 분리 상태를 만들어 낸다.

 

컨테이너와 비교되는 것이 가상 서버인데 

가상서버는 가상화 소프트웨어(ex : VMware, VirtualBox , Hyper -V 등)를 사용하여 마치 한대의 전용 서버가 있는 것처럼 이용해줄 수 있게 해준다.

 

한대의 머신에서도 여러 대의 가상 서버를 가동할 수 있어 하드웨어 구입이나 설치 관리 비용을 줄일 수 있다.

이러한 가상화  소프트웨어를 하이퍼바이저(HyperVisor)라 부른다.

 

그런데 도커는 이런 가상서버를 보다 효율적으로 운영할 수 있는 것이라고 볼 수 있다.

위 그림에서 처럼  

가상서버를 사용할 경우 각 서버마다 OS가 설치되어야한다. 따라서 리소스를 많이 잡아 먹고 무겁다.

 

하지만 Container를 사용하면 Container 엔진하나만 설치하면 각 서버마다 OS가 설치될 필요가 없는

즉 각 컨테이너가 하나의 컨테이너 엔진에서 각각 독립성을 유지하여 하나의 전용서버처럼 돌아 갈 수 있다.

 

이러한 컨테이너 엔진으로 가장 많이 쓰이는 것이 바로 Docker이다.

 

컨테이너를 만들기 위해서는 DockFile을 만들어야하고

DockerFile을 이용해서 Image를 만든 다음 컨테이너를 구동할 수 있다.

 

1. dockerFile ( 레시피 같은 녀석 )

 - 앱을 구동하기 위해 필요한 파일

 - 필요한 dependency

 - 필요한 환경변수

 - 어떻게 구동해야하는지 스크립트

등을 작성한다.

 

2. 이미지

 도커파일에서 명시한 대로 앱을 구동하는데 필요한 파일, dependency, 환경변수, 등을 이미지화, 즉

스냅샷을 찍어서 이미지로 만들어 둔다고 볼 수 있다.

이렇게 만들어진 이미지는 변경이 불가능한 상태로 볼 수 있다.

 

3. 컨테이너

sendBox처럼 이미지를 고립된 환경에서 개별적인 파일시스템안에서  실행할 수 있는 것을 말한다.

컨터이너안에서 우리 어플리케이션이 동작한다고 볼 수 있다.

 

객체지향에 익숙하다면 이미지를 하나의 클래스라고 보면 편하다.

즉 하나의 이미지가 존재하면 이를 이용해서 각각의 여러개 컨테이너를 만들 수 있다.

그래서 각각 컨테이너에서 각각 동작하는 파일들은 수정될 수 있는 상태이다.

 

 

4. 배포하는 방법

로컬에서 이미지를 만들어서 Container Registry에 push하고 필요한 서버나 다른 pc에서 그걸 pull해서 가져옴

이때 이미지를 정상적으로 실행하기 위해서는 docker같은 컨테이너 엔진이 필요한 것이다.

 

이미지를 업로드할 수 있는 Container Registry에는 public과 private이 존재한다.

그 중에서 docker hub가 많이 사용되고 있다고 한다.

회사에서는 보안적인 이유로 private을 사용한다.

 

개발하고 있는 Local Machine과 Server 각각 도커를 설치한다. (설치할건 도커 하나뿐! )

먼저 로컬 머신에서 DockerFile을 작성해서 빌드하여 이미지를 만들고 만들어진 이미지를 Container Registry에 업로드한다. 업로드된 이미지를 다운받아서 실행하면된다.