도커란 무엇인가?

이호용·2021년 1월 15일
0

42_ft_server

목록 보기
2/6

도커란 무엇인가?

1. 도커가 필요한 이유.

서버를 구상하는 일은 쉬운 일이 아닙니다. 똑같은 일을 하는 두 서버가 있다 해도, A 서버는 한 달 전에 구성했고 B 서버는 이제 막 구성했다면, 운영체제부터 컴파일러, 설치된 패키지까지 완벽하게 같기는 쉽지 않습니다. 그리고 이러한 차이점들이 장애를 일으키고 말죠. A 서버는 잘 되는데 B 서버는 왜 죽었지?와 같은 일(혹은 그 반대)이 벌어지는 겁니다. 이렇게 서로 모양이 다른 서버들이 존재하는 상황을 눈송이 서버Snowflakes Server이라고도 합니다.

그 외에도 하나의 서버에 여러개의 프로그램을 설치하는 것도 문제였는데 서로 사용하는 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 경우는 설치가 굉장히 까다로워, 과거엔, 컴퓨터 수를 늘려 이런 문제를 해결하곤 했다.

도커는 이런 환경설치에 문제를 해결 해결해주는데, 게스트 OS를 설치하지 않고도.Docker에서는 분리된 공간을 이용해 서버 운영을 위한 프로그램과 라이브러리를 쉽게 설치할 수 있고, 하드웨어를 가상화하는 계층(Hyper-V)이 없으며, 호스트의 자원을 직접 이용하기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다. 그러므로, 메인 호스트와 Docker의 컨테이너 사이의 계층과 성능차이는 크게 발생하지 않는다.

2. 도커 장점.

  1. 복잡한 리눅스 애플리케이션을 컨테이너로 묶어서 실행할수 있음.

  2. 개발, 테스트, 서비스 환경을 하나로 통일하여 효율적으로 관리할 수 있음.

  3. 컨테이너(이미지)를 전세계 사람들과 공유.

    how?

    리눅스에서 제공하는 컨테이너를 이용해서!

3. 컨테이너 설명

컨테이너란? 해운 업계에서 실제 컨테이너를 사용하여 선박과 기차에서 운송할 다양한 화물을 분리하는 것처럼 소프트웨어 개발 기술에서도 컨테이너화라는 접근 방식을 점점 더 많이 사용합니다.

컨테이너라고 하는 표준 소프트웨어 패키지는 애플리케이션의 코드를 관련 구성 파일, 라이브러리 및 앱 실행에 필요한 종속성과 함께 번들로 제공합니다. 따라서 개발자와 IT 전문가는 여러 환경에서 애플리케이션을 원활하게 배포할 수 있습니다.

  • 컨테이너와 가상머신 차이.

    컨테이너는 일반적으로 크기가 메가바이트 단위입니다. 앱보다 크거나 실행하는 데 필수적인 모든 파일이 컨테이너에 패키징되는 것은 아니며, 특정 작업을 수행하는 단일 기능(마이크로서비스라고 함)이 컨테이너에 패키징되는 경우가 많습니다. 컨테이너는 경량화 속성과 공유 운영 체제(OS)로 인해 여러 환경 간에 매우 쉽게 이동할 수 있습니다. 가상화가 아니고 격리.

    VM은 일반적으로 크기가 기가바이트 단위입니다. 일반적으로 VM은 자체 OS를 포함하고 있어 리소스 집약적인 기능 여러 개를 동시에 수행할 수 있습니다. VM에서 사용할 수 있는 리소스가 늘어남에 따라 VM은 전체 서버, OS, 데스크탑, 데이터베이스, 네트워크를 추상화, 분할, 복제, 에뮬레이션할 수 있습니다.

컨테이너 리눅스 구동원리. 리눅스 컨테이너와 비슷한 기술로 chroot라는 기술이있다. 이 기술은 프로세스 루트 디렉토리를 변경하는 것으로, 허용 할수 있는 디렉토리를 제한하거나 시스템 라이브러리와 관련 라이브러리를 로드할 수 있다. 그러나 단순 디렉토리 엑세스 만으로 네트워크 및 프로세스 등을 컨트롤 할수 없는데, 리눅스 컨테이너에선, chroot을 보완시켜, 엑세스 권한 뿐 아니라, 프로세스 및 장치 등의 자원에 대해서도 제어가능하도록 구현되어있다. > ​ 운영체계를 기반으로 만들어진 대부분의 Software는 그 실행을 위하여 OS와 Software가 사용하는 동적 Library에 대하여 의존성을 갖습니다. chroot을 사용하면 원하는 library만 쓸수 잇음.

LXC는 chroot와 같이 특정 디렉토리를 루트 디렉토리로 인식하도록하며 cgroups의 네임 스페이스 기능을 사용하여 파일 시스템이나 프로세스뿐만 아니라 CPU 리소스와 메모리, 각종 디바이스, 네트워크 패킷, 네트워크 인터페이스 등 을 컨트롤 하여 가상환경을 구현하였다.

초기 docker는 lxc(리눅스컨테이너)를 기반으로 구현했지만, 0.9버전 부터 libcontainer를 사용. 전체적인 기능은 비슷

4. 이미지

이렇게 용이한 컨테이너를 쉽게 만드는 방법으로 이미지를 이용한다

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다. 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다.


이미지의 저장 방식은 레이어 저장방식이다.

이미지는 컨테이너에 필요한 모든 정보를 담고 있어 용량이크다. 처음 이미지를 다운 받을떈 크게 부담이 안되지만, 파일 하나 업데이트 되었다고 이미지를 다시 다운 받는건 비효율적이다.

이를 해결하기 위해 도커는 레이어 저장방식을 사용했다.

레이어 저장방식은 유니온 파일 시스템을 이용하여, 여러개의 레이어를 하나의 파일 시스템으로 사용한다. 예를들어 위의 우분투 이미지가 a+b+c의 집합이면, ubuntu이미지를 베이스로 만든 nginx이미지는 a+b+c+nginx이고 webapp이미지를 nginx기반으로 만들었다면 a+b+c+nginx+source 레이어로 구성됩니다. 만약 source에 문제가 있어 새로운 source2를 받고 싶다면 우분투와 nginx는 그대로 두고 source2만 다운 받으면 된다.

5. 도커요약.

도커는 많은 서버를 하나의 컴퓨터로 돌릴 때, 라이브러리나, 원하는 프로세서를 격리시킬수 있어서, 효율적으로 서버관리가 가능함.

0개의 댓글