Container IP 어떻게 할당되지? 기도해야 되냐?

컨테이너 만든 후 컨테이너 ip는 어떻게 생성되고 생성된 ip는 어떻게 확인하는가?

컨테이너에 ip가 부여되는 방식

  • docker run -itd --name [컨테이너이름] [이미지이름] 이렇게 network에대한 세팅을 안하면 default로 "bridge"라는 이름을 갖은 브릿지 네트워크에 자동 할당 된다.(아새 스샷에 표시해둠)
  • 컨테이너 생성될때마다 보통 increment된 ip주소가 자동 할당됨(보통 그렇다는거지 반드시 이러한 규칙은 아님)
  • 예를들어 A라는 컨테이너 만들때 172.17.0.2이 할당됐고, 이후에 B라는 컨테이너 만들면 172.17.0.3이 됨
  • A => B 순서로 만들면 A는 172.17.0.2, B는 172.17.0.3 할당됨
  • B => A 순서로 만들면 B는 172.17.0.2, A는 172.17.0.3 할당됨

컨테이너에 ip확인하는 방법

$ docker inspect [컨테이너이름]|grep IP

## 아래와 같이 짧게 입력해서 Networks 부분에서 찾아볼수도있다 
$ docker inspect [컨테이너이름] 

별도의 network 대역대를 사용하고 싶을때 => network create

  • docker network create 한다
$ docker network create [생성할 새로운 브릿지이름]

# 생성한 브릿지의 ip주소 규칙(?) 확인 => 스샷 확인
$ docker inspect [생성한 새로운 브릿지이름]

# (참고) 드라이버 수정하고 싶으면 -d 옵션 사용
docker network create -d [드라이버종류] [브릿지이름]

  • 위 스샷 같은경우 컨테이너를 만들때마다 172.19.0.1 ~ 172.19.0.n 의 ip주소가 생길 것

컨테이너 만들때 생성한 network 할당해주기

  • docker run -itd --name [지어줄 컨테이너 이름] --net [생성한 네트워크 이름] [컨테이너 생성시 사용할 이미지 이름]
  • docker exec [컨테이너이름] sh -c "ip addr" 하면 띄워져있는 컨테이너의 ip address 확인 가능

Alias 주고 bridge 내에서 동네 아는 형 만들기

  • --net-alias [alias로 지정할 이름] 옵션 사용하는 이유 : 이 옵션을 활용해서 여러 컨테이너의 네트워크 주소를 하나의 alias로 묶어줄 수 있음(컨테이너별 ip 주소는 다름)
  • docker run -itd --name [지어줄 컨테이너 이름] --net [생성한 네트워크 이름] -- net-alias [alias로 지정할 이름] [컨테이너 생성시 사용할 이미지 이름]
  • (상황) A,B,C는 alias 한 상태이고 D라는 컨테이너만 alias 안한상태에서 ping테스트하면 어떻게 되는가??
    • 아래 docker 명령어를 여러번 입력해보면 A,B,C 중 하나와 ping 테스트 되는 것을 확인 가능
    • docker exec D sh -c "ping [alias한 이름]

Container Network 이용해 쌍둥이 만들기(같은 ip주소값 갖게하기)

  • --net container:[쌍둥이 네트워크로 해줄 이미 만들어져있는 컨테이너 이름] 옵션 : A, B라는 컨테이너가 있을때 두 컨테이너를 동일한 네트워크 ip 주소값을 갖게하고자 할때 사용함
  • docker run -itd --name [지어줄 컨테이너 이름] --net container:[쌍둥이 네트워크로 해줄 이미 만들어져있는 컨테이너 이름] [컨테이너 생성시 사용할 이미지 이름]

(예제 : A, B 컨테이너를 Container Network 이용해서 같은 주소값 갖게하기)

  • docker run -itd --name A centos
  • docker run -itd --name B --net container:A centos
  • 아래 스샷을 보면 동일한 ip 주소 갖는것을 확인할 수 있다.

(상황 : 컨테이너 A를 stop 시킨다면?)

  • A를 기준으로 Container Network해줘서 쌍둥이로 만들어줬기 때문에 B는 네트워크가 없어짐(링크가 깨졌다고 생각하면된다.
  • 다시 A를 stop 후 start해도 B는 네트워크가 없음
  • 이럴경우 A를 stop 후 start한 다음에 docker restart B 이렇게 B를 재시작해주면 B에 네트워크가 할당된다.

References

profile
oneofakindscene

0개의 댓글