Docker 기초 (7) - 네트워크

이것저것 개발자·2022년 3월 13일
0

Docker 기초

목록 보기
7/17
post-thumbnail

도커 네트워크 구조

veth

virtual ethernet

docker0

도커 엔진에 의해 기본 생성되는 브릿지 네트워크
veth와 eth간 다리 역할

컨테이너도 각각 eth가 생성이 되는데 도커의 브릿지 네트워크와 연결하기 위해 각각 가상의 veth를 생성하게 된다.

컨테이너 포트 노출

컨테이너의 포트를 호스트의 IP:PORT와 연결하여 서비스를 노출

docker run -p [HOST IP:PORT]:[CONTAINER PORT] [container]

기본 형태

docker run -d -p 80:80 nginx

nginx 컨테이너의 80번 포트를 호스트 모든 IP의 80번 포트와 연결

docker run -d -p 127.0.0.1:80:80 nginx

nginx 컨테이너의 80번 포트를 호스트 127.0.0.1 IP의 80번 포트와 연결

docker run -d -p 80 nginx

nginx 컨테이너의 80번 포트를 호스트의 사용 가능한 포트와 연결

-d 👉 백그라운드로 실행

실습

docker run -d -p 80:80 nginx

위 명령어로 80포트를 연결하는 nginx 컨테이너를 실행시켜 보자

curl localhost:80

curl 명령어로 localhost 80번 포트에 request를 보내면

멋있는 html이 reponse로 오면 성공!


docker run -d -p 80 nginx

이번에는 컨테이너의 포트만 지정해준 뒤 실행

호스트의 63181번 포트와 연결하고 있다
curl명령어를 통해 재빠르게 확인해보자

역시나 아름다운 html이 보인다
당연히 첫번째 실습과 같은 80번 포트로 보내면 아무 응답이 오지 않는다.

Expose vs Publish

docker run -d --expose 80 nginx

expose 명령어는 단순히 문서화 용도
포트 연결이 되지 않는다.

docker run -d -p 80 nginx

실제로 포트 연결

도커 네트워크 드라이버

기본 분류

native driver와 remote driver 2가지로 나눠진다

동작방식에 따른 분류

overlay
서버가 여러개 있을 때 각각의 서버에 있는 컨테이너들을 연결시켜 주는 가상의 네트워크 (docker swarm을 사용할 때 사용)

실습

none

docker run -i -t --net none ubuntu:focal

none 네트워크로 ubuntu를 실행시킨 뒤
새로운 터미널을 띄워서 docker inspect로 config를 확인해보자

network의 모든 부분이 null 혹은 빈칸 혹은 0인 것을 확인 할 수 있다.

네트워크가 필요하지 않은 컨테이너 혹은 커스텀 네트워크를 사용할 경우

host

docker run -d --network=host grafana/grafana

위 명령어를 실행 시킨뒤 docker ps로 컨테이너 정보를 확인해보면 포트정보가 보이지 않는 것을 볼 수 있다.
하지만 그라파나의 기본 포트인 3000으로 curl 명령어를 날려보면 제대로 실행되고 있는 것을 확인 할 수 있다!

도커가 제공하는 가상 네트워크를 사용하는 것이 아닌 host의 네트워크를 사용하기 때문에 포트바인딩을 하지 않음

MacOS 에서는 작동을 하지않는데 내용은 아래 확인! (자세한 이유는 나와있지 않다)
https://docs.docker.com/desktop/mac/networking/

bridge

docker network create --driver=bridge simon

docker run -d --network=simon --net-alias=hello nginx
docker run -d --network=simon --net-alias=grafana grafana/grafana

기존의 docker0이 아닌 새로운 커스텀 브릿지 네트워크를 만드는 명령어


simon 이라는 새로운 브릿지가 생성된 것이 확인된다.

nginx와 granfa가 같은 브릿지에 연결되어있기 때문에 컨테이너끼리 통신이 가능하다.


profile
조호영, Developing something

0개의 댓글