[Docker] 2장 : 도커 엔진_네트워크

post-thumbnail

1. 도커 네트워크 구조

위에서 컨테이너 내부에 들어가서 ifconfig 명령어를 통해 컨테이너의 네트워크를 확인한 적이 있다. 도커는 컨테이너 내부 IP를 순차적으로 할당하고, 이 IP는 컨테이너를 재시작할 때마다 변경될 수 있다. 이러한 내부 IP들은 도커가 설치된 호스트만 접근할 수 있으므로, 외부와 연결될 필요가 있다.

도커는 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성하여 외부와의 네트워크를 제공한다. 이 인터페이스의 이름은 veth(virtual eth)로 시작하고 사용자가 생성할 필요 없이 컨테이너가 생성될 때 도커엔진이 자동으로 생성해준다.

호스트에서 ifconfig 명령어로 확인한 네트워크 인터페이스이다.

도커 네트워크 구조를 구글링해보면 쉽게 이해할 수 있을 것이다.


2. 도커 네트워크 기능

컨테이너를 생성하면 docker 브리지를 통해 외부와 통신할 수 있는 환경을 사용할 수 있지만, 사용자의 선택에 따라 여러 네트워크 드라이버를 쓸 수 있다.

도커에서 기본적으로 제공하는 드라이버에는 브리지, 호스트, 논, 컨테이너, 오버레이 등이 있다.

도커의 네트워크를 다루는 명령어는 docker network로 시작한다. 도커에서 기본적으로 쓸 수 있는 네트워크를 docker network ls로 확인해본다. 컨테이너 생성 시 디폴트는 docker 브리지를 사용한다.

(1) 브리지 네트워크

사용자 정의 브리지를 새로 생성해서 컨테이너에 연결하는 네트워크 구조이다. 컨테이너는 연결된 브리지를 통해 외부와 통신할 수 있다.

docker network create --driver bridge mybridge
이렇게 사용자 정의 네트워크를 생성하면 컨테이너를 생성할 때 --net 옵션의 값으로 만든 브리지를 설정하면, 컨테이너가 해당 네트워크를 사용하도록 설정할 수 있다.
사용자 정의 네트워크는 유동적으로 컨테이너에 떼었다가 붙였다가 할 수 있다.

(2) 호스트 네트워크

컨테이너 생성 시, --net 옵션을 host로 주면 호스트의 네트워크 환경을 그대로 쓸 수 있다.
따라서 컨테이너의 네트워크를 호스트 모드로 설정하면, 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 서비스 할 수 있다.

(3) 논 네트워크

--net옵션으로 none을 주면, 말 그대로 네트워크를 안쓰겠다는 의미이다. 외부와의 통신이 없다는 말이다.

(4) 컨테이너 네트워크

--net 옵션으로 container:[다른 컨테이너 이름]을 주면, 다른 컨테이너의 네트워크 환경을 공유한다. 따라서 새롭게 내부 IP를 할당받지 않으며, 호스트에 veth도 생성되지 않는다.

(5) 브리지 네트워크랑 --net-alias / MacVLAN 네트워크



3. 컨테이너 로깅

추가 예정


4. 컨테이너 자원 할당 제한

추가 예정
1. 컨테이너 메모리 제한
2. 컨테이너 CPU 제한
3. Block I/O 제한

0개의 댓글