반응형
도커Docker란?
- 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
컨테이너Container란?
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.
- 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.
- 가상화 기술 중 하나지만 기존의 방식과는 다르다.
- Virtual Box, VMware 같은 가상머신은 호스트 운영체제 위에 게스트 운영체제를 가상화하여 사용하였다. 이 방식은 여러가지 운영체제를 가상화할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에서 사용할 수 없었다.
- 그래서 등장한게
- CPU의 가상화기술 (HVM)을 이용한 KVM
- 반가상화 방식을 이용한 Xen( 후에 Open Stack 이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 됨 )
- 위 방식들은 게스트 os가 필요하긴하지만 전체 os를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상
- 하지만 전가상화든, 반가상화든 추가적인 os를 설치해서 가상화하는 방법은 성능문제를 일으켰고, 이를 개선하기 위해 프로세스를 격리하는 방식이 등장했다.
- 프로세스 격리 : 소유하지 않은 메모리 공간에 액세스하지 못하도록 서로 다른 소프트웨어 프로세스를 분리하는 것
이미지Image란?
- 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다.
- 컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 추가되거나 변하는 값은 컨테이너에 저장된다.
- 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
- ubuntu이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있고 MySQL이미지는 debian을 기반으로 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있다.
- 말 그대로 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다. 새로운 서버가 추가되면 미리 만들어놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다.
- 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가에 이른다. 처음 이미지를 다운받을땐 크게 부담이 되지 않지만 기존 이미지에 파일하나를 추가했다고 수백메가를 다시 다운받는다면 매우 비효율적이다.
- 이런 문제를 해결하기 위해 레이어 라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 해준다. 이미지는 여러개의 읽기 전용 read only 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성된다.
- ubuntu 이미지가 A + B + C의 집합이라면, ubuntu 이미지를 베이스로 만든 nginx 이미지는 A + B + C + nginx가 된다. webapp 이미지를 nginx 이미지 기반으로 만들었다면 예상대로 A + B + C + nginx + source 레이어로 구성된다. webapp 소스를 수정하면 A, B, C, nginx 레이어를 제외한 새로운 source(v2) 레이어만 다운받으면 되기 때문에 굉장히 효율적으로 이미지를 관리할 수 있다.
- 컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기read-write 레이어를 추가한다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용한다.
참고
반응형
'Container > Docker' 카테고리의 다른 글
[Docker] docker 실행 시 "Cannot connect to the Docker daemon at unix:///var/run/docker.sock." 에러 해결 방법 (0) | 2021.08.31 |
---|---|
[Docker] Dockerhub에 도커 이미지 배포하기 (0) | 2021.08.31 |
[Docker] Dockerfile 기본 명령어 (0) | 2021.08.31 |
[Docker] Docker run option 종류 (0) | 2021.08.31 |
[Docker] 도커 이미지 만들기 / Dockerfile (0) | 2021.08.30 |