[Docker] 도커(docker)개요 & NAPT

신현식·2023년 1월 30일
0

구름_Docker

목록 보기
2/6
post-thumbnail

도커

도커는 컨테이너 기술을 사용하여 애플리케이션의 실행환경을 구축 및 운용하기 위한 플랫폼이다. 애플리케이션 실행에 필요한 것을 하나로 모아 docker 이미지를 관리함으로써 애플리케이션의 이식성을 높일 수 있다.

Docker 이미지를 만드는 기술(Build)

도커는 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아서 docker 이미지를 만든다.
docker 이미지의 정체는 애플리케이션의 실행에 필요한 파일들이 저장된 디렉터리이다. docker 이미지는 docker 명령을 사용하여 수동으로 만들거나 Dockerfile이라는 설정 파일을 만들어 그것을 바탕으로 자동으로 이미지를 만들 수도 있다. CI/CD 관점에서 코드에 의한 인프라 구성 관리를 생각하면 Dockerfile을 사용하여 관리하는 것이 바람직하다.

Docker 이미지를 공유하는 기술(Ship)

Docker이미지는 Docker 레지스트리에서 공유할 수 있다. 예를 들어 Docker의 공식 레지스트리인 Docker Hub에서는 우분투나 centOS 같은 Linux 배포판의 기본 기능을 제공하는 베이스 이미지를 배포하고 있다. 이런 베이스 이미지에 미들웨어나 전개할 애플리케이션 등을 넣은 이미지를 겹처서 독자적인 도커 이미지를 만들어 나간다.

Docker 컨테이너를 작동시키는 기능(Run)

Docker는 linux 상에서 컨테이너 단위로 서버 기능을 작동시킨다. 이 컨테이너의 바탕이 되는 것이 docker 이미지이다. 도커의 경우 이미 움직이고 있는 OS 상에서 프로세스를 실행시키는 것과 거의 똑같은 속도를 빨리 실행시킬 수 있다. 도커는 하나의 linux 커널을 여러개의 컨테이너에서 공유하고 있다.

도커 네트워크 구성(가상 브릿지/가상 NIC)

Linux는 Docker를 설치하면 서버의 물리 NIC(Network Interface Card)가 docker0이라는 가상 브리지 네트워크로 연결된다. docker0은 도커를 실행시킨 후에 디폴트로 만들어진다. 도커 컨테이너가 실행되면 컨테이너에 172.17.0.0./16 이라는 프라이빗 IP 주소가 eth0으로 자동으로 할당된다. 이 가상 NIC는 OSI Layer 2인 가상 네트워크 인터페이스로, 페어인 NIC와 터널링 통신을 한다. 가상 NIC(vethxxx)는 컨테이너에서 eth0으로 인식된다.Docker 컨테이너와 외부 네트워크가 통신할 때는 가상 브리지 docker0와 호스트 OS의 물리 NIC에서 패킷을 전송하는 장치가 필요한데 Docker에서는 NAPT 기능을 사용하여 연결한다.

NAPT(Network Address Port Translation)

하나의 IP 주소를 여러 컴퓨터가 공유하는 기술로 IP 주소와 포트 번호를 변환하는 기능이다. 프라이빗 IP 주소와 글로벌 IP 주소를 투과적으로 상호 변환하는 기술로, TCP/IP의 포트 번호까지 동적으로 변환하기 때문에 하나의 글로벌 IP 주소로 여러 대의 머신이 동시에 연결할 수 있다. Docker에서는 NAPT로 Linux의 iptables를 사용하고 있고 Linux에서 NAPT를 구축하는 것을 IP 마스커레이드(IP mascarade)라 한다.

즉 프라이빗 IP 주소를 퍼블릭 IP 주소로 변환할 때 프라이빗 IP 주소별로 서로 다른 포트 번호로 변환한다는 것이다.
예를 들어 클라이언트 A가 보낸 요청은 포트 번호 23479로 하고, 클라이언트 B가 보낸 요청은 포트 번호 34011으로 한다. 인터넷상의 서버로부터 NAPT의 퍼블릭 IP 주소의 서로 다른 포트 번호 앞으로 응답이 되돌아온다. 이로써 하나의 퍼블릭 IP 주소와 여러 개의 프라이빗 IP 주소를 변환할 수 있다.

Docker에서는 컨테이너 시작 시에 컨테이너 안에서 사용하고 있는 포트를 가상 브리지인 docker0에 대해 개방한다.
ex) 컨테이너 시작 시에 컨테이너 안의 웹 서버가 사용하는 80 포트를 호스트 OS의 8080 포트로 전송하도록 설정
-> 외부 네트워크에서 호스트 OS의 8080 포트에 액세스 하면 컨테이너 안의 80 포트로 연결됨

💡 NAT(Network Address Translation)

프라이빗 IP 주소가 할당된 클라이언트가 인터넷상에 있는 서버에 액세스 할 때 NAT 라우터는 클라이언트의 프라이빗 IP 주소를 NAT가 갖고 있는 퍼블릭 IP 주소로 변환하여 요청을 송신한다. 응답은 NAT 라우터가 송신처를 클라이언트의 프라이빗 IP 주소로 변환하여 송신한다.

이러한 주소 변환에 의해 프라이빗 네트워크상의 컴퓨터와 인터넷상의 서버 간의 통신이 성립된다. 그런데 NAT의 경우 퍼블릭 IP 주소와 프라이빗 IP 주소를 1:1로 변환하기 때문에 동시에 여러 클라이언트가 액세스 할 수 없다.

profile
전공 소개

0개의 댓글