본문 바로가기

ire0546/BASIC

Docker Basic

1. Docker?

도커는 2013년 3월 Docker Inc에서 출시한 '오픈소스 컨테이너 프로젝트'로 전세계적으로 큰 인기를 얻고 있다.

복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할 수 있으며, 개발이나 테스트 서비스 환경을 하나로 통일해서 효율적으로 관리할 수 있다. 또한 컨테이너(이미지)를 전 세계 사람들과 공유할 수 있다. 이것은 리눅스 커널에서 제공하는 컨테이서 기술을 이용한 것이라고 볼 수 있다. 그리고 GitHub와 비슷한 방식의 docker hub를 제공한다.

 

 

1-2. 컨테이너 기술?

컨테이너는 가상화보다 훨씬 가벼운 기술이다.

우선 가상화란, 서버가 발전함에 따라 운영체제 안에서 다른 운영체제를 또 사용할 수 있게 됨으로써 가상머신에 각종 서버 프로그램, 데이터베이스등을 설치해서 애플리케이션이나 웹 사이트를 실행하는 것을 말한다. 미리 구축한 가상 머신 이미지를 여러 서버에 복사해서 실행하면 이미지 하나로 서버를 계속 만들어낼 수 있다. 그리고 이러한 가상화 기술을 이용해서 서버를 임대해주는 서비스가 클라우드 서비스이다.

 

그러나 가상머신은 컴퓨터를 통째로 만들어내다 보니 각종 성능 손실이 발생하게 된다. 

그래서 성능에 문제가 있다보니 '리눅스 컨테이너'가 나왔다. 이것은 컨테이너 안에 가상공간을 만들지만 실행 파일을 호스트에서 직접 실행한다. 이것은 리눅스 커널의 cgroups와 namespaces가 제공하는 기술이다. 즉, 한마디로 말하면 가상화가 아닌 '격리'라는 것이다. 

 

 

2. 도커의 특징

 도커는 게스트 OS를 설치하지 않는다.

이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치를 하기 때문에 이미지 용량이 크게 줄어들게 되고, 호스트와 OS 자원(시스템 콜과 같은)을 공유하게 된다.

 

또한 도커는 하드웨어 가상화 계층이 없다. 

그렇기 때문에 메모리 접근, 파일 시스템, 네트워크 전송 속도가 가상머신에 비해 월등히 빠르고, 호스트와 도커 컨테이너 사이의 성능 차이가 크지 않다. (오차 범위 안이다.)

 

다른 특징으로는 도커는 이미지 생성과 배포에 특화된 것과, 이미지 버전 관리도 제공하고 중앙 저장소에 이미지를 올리고 받을수도 있다. 그리고 다양한 API를 제공하여 원하는 만큼 자동화가 가능하여 개발과 서버 운영에 매우 유용하다는 점이 있다. 

 

 

3. 이미지와 컨테이너의 차이점?

이미지는, 서비스 운영에 필요한 서버 프로그램, 소스코드, 컴파일된 실행 파일을 묶은 형태이다. 저장소에 올리고 받는것은 이미지이다. 

컨테이너는, 이미지를 '실행한 상태'이다. 그렇기 때문에 이미지로 여러개의 컨테이너를 만들 수 있다.

운영체재로 치자면 이미지는 실행파일이고 컨테이너는 프로세스 정도로 생각하면 된다. 

 

 

4. 도커의 이미지 처리 방식

도커는 이미지의 바뀐 부분을 어떻게 처리할까?

이것은 유니온 파일 시스템 형식(aufs, btrfs, devicemapper)로 처리한다. 도커는 베이스 이미지에서 바뀐 부분만을 이미지로 생성을 하고, 컨테이너로 실행할 때에는 베이스 이미지와 바뀐 부분을 합쳐서 실행하게 된다. docker hub나 개인 저장소에서 이미지를 공유할 때에도 바뀐 부분만 주고받을 수 있는 것이다. 각 이미지는 의존 관계를 형성한다. 

 

 

* 위 글은 도커 무작정 따라하기 책을 정리한 곳에서 발췌하여 정리하였습니다.

'ire0546 > BASIC' 카테고리의 다른 글

GitHub Branch 만들기  (0) 2020.03.10
React와 React native란  (0) 2020.02.16