- 도커(docker)
1-1. 컨테이너
1-2. 이미지- 장점
2-1. 레이어 저장 방식
2-2. 경로 지정 방식
2-3. Docker Hub
2-4. 많은 자료- 참조
- 마치며
최근 각광받는 기술로 2가지를 꼽자면 AWS와 Kubernetes를 꼽을 수 있습니다.
그중 Kubernetes
는 docker기반의 관리툴입니다.
Kubernetes
를 알기전에 docker부터 알아보겠습니다.
docker란 컨테이너 기반의 오픈소스 가상화 플랫폼
입니다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 만들어 줍니다.
백엔드, DB, 메시지 큐등 어떤것도 컨테이너로 추상화할 수 있고 어느 환경에서도 실행 가능합니다.
컨테이너(Container)는 docker
의 핵심 기술로써 격리된 공간에서 프로세스가 동작하는 역할
을 합니다.
가상화 기술중 하나지만 기존 가상화 방식과는 차이가 있습니다.
기존의 가상화 방식은 주로 OS를 가상화
하였습니다.
VMware나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식
으로 여러가지 OS를 가상화할 수 있고 비교적 사용법이 간단하지만 무겁고 느리기 때문에 운영환경에선 사용하기에 어려움이 있었습니다.
이러한 상황을 개선하기 위해 나온 기술이 HVM을 이용한 KVM과 반가상화 방식의 Xen이 등장하게 됩니다.
위의 방식은 게스트 OS가 필요하긴 하지만 전체 OS를 가상화하는 방식
이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었습니다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.
전가상화, 반가상화 모두 성능상 문제가 있었고 이를 개선하기 위해 프로세스를 격리
하는 방식이 등장하는 데 이 방식이 컨테이너(Container)입니다.
리눅스에서는 이방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없습니다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되며 가벼운 VM을 사용하는 느낌을 줍니다.
실행중인 컨테이너에 접속하여 명렁어를 입력할 수 있고 패키지를 설치할 수 있으며 사용자를 추가하거나 여러개의 프로세스를 백그라운드로 실행할 수도 있습니다.
CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용가능합니다.
새로운 컨테이너를 추가하는데 드는 시간은 1~2초로 가상머신과 비교할 수 없게 빠릅니다.
도커에서 가장 중요한 개념은 컨테이너
와 함께 이미지
라는 개념입니다.
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는것으로 상태값을 가지지 않고 변하지 않습니다.
컨테이너는 이미지를 실행한 상태라고 볼수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다.
같은 이미지로 여러개의 컨테이너를 생성할 수 있고 상태가 변하더라도 이미지는 변하지 않습니다.
이미지는 실행하기 위한 모든 정보를 가지고 있기 때문에 이것저것 설치할 필요가 없습니다. 미리 만들어논 이미지를 다운 받고 컨테이너만 생성하면 됩니다.
이미지는 Docker hub에서 등록 및 다운 받거나 Docker Registry 저장소를 직접 만들어 관리할 수 있습니다.
도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 담고 있기에 용량이 큽니다. 처음 다운로드 받을땐 크게 부담이 되지 않지만 파일 하나 추가했다고 다시 다운받는다면 비효율적일 수밖에 없습니다.
도커는 이러한 문제를 해결하기 위해 레이어
라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있도록 해줍니다.
이미지는 여러개의 읽기 전용 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성됩니다.
위에 그림처럼 아예 새로워지는 것이 아니라 위에 레이어가 추가되는 개념이기 때문에 추가된 레이어만 다운받을 수 있어 효율적입니다.
컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기 쓰기 레이어를 추가하여 이미지 레이어를 그대로 사용하면서 컨테이너가 실행에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.
이미지는 url 방식으로 관리하며 태그를 붙일 수 있습니다.
ubuntu 14.04 이미지는 docker.io/library/ubuntu:14.04 또는 docker.io/library/ubuntu:trusty 이고 docker.io/library는 생략가능하여 ubuntu:14.04 로 사용할 수 있습니다.
도커 이미지 용량은 수백메가에서 수기가로 넘어가는 경우가 흔한데 도커는 Docker hub를 통해 공개 이미지를 무료로 관리해줍니다.
쉽게 등록된 이미지를 활용하여 확장이 가능합니다.
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
공부하면서 정리한 docker 개념입니다.
참조 글에 정리가 잘되어 있으니 시간나시면 참조 글을 읽어보시는걸 추천드립니다.
컨테이너 접하기 전 이 글을 먼저 봤으면 좋았을텐데 하는 아쉬움이 들정도로 도움이 됐습니다