기존 시스템 (Host OS) 에서 독립된 공간을 만드는 기술에 대해 이야기해볼 것이다. 여기서 이야기할 독립된 공간을 만드는 방법이란 가상화 기술을 의미한다.
도커에 대한 이야기를 하기 전에 컨테이너에 대해 알아야한다. 여기서 컨테이너는 STL 이 아니다.
서버 환경을 창고 같은 작은 방으로 분할하여 데이터나 프로그램을 독립적으로 두는 공간을 컨테이너라고 한다. 즉, 기존 시스템(OS) 과 격리된 공간을 만드는 기술이다.
❗️ 컨테이너는 Linux 운영체제의 기술이기 때문에, Window, Intel, MacOS 와 같은 운영체제에서 컨테이너를 사용하려면 Linux 를 설치해야한다.
도커는 컨테이너 생성, 구동 및 관리를 효과적으로 하기 위해 만들어진 소프트웨어 중 하나다.
(☝🏻 chatGPT 에게 물어보니 Podman, LXD, rkt 등이 있다고 한다.)
도커는 그림에서 볼 수 있듯이 도커 엔진을 설치하여 사용할 수 있다.
컨테이너를 만들기 위해서 도커 엔진과 이미지가 필요하다. 이미지는 컨테이너의 틀과 같은 역할을 한다.
예를 들어 MySQL 컨테이너를 만드려면 MySQL 이미지를 사용하고, 아파치 컨테이너를 만드려면 아파치 이미지를 사용해야한다.
하나의 이미지가 있다면 같은 컨테이너를 여러 개 만들 수 있다.
컨테이너로도 이미지를 만들 수 있다.
- 수정을 수월하게 할 수 있다. 컨테이너로 이미지를 만들 수 없다면, 수정이 필요할 때 각 컨테이너를 직접 수정해야하기 때문이다.
도커 엔진 간에 이동이 가능하다.
오픈 소스처럼 공개된 컨테이너 이미지가 모여 있는 곳이다.
운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.
모든 컨테이너에는 ‘리눅스 운영체제 비슷한 무언가’가 있는데, 리눅스 운영체제가 있다는 의미는 아니다.
그림을 보면 도커 엔진 아래 리눅스 운영체제가 있는데, 컨테이너 속에 또 리눅스 운영체제가 있다.
커널의 유무이다.
도커 엔진 아래에 있는 리눅스는 커널이 있지만,
컨테이너에 있는 리눅스는 커널 없이 ‘그 외’의 부분만 있다.
❗️운영체제는 ‘커널’과 ‘그 외’로 나뉜다. ‘커널’은 운영체제의 핵심으로 하드웨어를 주로 다룬다. ‘그 외’는 프로그램과 커널의 인터페이스 역할을 한다.
☝🏻 도커 엔진 아래에 리눅스 운영체제가 있는 건 알겠는데, 왜 컨테이너 속에 또 있는 걸까?
바로 컨테이너가 완전히 분리되어 있기 때문이다. 컨테이너가 분리되어 있기 때문에 컨테이너 밖과 안이 서로 요청을 주고 받을 수 없다.
이를 해결하기 위해 컨테이너 안에 커널 없이 리눅스를 넣은 것이다.
❗️ 컨테이너는 Linux 운영체제의 기술이기 때문에, 컨테이너를 사용하려면 Linux 가 필요하다.
이를 위해 도커 데스크탑이라는 프로그램을 설치하면 Linux 환경이 만들어지며, Window, intel, Mac OS 등 에서도 컨테이너를 사용할 수 있게 된다.
https://www.docker.com/products/docker-desktop/
독립된 공간을 구성하는 다른 방법에는 VM(가상머신) 도 있다.
이 둘의 차이점은 뭘까??
컨테이너와 VM의 차이점을 간단하게 이야기해 본다면 guest OS의 유무라고 할 수 있다.
VM과 달리 컨테이너는 guest OS가 존재하지 않으며 이로부터 자원 이용 효율성에서의 차이가 발생하게 된다.
VM은 하나가 늘 때마다 Guest OS에 대한 자원을 할당해주어야하는 반면,
컨테이너는 Host OS 의 자원을 공유하기 때문에 어플리케이션 구동을 위한 패키지만 있다면 컨테이너를 작동시킬수 있다.
[도서] 그림과 실습으로 배우는 도커
컨테이너
https://tecoble.techcourse.co.kr/post/2021-07-30-lxc-container/