article thumbnail image
Published 2021. 1. 6. 17:53

Docker

Docker는 Container를 만든다.

 

리눅스에서 논리적으로 나눌 수 있는 가상 인터페이스를 지원한다.

 

Linux control 그룹을 사용해서 가상화 환경을 제공한다.

cgroup

 

docker가 윈도우에서 쓰일 때에는 hypervisor를 사용한다.

따라서 Docker는 윈도우즈보다 리눅스 환경에서 사용하는 것이 좋다.

 

가상화하여 자기만의 인터페이스를 가질 수 있다.

 

 

VMware와 Docker의 성능의 차이

Docker를 사용했을 때 시간이 매우 절약 되는 것을 볼 수 있다.

 

 

Container가 12개일 때 비교적 안정적인 모습을 보여주고 있다.

 

 

메모리의 사용량을 보면 메모리가 많이 남아있는 것을 확인할 수 있다.


모놀리식, 마이크로서비스

요즘에 나오는 규모있는 회사들은 메인 페이지의 한 창을 따로 만든다. (ex. 네이버 뉴스, 연예, 스포츠) 마치 하나처럼 동작하는 것처럼 보인다. 

한번 컴파일 할 때 굉장히 많은 시간이 걸린다. 정기적으로 점검을 할 예정입니다 하면서 관리하는 것이 모놀리식이다. 

모놀리식으로 하게되면 해야할 일이 굉장히 많아진다. 그러니까 이것을 각각 개발 팀별로 나눠서 하는 것이 마이크로서비스이다.

 

마이크로서비스는 서비스를 잘게 나누는 느낌이다. 서로 컨테이너 환경을 쓰다보니까 환경에 영향을 미치지 않고 독립적인 서비스를 제공할 수 있게 된다. 

 

대표적인 성공사례가 넷플릭스 마이크로서비스이다.

 

 

수많은 컨테이너들이 모여서 하나의 서비스(아마존, 넷플릭스)를 구축하고 있는 것이다. 

이런 것들이 가능한 이유는 넷플릭스라는 회사가 microservices를 이용하기 위해 container라는 것을 썼기 때문이다.

운영은 운영에 집중하고 개발을 개발에 집중할 수 있게 된다.

 

도커는 컨테이너가 많으면 다루기가 힘들다.

도커를 전체적으로 아우르고 작동시키는 도구 중 하나가 쿠버네티스이다.

도커와 쿠버네티스 두가지 기술이 Container하면 가장 많이 언급되는 도구이다.

 

 

원하는 것은 얼마든지 설치하고 삭제할 수 있는 환경이다.

이미지를 실행하면 실행되는 것을 컨테이너라고 한다. 격리시켜서 독립된 공간에서 만든다. 가상환경에서 사용하면 오버헤드가 적게 되고 다양한 종속성에서 벗어나게 된다. 개발 팀에 많으면 많을수록 다양한 어플리케이션을 가져와서 쓰게 될 때 컨테이너에서 쓰게 되면 컴포넌트가 충돌하는 것을 피할 수 있게 된다.

 

리눅스 커널의 2가지

리눅스 네임 스페이스 : 공간을 별도로 할당해서 공간에 프로세스가 간섭하지 못하게 하는 방어막을 쳐서 프로세스가 침투하지 못하게 한다.

리눅스 컨트롤 그룹 : 리소스의 양을 CPU, 메모리 등을 나눠준다. 제어해준다.


Docker 컨테이너의 이점

모듈성

Docker의 컨테이너화 접근 방식은 전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트 또는 복구하는 능력에 집중되어 있다. 사용자는 이 마이크로서비스 기반 접근 방식 외에도 SOA(service-oriented architecture)의 작동 방식과 동일하게 멀티플 애플리케이션 사이에서 프로세스를 공유할 수 있다.

계층 및 이미지 버전 제어

각 Docker 이미지 파일은 일련의 계층으로 이루어져 있으며 이 계층들은 단일 이미지로 결합된다. 이미지가 변경될 때 계층이 생성되고, 사용자가 실행 또는 복사와 같은 명령을 지정할 때마다 새 계층이 생성된다.

Docker는 새로운 컨테이너를 구축할 때 이러한 계층을 재사용하므로 구축 프로세스가 훨씬 더 빨라진다. 중간 변경 사항이 이미지 사이에서 공유되므로 속도, 규모, 효율성이 더 개선된다. 계층화에는 버전 관리가 내재되어 있으며 새로운 변경 사항이 발생할 때마다 내장 변경 로그가 기본적으로 적용되므로 컨테이너 이미지를 완전히 제어할 수 있다.

롤백

계층화에서 가장 유용한 부분은 아마도 롤백 기능일 것이다. 모든 이미지에는 계층이 있으며, 현재의 이미지 반복이 적절하지 않은 경우 이전 버전으로 롤백하면 된다. 이 기능은 애자일(agile) 개발 접근 방식을 지원하며 툴 관점에서 실제로 지속적인 통합 및 연속 배포(Continuous Integration and Deployment, CI/CD)를 수행하는 데 도움을 준다.

신속한 배포

새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 일반적으로 며칠이 소요되었다. 많은 노력과 부가적인 업무가 필요하므로 부담도 상당했다. Docker 기반 컨테이너는 배포 시간을 몇 초로 단축할 수 있다. 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있다. 또한, 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축된다. 이뿐만 아니라 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있고 사용자는 우려를 할 필요가 없다.

 

즉, Docker 기술은 효율성을 중시하며 더 세분화되고 제어 가능한 마이크로서비스 기반 접근 방식입니다.


도커의 한계

많으면 많아질수록 관리해야하는 컨테이너의 양이 많아진다. 하지만 내부적으로 도커를 사용하면서 외부적으로 쿠버네티스를 사용하게 되면 컨트롤을 자연스럽게 할 수 있다. 수십대의 서버들을 관리하기 위한 도구이다.

 

Ref

www.redhat.com/ko/topics/containers/what-is-docker

 

'🚦 Server > Docker' 카테고리의 다른 글

Docker 로 python 실행하기  (0) 2021.01.08
Docker - image가 저장되는 방식  (0) 2021.01.08
Docker - 라이프 사이클, 명령어  (0) 2021.01.07
Docker - image, docker file, docker hub  (0) 2021.01.07
Docker 설치 - Mac  (0) 2021.01.07
복사했습니다!