Profile

생각정리..

Lunight

[Docker#1] Docker에 대하여..

회사 서버를 관리하는 과장님께 내가 운영하는 apple 배포용 서버를 다시 깔아달라고하니 


XenServer(젠서버)?에 Docker로 올려주겠다고 한다..


이게 무슨말??@..@


이게 왜좋지? 


모르니까 창피하다... 


어떨결에 "예"라고 대답하고 접속해보니....Docker명령어도 있고.... 


아 이거 안되겠다 공부해보자..!!!



1. 도커란?


https://www.docker.com/



서버를 관리하는 입장에서 볼때 무척 매력적인 플랫폼이라고 할 수 있겠는데 


예를들어 우리가 CentOS에 웹서버를 운영한다고 했을때 다른OS 우분투 또는 그외 리눅스로 서비스를 바꾼다고 생각해보자 


그럼 일단 웹서버를 백업하고 우분투 또는 리눅스를 깔고 소스파일을 가져다 붙이고 등등 상당한 시간이 소요된다. 


또는 버전을 업데이트한다고 했을때 매번 시간낭비를 해가며 설치해야하고 추가로 테스트? 운영서버의 개수는 점점 늘어만간다.

(머리아픔...지끈)



간단히 말해본다면 도커는 소프트웨어 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 


컨테이너 기반이라고 하면 다양한 프로그램 , 실행환경을 컨테이너로 추상화하여 동일한 인터페이스를 제공하므로써 프로그램의 배포 및 관리를 단순하게 해준다.

백엔드 프로그램 . 데이터베이스 서버 , 등 어떤프로그램도 추상화하여 조립PC , AWS , Azure. Google cloud등 어디서든 실행가능하다.

(이럴꺼면 Gitlab도 도커를 쓸걸 그랬나....ㅠ)



2. 장점


시간단축 - 소프트웨어 개발 및 배포시간을 13배 단축하고 즉각적으로 대응이 가능하다(13배라는 수치는 도커 홈페이지에 대문짝만하게 나옴..)


휴대성 - 클라우드 환경에서 독립성을 확보할 수 있다.


보안 - 내장된 보안기능 및 구성을 즉시 사용하여 안전한 응용프로그램을 제공한다 .


비용절감 - 인프라 리소스 사용을 최적화하고 운영을 합리화한다. 


그외 장점은 공식 홈페이지를 참고할것



3. VM과 같은데 ? 




가상화OS (VM이나 Virtual box)하는 방식과 비슷하다라고 생각할 수 있겠지만. 가상머신의 경우 게스트OS전체를 가상화하여 사용하는 방식으로 무겁고 느려서 사용하기 상당히 불편하다. 


이러한 상황을 개선하기 위해 CPU의 가상화 기술(HVM)을 이요한 KVM(kernel-based Virtual Machine)과 반가상화(Paravirtualization) 방식의 Xen이 나온다. 


반가상화 방식은 게스트OS가 필요하긴 하지만 전체OS를 가상화하는 방식이 아니였기 때문에 호스트 가상화 방식에 비해서는 성능이 향상되었다. 이런 기술은 클라우드서비스에서 가상 컴퓨팅 기술의 베이스가 된다. 


전가상화 -> 반가상화 -> ... 이를 개선하기 위해 프로세스를 격리하는 방식이 등장하는데 컨테이너를 이용하여 격리하기 때문에 가볍고 빠르게 동작한다. 


4. Docker가 컨테이터 가상화 플랫폼의 최초인가?


No...!!

리눅스에서는 Linux container가 있었고 FreeBSD에서는 Jail, 솔라리스에서는 Solaris Zones이라는 기술이 있었고 구글은 Imctft(Let Me Contain That For you)라고 있었으나 성공은하지 못하였다 


Docker는 LXC를 기반으로 시작해서 0.9버전에서는 libcontainer 기술을 사용하였고 추후에는 runC기술에 합쳐졌다고 한다.




5. Docker의 핵심 컨테이너와 이미지 그리고 레이어 저장방식


이미지는 컨테이너 실행에 필요한 파일과 설정값을 포함하는 것으로 상태값을 가지지않고 변하지 않는다. 

컨테이너는 이미지를 실행한 상태로 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에 여러 컨테이너를 생성할 수 있고 컨테이너 상태가 바뀌거나 컨테이너가 삭제되도 이미지는 삭제하지않는다. 


이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다. 서버가 추가되면 미리 만든 이미지를 다운받고 컨테이너를 생성해서 운영하면 된다. 


도커 이미지는 https://hub.docker.com/에 등록하거나 https://docs.docker.com/registry/에  저장소를 직접 만들어 관리할 수도 있다.



도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가(MB)이다. 


기존 이미지파일에 추가로 이미지를 하나 더 넣으려고 새로 받기에는 용량이 엄청 크기때문에 레이어라는 개념으로 유니온 파일 시스템을 이용하여 레이어를 하나의 파일시스템으로 관리하게 해준다.