본문 바로가기

웹 개발

도커

Docker

Linux 컨테이너를 만들고 사용할 수 있도록 컨테이너화 하는 기술을 말한다. Docker를 사용하면 가벼운 모듈식 가상 머신처럼 다룰 수가 있다. 컨테이너 구축, 배포, 복사하고 이식을 유연하게 할 수 있어서 애플리케이션을 클라우드에 최적화하도록 지원한다.

작동 방식

Linux 커널과 함께 Cgroups및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지한다.

이미지 기반 배포 모델을 제공하므로 여러 환경 전반에서 애플리케이션이 모든 종속 항목과 손쉽게 공유할 수 있다. 또한 컨테이너 환경 내에서 애플리케이션 배포를 자동화한다.

기존 Linux 컨테이너와 다른점

Docker는 컨테이너를 실행하는 기능 이상의 것을 제공하며 컨테이너 생성 및 구축, 이미지 전송, 이미지 버전 관리 프로세스를 용이하게 해준다. 기존 리눅스 컨테이너는 전체 애플리케이션을 하나로 실행할 수 있다. Docker는 애플리케이션이 개별 프로세스로 세분화되도록 하며 이를 수행할 수 있는 툴을 제공한다.

Docker의 장점

  • 모듈성

    전체 애플리케이션을 분해할 필요 없이 애플리케이션의 일부를 분해하고, 업데이트, 복구하는 능력에 집중되어 있다.

  • 계층 및 이미지 버전 제어

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

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

  • 롤백

    모든 이미지에는 계층이 있으며, 현재의 이미지 반복이 적절치 않을 경우 이전 버전으로 롤백을 할 수 있다. 애자일 개발 접근 방식을 지원하며 툴 관점에서 CI/CD를 수행하는 데 도움을 준다.

  • 신속한 배포

새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 시간이 오래 소요된다. Docker는 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있다. 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축된다. 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있다.

  • 이식성

    애플리케이션과 모든 종속성은 리눅스 커널, 플랫폼 배포 또는 배포 모델의 호스트 버전과 독립적인 단일 컨테이너로 묶을 수 있다. Docker를 실행하는 다른 컴퓨터로 전송하고 호환성 문제 없이 실행할 수 있다.

  • 공유

    원격 레포지토리를 사용하여 컨테이너를 다른 사용자와 공유할 수 있다.

    새로운 하드웨어를 준비하고, 실행하고, 프로비저닝하고, 사용할 수 있게 하려면 시간이 오래 소요된다. Docker는 각 프로세스에 대한 컨테이너를 생성함으로써 사용자는 유사한 프로세스를 새 앱과 빠르게 공유할 수 있다. 컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없으므로 배포 시간이 크게 단축된다. 배포 속도가 빨라 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있다

제한 사항

Docker는 단일 컨테이너 관리에 적합하도록 만들어져있다. 수백 개로 세분화된 컨테이너는 관리하는데 매우 어려워질 수가 있다. 결국 모든 컨테이너 전체에서 네트워킹, 보안, 텔레메트리와 같은 서비스를 제공하기 위해서 컨테이너를 그룹화해야 한다. 여기에 쿠버네티스가 사용된다.

구성 요소

  • 컨테이너

    애플리케이션 샌드 박스. 각 컨테이너는 필요한 설정 데이터를 가진 이미지로 되어있다. 이미지 컨테이너를 실행하면 이 이미지 위에 wriable layer가 추가된다. 새 커밋이 일어날때마다 새 이미지 레이어가 추가되어 변경 내용을 저장한다.

  • 이미지

    컨테이너 구성의 정적 스냅샷. 이미지는 수정되지 않는 읽기 전용의 레이어이고, 변경되는 것들은 Writable 레이어로 만들어져 새 이미지를 만듦으로써 저장한다. 각 이미지는 하나 이상의 부모 레이어에 의존성을 갖는다.

  • 플랫폼 이미지

    부모가 없는 이미지. 컨테이너화 된 애플리케이션을 실행하는데 필요한 런타임 환경, 패키지 및 유틸리티를 정의한다. 플랫폼 이미지는 읽기 전용이므로 모든 변경 내용은 위에 쌓인 복사된 이미지에 반영된다.

  • 레지스트리

    이미지 레포지토리. 레지스트리는 다운할 수 있는 이미지가 포함된 공개 또는 비공개 스토리지이다. 일부 레지스트리를 사용하면 이미지를 업로드하여 다른 사용자가 사용할 수 있도록 할 수 있다.

  • Docker file

    Docker 이미지에 대한 빌드 지침이 있는 구성 파일이다. 빌드 프로시저를 자동화, 재사용 및 공유하는 방법을 제공한다.

 

'웹 개발' 카테고리의 다른 글

아파치에 대한 설정 Httpd.conf  (0) 2021.03.25
오라클 쿼리 힌트  (0) 2021.03.14
쿠버네티스  (0) 2021.03.14
XSS  (0) 2021.03.14
MyBatis TypeHandler  (0) 2021.03.14