[ 2022.11.26 TIL-Docker 컨테이너 간 통신하기 ]

Coosla·2022년 11월 26일
0

TIL

목록 보기
22/29

Docker 컨테이너 간 통신하기

✏️ 컨테이너의 통신 방법

  • docker run ...명령어를 실행하면 docker0라는 도커 네트워크 인터페이스가 생성
  • docker0
    • 컨테이너가 외부로 통신하거나 외부 유저가 컨테이너로 접속할 수 있는 통로 역할을 하는 인터페이스
    • virtual ethernet bridge를 지원하는 가상 네트워크 지원
    • 컨테이너가 가지고 있는 IP 대역대와 물리(Host) 장비가 가지고 있는 네트워크를 연결
    • NAT 서비스와 포트포워딩을 지원
    • L2 통신 기반
  • 컨테이너
    • veth 인터페이스 생성(sandbox)
    • docker0가 172.17.0.0/16이면 컨테이너는 172.17.X.X로 IP 주소를 할당받음
  • 통신 흐름

    외부 네트워크 <-> docker0 <-> 컨테이너

✏️ 컨테이너간 통신 방법

  • docker run ... --link 컨테이너명:지정할컨테이너명 ...

✏️ 외부에서 컨테이너와 통신하기

  • 포트 포워딩 (port-forwarding)
    • container port를 외부로 노출시켜 외부 연결 허용
    • docker run -d --name 컨테이너이름 -p HostPort:ContainerPort 컨테이너이미지
    • -p hostPort:containerPort
      • HostPort는 동일한 포트를 사용할 수 없음
      • ContainerPort는 컨테이너마다 지정된 IP가 달라 동일한 포트를 사용 가능
      • HostPort와 ContainerPort가 동일하지 않아도 해당 컨테이너로 접속 가능
    • -p containerPort
      • HostPort는 랜덤으로 포트가 지정되고 ContainerPort는 지정한 포트로 지정
    • -P
      • 도커파일에 정의되어 있는 Expose 옵션에 따라 포트를 랜덤으로 지정

✏️ 컨테이너 네트워크

  • Static IP 지정하기
    • docker0에서는 Static IP를 지정할 수 없음
    • docker0의 네트워크 대역 변경해서 지정 가능
    • User Defined Bridge Network를 통해 Static IP 지정
      • docker network create --driver bridge
        --subnet 192.168.100.0/24 --gateway 192.168.100.254 네트워크명
        • driver : 기본값이 bridge, 네트워크 종류를 지정
        • subnet : 서브넷 지정, 생략하면 자동으로 지정(172.18.x.x, 18 부분이 증가)
        • gateway : 게이트웨이 지정, 생략하면 자동으로 지정(172.18.0.1 이런식으로 할당)
      • docker network ls
        • 네트워크 확인
      • docker run ... --net 네트워크명 --ip 해당네트워크 IP주소 ...
        • net : 생략하면 docker0로 지정
        • ip : 컨테이너 IP 지정

참고

profile
프로그래밍 언어 공부 정리

0개의 댓글