Networks/Docker & Linux

SK networks AI Camp - Network & docker 통신

코딩하는 Español되기 2024. 7. 30. 00:10

Network

○ 두 대 이상의 컴퓨터들을 연결하고 서로 통신할 수 있는 것

○ 택배 우편과 인터넷 통신을 비교한 내용(쉽게 설명)

    1. "송신처 주소"와 가까운 영업소에 모임

    2. "수신처 주소"를 보고, 수신처 주소에 가까운 영업소로 전송

    3. 영업소에서 "수신처 주소"에 도착

○ 인터넷에서 데이터를 송수신하는 흐름

    1. "송신처 IP 주소"에 가까운 Router(네트워크기기; 택배 영업소 역할)에 데이터를 송신

    2. Router는 "대상 IP 주소"를 보고 "대상 IP 주소"에 가까운 Router로 보냄

    3. Router로부터 "송신처 IP 주소"가 부여된 컴퓨터(네트워크 기기)에 전

IP(Internet Protocol; 인터넷에서 데이터 전달 프로토콜)

○ IP 주소 : 인터넷상의 컴퓨터 주소. 인터넷에 연결되어 있는 기기에는 반드시 IP주소가 부여됨

○ 공인 IP & 사설 IP

     ● 공인 IP 주소 : 인터넷에 연결하는데 필요한 IP 주소

                               전 세계에서 유일한 IP로 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소

                               외부에 공개되어 있어 인터넷에 연결된 다른 장비로부터 접근 가능 So 방화벽 등 보안 설정해야 함

     ● 사설 IP 주소 : 가정 및 회사와 같은 조직 내의 네트워크(개인 네트워크)에서만 사용되는 IP 주소

                               어떤 네트워크 안에서 사용되는 IP주소

                               네트워크 안에 Router를 통해 할당받는 가상의 주소, 별도의 설정 없이 외부에서 접근 불가능

IP 주소 정의

○ 클래스 풀(classful) 방식

    ● e.g) 100대의 IP주소가 필요한 기업이 "클래스 C"를 사용했을 경우, 클래스 C에서 할당 가능한 호스트 수가 254개에서 필요한 IP주소 100대를 제외하면 154개의 IP주소가 낭비(254 - 100 = 154)

○ 클래스리스(Classless) 방식

     ● 클래스 풀 방식의 단점을 보완한 방식

     ● 서브넷 마스크를 사용해 "네트워크 영역"과 "호스트 영역"의 경계를 자유롭게 변경하는 것을 가능하게 한 방식 

포트

○ 논리적인 접속장소

○ 인터넷 프로토콜(TCP/IP)을 사용할 때, client program이 network상 특정 서버 프로그램을 지정하는 방법 사용

○ 포트번호 : 0 ~ 65,535 (0 ~ 1023번까지의 포트번호는 주요 통신을 위한 규약에 따라 이미 정해진 포트)

포트 포워딩

○ 컴퓨터 네트워크 상에서 패킷이 방화벽 or 라우터 같은 네트워크 게이트를 지날 때 IP 주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환의 응용

외부 포트와 내부포트는 서로 다를 수 있음

내부에서 연결하려는 포트는 IP를 반드시 지정해야 함

하나의 포트로 들어오는 연결을 두 IP로 포워딩 불가(하나의 포트는 하나의 포워딩만 가능)

○ 공유기가 할당한 아이피에만 포워딩 가능


Docker Network

○ Docker 컨테이너는 격리된 환경에서 돌아가기에 기본적으로 다른 컨테이너와 의 통신이 불가능

○ 여러 개의 컨테이너를 하나의 Docker network에 연결시키면 서로 통신 가능

○ 네트워크 종류

 * Default : bridge

    ● bridge : 하나의 호스트 컴퓨터 내에서 컨테이너들 간 소통 가능하게 해 줌

    ● host : 컨테이너를 호스트 컴퓨터와 동일한 네트워크 상에 올림

    ● overlay : 여러 호스트에 분산되어 있는 컨테이너들 간에 연결을 위해 사용 

 

네트워크 조회

docker network ls

 

네트워크 생성

 

○ 명령어 : docker network create <네트워크 이름>

default가 bridge 모드여서 생성하면 my-net이라는 이름의 bridge로 생성됨

docker network create
docker network ls

 

네트워크 상세 정보 조회

 

○ 명령어 : docker network inspect <네트워크 이름>

○ IPAM > Config : 네트워크 정보 확인

Containers : 연결된 컨테이너 정보 확인

딕셔너리 형태여서 Key만 잘 보면 파악할 수 있음

[현재 Container(연결된 것이 없다)]

docker network inspect my-net

 

네트워크에 컨테이너 연결 및 연결 확인

 

○ 명령어 : docker network connect <네트워크명> <컨테이너명>

(저는 이미지들을 다 지워버려서 다시 생성해 주었습니다.)

    - 1) apache-image:v1 생성

    - 2) 컨테이너 생성 및 실행

    - 3) 연결

    - 4) 확인(컨테이너 안에 없던 것이 생겼습니다)

docker build -t apache-image:v1 .
docker run -d -p 80:80 --name apache-v1 apache-image:v1
docker network connect my-net apache-v1
docker network inspect my-net

 

네트워크에서 컨테이너 연결 해제 및 연결 확인

 

○ 명령어 : docker network disconnect <네트워크명> <컨테이너명>

     - 1) 연결 해제

     - 2) 확인(컨테이너가 다시 빈 것을 확인)

     - 3) 네트워크 리스트 확인

docker network disconnect my-net apache-v1
docker network inspect my-net
docker network ls

 

네트워크 제거 및 확인

 

○ 명령어 : docker network rm <네트워크명>

docker network rm my-net
docker network ls