CKA 공부 32일차
in Devops on Kubernetes
Docker Networking
도커의 네트워크에 대해 공부해보자.
eth0 인터페이스는 로컬 네트워크에 연결한다.
컨테이너를 구동하면 특정 옵션을 줄 수 있는데
docker run --network none nginx
옵션이다.이렇게 생성된 도커 컨테이너의 네트워크는 완벽히 독립된다.
컨테이너는 호스트 네트워크에 붙는다.
컨테이너와 호스트 사이에는 네트워크 독립적이지 않다.
80포트로 웹 애플리케이션을 컨테이너로 배포한다면, 호스트 주소에 80포트에 매핑된다.
80번 포트로 또다른 도커를 구동한다고 하더라도 같은 호스트 내에서 같은 포트로 동작하게 되므로 이 컨테이너는 실행될 수 없다.
도커 네트워크인 브릿지는 어떻게 동작할까?
도커가 호스트에 구동되면 내부 private 네트워크인 브릿지가 생성된다.,
docker network ls
를 ㅇ비력하면bridge
를 확인할 수 있다.도커의 네트워크를 브릿지라고 부르며 호스트 네트워크는
docker0
라는 이름으로 생성한다.ip link
명령어를 수행하면docker0
라는 네트워크를 확인할 수 있다.브릿지는 호스트로의 일종의 인터페이스와 같은 역할을 담당한다.
컨테이너가 생성되면 도커는 네트워크 네임스페이스를 생성한다.
도커는 어떻게 컨테이너에게 네트워크 네임스페이스를 브릿지 네트워크에 붙일 수 있을까?
여기서 컨테이너와 네트워크 네임스페이스는 같은 것을 의미한다.
이전 시간과 마찬가지로 가상 케이블을 생성한다.
케이블의 형태는 컨테이너와 docker0(bridge)로 연결되어진 형태이다.
먼저 한쪽의 케이블이
docker0
에 붙게 되고 다른 한쪽은 컨테이너에 붙게된다.ip -n {docker_name} link
로 입력하면 나오게 된다.ip -n {docker_nmae} addr
을 입력하면 도커 컨테이너의 IP도 확인이 가능하다.도커 컨테이너가 생성되면 새로운 네트워크 네임스페이스를 생성해 이름을 붙여주고, 가상 케이블을 만들어 Bridge와 컨테이너를 연결한다.
그러나 호스트 외부에서 도커 컨테이너의 IP로 접근하려고 해도 실패한다.
이는 호스트에서 받아주는 네트워크와 Bridge의 포트를 연결해줘야하기 떄문인데, 이를 위해 다음과 같은 옵션을 줄 수 있다.
docker run -p 8080:80 nginx
외부로부터 들어오는 8080포트를 컨테이너 내부의 80포트와 연결하겠다는 옵션이다.
즉 호스트의 8080포트로 접근하면 컨테이너와 연결될 수 있다.