2022. 3. 8. 15:19ㆍ프로그래밍/Docker
클라우드의 클 자만 꺼내도 어떻게든 도커라는 단어를 만나게 됩니다.
그만큼 도커의 활용도가 높아지고 여러 환경에서도 자주 쓰이고 있습니다.
가끔 도커를 VM이라고 부르는 사람이 있는 거 같은데 도커는 아직까지는! VM이면서 VM이 아닌 친구입니다.
도커는 MicroVM을 완벽하게 지원하려 여러 업데이트를 하고 있는 것으로 알고 있습니다.
만약 MicroVM을 완벽하게 지원해준다면 VM이라고도 부를 수 있을 거 같습니다.
VM은 Host위에 각 서비스별 Guest OS가 존재하여 완전 독립적인 구성을 가지고 있는 반면에(왼쪽 표)
도커는 Container 라는 개념으로 Host위에 Host의 커널을 공유하며(Supporting Files 쯤 해당) 각각의 서비스를 제공해줍니다.
Linux Container(LXC)? 리눅스 컨테이너?
컨테이너 기술은 OS레벨의 가상화로(Host) 프로세스를 격리시켜 동작하는 방식이라고 합니다.
OS레벨의 가상화를 조금 더 부가 설명을 하면.
리눅스/유닉스에서 chroot라는 명령어와 가장 가깝다고 생각하시면 됩니다. (위 사진처럼)
이미지 출처 : https://borosan.gitbook.io/lpic2-exam-guide/2073-securing-a-dns-server
# 도커의 초창기 버전에서는 chroot 명령어를 발전시킨 LXC (Linux Container)에 의존하여 개발되었으나
# 현재는 LibContainer를 사용하여 의존도를 떨구고 있습니다.
# LibContainer는 LXC와 비슷한 자체 라이브러리입니다.
조금 더 깊숙하게 들어가면 컨테이너는 리눅스 기능인 Namespace와 CGroup(Control Group)을 기반으로 만들어집니다.
Namespace
프로세스를 독립시켜주는 가상화 기술입니다.
프로세스 ID가 동일해도 서로 다른 프로세스입니다.
VLAN 개념과 비슷한 이 기술은 같은 커널 위를 돌지만 이 기술로 만들어진 프로세스는
현 커널에 존재하는 프로세스와 충돌을 일으키지 않습니다.
독립된 프로세스들은 PID, IPC, UID, Network, Mound, UTS가 독립적으로 존재합니다.
Network에서 유추할 수 있듯이 이 프로세서들은 IP로 통신을 할 수 있습니다.
CGroup (Control Group)
잉여 하드웨어 자원을 분배하는 기능입니다.
Namespace와 CGroup을 합쳐 만든 컨테이너를 LXC (Linux Container)라고 부릅니다.
VM과 비슷하게 하나의 Host위에 여러 서비스들을 올려 제공할 수 있습니다.
그래서 도커가 뭔데
이미지 출처 : redhat.com/ko/topics/containers/what-is-docker
위에서 열심히 컨테이너 설명을 읽고 오셨을 겁니다.
도커가 무엇인지 조금 쉽게 설명하기 위해 아래 표를 그려봤습니다.
Mysql |
아파치 |
Docker |
도커 위에 아파치 전용 방을,
그 위든 옆이든 아무튼 어디다가 Mysql 전용 방을 두어 서로 상호작용이 가능하게 해주는 친구입니다.
단지 이 행위를 VM처럼 각각 Guest OS를 두지 않아 가볍고 빠르다는 장점 등이 있습니다.
마지막으로 LXC와 Docker를 구별하자면
LXC와 도커의 차이점 사진을 보시면서 읽어주세요!
LXC는 하나의 컨테이너 안에 여러 서비스들을 제공할 수 있습니다.
Docker는 하나의 컨테이너 안에 하나의 서비스만 제공하길 권장하고 있습니다.
도커같은 이유는 MSA(Micro Service Architecture)를 선호하는 거 같다고 생각합니다.
여러 서비스들 중 문제가 되는 서비스만 집중적으로 대응이 가능하다는 점과 업데이트 시 각 서비스들 간의 간섭을 받지 않거나 최대한 덜 받을 수 있습니다.
또한 Docker는 캡처 기능을 지원하지만 LXC는 캡쳐기능을 지원하지 않습니다. (스냅샷 기능)
'프로그래밍 > Docker' 카테고리의 다른 글
Docker에서 centOS7 Failed to get D-Bus connection 에러 해결하기 (1) | 2023.01.13 |
---|---|
도커로 나만의 웹 아카이브 저장소 만들기 (0) | 2022.12.15 |
Mac에서 Docker 가지고 놀아보기 [1/2] (0) | 2022.03.08 |