Docker Summary

리눅스 컨테이너 기반의 오픈 소스 가상화 플랫폼.

도커 컨테이너 이미지는 운영체제에 구애받지 않고, 새롭게 패키지를 설치할 필요도 없으며, 각종 라이브러리에 대한 의존성의 문제 또한 걱정할 필요가 없다. 만든 컨테이너를 다른 서버로 그대로 옮겨다 놓으면 환경, 모듈 등이 그대로 적용되기 때문에 별도의 환경설정도 필요하지 않다.

 

도커 컨테이너들은 HostOS로부터 GuestOS로 물리적 리소스를 1/n로 나누어 할당받는 것이 아닌 HostOS의 리소스를 다이렉트로 접근해 모든 컨테이너가 공유하며 사용하기 때문에 다른 가상화 방법에 비해 속도가 매우 빠르고 효율적이다.

 

도커는 Layered File System 기반이다. 마치 포토샵처럼 레이어 단위로 컨테이너 이미지를 생성하며, 이 컨테이너들은 서버 위에서 각각 하나의 프로세스처럼 작동하지만 컨테이너 자신은 스스로가 운영체제인 것처럼 생각한다.

 

각 도커 컨테이너는 서로 간에 절대적으로 격리(Isolated)되어 있어 한 컨테이너에 어떤 변화가 발생하더라도 다른 컨테이너에 영향을 주지 않는다.


Registry, Images, Containers, Commands and Daemon in Docker

  • Public과 Private Registry 중 Public Repository를 Docker Hub라고 부르며, Docker Hub에서 이미지를 올리는 것을 Push, 이미지를 받아 오는 것을 Pull이라고 한다. Pull한 이미지는 /var/lib/docker/overlay2에 저장된다.
  • Build는 직접 이미지를 생성하는 것인데 여러가지 베이스 환경을 설정해서 이미지 파일을 만든 후에 Run을 하여 프로세스에 올려 컨테이너로 만들거나 Docker Hub로 Push 할 수 있다.
  • Run은 이미지를 실행하는 명령어인데 이미지가 없을 경우 Pull로 레지스트리에서 이미지를 받아온 후 Run, Start까지 한다. Run을 하게 되면 최대 3가지 처리가 동시에 이루어지고 이미지가 비로소 컨테이너가 되고 프로세스에 올라가게 된다.
  • 실행되고 있는 컨테이너를 Commit해서 현 상태를 이미지로 만들어 Docker Hub로 Push 할 수 있다.
  • 메모리에 올라간 컨테이너를 Kill하면 컨테이너의 프로세스가 종료된다.
  • 메모리에 올라가면 컨테이너(read/write), 올라가지 않은 상태면 이미지(read only)이다.
  • 이 모든 것을 백그라운드에서 실행하고 관리하는 서비스를 dockerd(Docker Daemon)이라고 한다.
  • Docker Daemon을 돌리는 머신은 Docker Host라고 한다(Linux Server).

아래는 Docker Hub의 링크인데 Official Image 인증 마크가 있는 이미지는 안전하지만 그 이외의 이미지는 안전을 보장할 수 없다.

 

https://hub.docker.com 

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com


레이어화 된 컨테이너 이미지

도커의 컨테이너 이미지는 3단의 레이어로 구성되며, 각 레이어는 고유의 UUID(Process ID)를 갖고 있다.

  • Base Image Layer
    • 주로 가상적으로 OS를 구성하는 레이어.
    • 컨테이너의 가장 밑단, 배경이 되는 환경이 구축된다. 컨테이너의 냉동 설비라고 볼 수 있다.
  • Source Code Layer
    • 실행할 소스 코드가 위치하는 레이어.
    • 컨테이너에 싣는 도구라고 볼 수 있다.
  • Execution Layer
    • 실제로 소스 코드를 실행하는 레이어.
    • 컨테이너의 도구를 사용하게 되는 레이어이다.

'IT > Docker' 카테고리의 다른 글

[Docker Swarm] docker-swarm 설치 및 기초  (0) 2021.12.15
[Docker Compose] 설치 방법 및 기본 명령어  (1) 2021.12.14
[Docker] Container Resource Management  (0) 2021.12.14
Docker Labs  (0) 2021.10.27

Network Device에서 Hub를 하나 놔주고 End Device에서 PC 4대를 놔준다(드래그 앤 드랍).

번개 -> Copper Strength-Through(3번째) 클릭 후 Hub와 PC들 간에 연결한다.

PC0의 데스크탑에서 IP Configuration 클릭.

IP를 지정해주면 서브넷 마스크는 자동으로 설정된다. 4개의 PC 모두 설정해준다.

데스크탑 -> 커맨드 프롬프트 : ping 192.168.10.20

10에서 MAC Address 정보를 얻기 위한 패킷과 핑 전송 패킷 두 개를 허브로 전송하고

허브가 연결된 모든 디바이스로 브로드캐스트를 뿌린다.

 

20은 Decapsulation 과정에서 자신에게 온 패킷임을 확인하고 수신하지만

나머지 PC들은 자신에게 온 패킷이 아님을 확인하고 폐기한다.

20에서 10으로 핑을 보내줄 때도 허브에서 브로드캐스팅이 이루어진다.

30과 40에서의 불필요한 트래픽이 생기는 것이다.

핑을 성공적으로 수신하는 모습.

arp -a 명령어를 통해서 한 번 통신을 주고 받았던 20의 Physical Address(MAC Address)가

등록되었음을 확인할 수 있다. 등록 이후엔 핑을 날렸을 때 패킷이 하나만 날아가게 된다.

(헛짓거리를 좀 해서 커맨드 창이 좀 더럽다 ㅎㅎ...)


이번엔 Hub를 Switch로 바꾸었다. 똑같이 연결해준다.

30으로 패킷 2개가 전송되는 모습.

MAC Address를 모를 때는 모든 디바이스에게 뿌리기 위해서 16진수의 최대값인 F로 전부 채워서 전송한다.

(수신처의 MAC Address가 FF:FF:FF:FF:FF:FF의 주소를 가지면 모든 장치들이 처리해야 하는 브로드캐스트 Frame이 됨)

스위치에서 브로드캐스트, 10과 40은 폐기, 30은 수신하였다.

1계층 장비인 Hub와는 다르게 2계층 장비인 Switch는 디바이스의 MAC Address를 자체적으로 학습해서

한 번 통신을 주고 받은 디바이스끼리는 더 이상 브로드캐스트를 하지 않고 필요한 통신만을 한다.

스위치의 CLI에 들어와서 enable로 관리자 권한을 활성화하고 show mac-address-table 명령어를 입력하면

등록된 10과 30의 MAC Address가 나온다.


이번엔 서버를 설치해 연결했다. PC와 마찬가지로 IP 설정을 한다.

 

이후 찍었던 스크린샷이 전부 저장이 되지 않아서 글로만 쓴다.

서버 머신에 디폴트로 켜져 있는 HTTP 서버에 접속하기 위해 PC에서 데스크탑 -> 웹 브라우저를 클릭해 들어간 후

URL 입력 창에 192.168.10.80 을 입력해서 웹 서버에 접근해 보았다.

 

 

'IT > Network Theory' 카테고리의 다른 글

ARP(Address Resolution Protocol) with L2SW  (0) 2021.08.30
IPv4 Header  (0) 2021.08.27
MAC & LLC : Data-Link Layer  (0) 2021.08.27
LAN(Local Area Network) / Topology  (0) 2021.08.27
IP / Mask / Subnet Mask  (0) 2021.08.27

Encapsulation(택배 포장)

 

Layer 4 PDU (Segment) : TCP 헤더 붙이기(제품명 적기)

Layer 4 Header(Port Number) + Original Data

계층별 장비 - L4 Switch - 4계층 헤더만 처리할 수 있음


Layer 3 PDU (Datagram = Packet) : IP 헤더 붙이기(이름 적기)

Layer 3 Header(Source IP, Destination IP) + Segment

계층별 장비 - Router - 3계층 헤더만 처리할 수 있음

 

MTU(Maximum Transmission Unit) : 한 패킷이 전송할 수 있는 최대 용량. 이더넷에서는 1,500bytes.

MSS(Maximum Segment Size) : TCP Header와 IP Header의 기본 사이즈가 20bytes이므로 MSS는 1460bytes이다.


Layer 2 PDU (Frame) : Ethernet 헤더 붙이기(집 주소 적기)

Layer 2 Header(MAC Address) + Datagram + Layer 2 Footer

계층별 장비 - Switch - 2계층 헤더만 처리할 수 있음


데이터를 신호로 변환해서 전송

계층별 장비 - Hub - 전기적인 신호만 처리할 수 있음

 

 

Decapsulation(택배 포장 뜯기)

 

받은 신호를 데이터로 변환

계층별 장비 - Hub - 전기적인 신호만 처리할 수 있음


Layer 2 PDU (Frame) : Ethernet 헤더 제거

Frame - (Layer 2 Header + Layer 2 Footer) = Datagram

계층별 장비 - Switch - 2계층 헤더만 처리할 수 있음


Layer 3 PDU (Datagram) : IP 헤더 제거

Destination IP가 맞는지 확인

Datagram - IP Header = Segment

계층별 장비 - Router - 3계층 헤더만 처리할 수 있음


Layer 4 PDU (Segment) : TCP 헤더 제거

TCP 헤더 확인, 포트 넘버 확인

Segment - TCP Header = Original Data

계층별 장비 - L4 Switch - 4계층 헤더만 처리할 수 있음

 

 

 

'IT > Network Theory' 카테고리의 다른 글

LAN(Local Area Network) / Topology  (0) 2021.08.27
IP / Mask / Subnet Mask  (0) 2021.08.27
OSI 7 Layer Model & TCP/IP Model  (0) 2021.08.26
Port Number  (0) 2021.08.26
TCP Header / UDP Header / TCP 3 Way Handshake / TCP 4 Way Handshake  (0) 2021.08.26

+ Recent posts