본문 바로가기

대학생활

[Docker] 도커에 관한 이야기

※ 이 포스트는 아티클보다는 감상문 비슷함을 밝힙니다. (나중에 보완할게요..)

 

Let's go~!~!

 

Warming up: End to End 간의 정보전달은 어떻게 이루어질까?.??

* NIC = Network Interface Card

* APP에 있는 파란 반원은 socket임

 

일반적으로 정보의 전달은 OSI 7계층의 순서에 따라 정보의 전달이 이루어 진다.

컴퓨터는 위의 구조에 따라서 각각의 계층이 해석할 수 있는 형태의 데이터로 전달한다.

최종적으로는 010101101.. 과 같은 전기적 신호가 오갈 것이다. 👍👍

 

그렇다면..? 여기서 흔히 쓰는 가상머신(VM)을 추가하면 어떻게 될까..?

User가 VM을 돌리면 여느 APP들과는 달리 중첩된 컴퓨터의 형태를 가진다.

통신은 아까의 상황과 비슷하게 작동하는데, 논리적으로 다른 VM과 구분된 VNet#을 통해 통신한다.

VNet0은 다른 VNet들을 엮어주는 브리지(bridge)같은 역할을 담당한다.

<이 브리지에는 할당된 IP도 있는데 172.17.0.1이라고 함 ㄷㄷ..>  Docker IP입니다.. VM에는 다른 IP가 따로 붙는 걸로..

아 참고로 IP가 고유한 값인 것은 아닙니다..💪💪

 

근데 VM간에 중첩되는 부분이 있잖아요..? 저기저 빨간 박스 부분..

저거 하나로 뭉쳐서 작업하면(Thread처럼..!) 더 효율적인 운영이 가능하지 않을까요..?.?

 

그래서 등장한 것이 Container..

OMG😱😱 "Docker Engine"을 통해서 좀 더 경량의 형태로 통신할 수 있는 듯 보인다.

원래 Kernel의 file system도 container 측에서 활용할 수 있다. (당연히 이 연결도 Docker Engine을 통해서 이뤄집니다.)

 

반.면.에.

 

이 엔진은 Linux 체제에서만 원활히 돌아갈 수 있기에 Window/Mac에서는 그에 맞게 따로 해석해 주는 Layer가 추가적으로 필요하다.

그리고 그것이 "Docker Desktop"이다.😮

 

ㅇㅋ?

ㅇㅋㅇㅋ~

 

Docker 0

위에 보면 잘 나오던 VNet#대신 Docker0(Veth0), Veth1같은 용어가 나오는 걸 알 수 있다.

이들의 정체로 말하자면..

docker zero는 veth(virtual ethernet)을 묶어주는 가상 인터페이스(bridge)이다.

여러 개의 docker 0가 존재할 수 있는데 각각은 통신이 가능하지만, 해당 docker 0 안의 container에서 보낸 정보가 아니면 그 정보를 container까지 전달하지 않고 차단한다.

 

 

다시 말해서, 위의 빨간 방향의 통신은 불가능하고

노란 방향의 통신은 가능하다.

* 기술적으로 불가능한 것은 아니고 구분의 목적이다. 굳이 필요하면 같은 브리지 안에 넣으면 되겠죠?👍

 

Docker 어떻게 써!

 

ㄹㅇ.. 어떻게 써야할까요 ㅠㅠㅠㅠ

도커에는 Pull 기능과 Push기능이 있습니다. Github 써보신 분들이면 바로 감이 오셨을 거 같습니다.

Pull: 저장소(Docker Hub)에서 받아옴
Push: 저장소에 올림

이 Pull, Push의 대상은 바로 "Docker Image"인데 Container를 위한 명세서(설계도?)라고 보시면 됩니다.

Image를 통해 Container 계속 찍어낼 수 있음! ㄷ ㄷ ㄷ

 

Docker Image

 

Image에는 여러번 다운 받을 수 있는 Public Image, 계정당 한 번만 가능한 Private Image가 있습니다.

Public Image는.. 공인되지 않은 것을 쭉쭉 다운받다가 보안 문제가 발생할 가능성이 있어요..!

 

그.런.데.

 

1GB짜리 Ubuntu Image를 22.04, 20.04 이렇게 다운 받았다고 가정해봅시다.

그런데 디스크를 확인해보면 2GB가 안된대요!!! 꺄아아악😱😱!..!..!

진짜 그런 걸까요.. 확인해봅시다!

 

 

이것이 docker pull하기 전

 

 

이것이 후인데.. 뭐죠.. 왜 정확히 명시된 사이즈대로 저장되는 거 같지.. '-'

 

그.래.도.

 

Image끼리 dependency가 있는 부분은 공유가 되는 형태로 저장되는 기술이 있다고 하네요!

즉, 1GB 중 0.8GB는 공유하고 나머지는 각각으로 분리돼서 2GB를 저장하는 것 같지만 실제로는 1.2GB인.. ㅎㅎ..

 

 

ㅎㅎㅎㅎ