본문 바로가기
IT/도커

10. 네트워킹

by 노오-력 2023. 1. 27.

Docker를 설치하면 자동으로 Bridge, none(null), host 라는 3개의 네트워크를 생성한다.

bridge 네트워크는 docker 가 호스트에 생성한 프라이빗 내부 네트워크이다.

모든 컨테이너는 기본적으로 이 네트워크에 연결되며

보통 172.17로 시작하는 내부 ip가 할당된다.

이 내부 ip를 사용해 컨테이너끼리 액세스 할 수 있다.

 

외부에서 이 컨테이너에 액세스 하려면

컨테이너의 포트를 docker host의 포트에 매핑하면 된다.

$ docker run -p 8080:8080 my-webapp

 

 

 

host 네트워크로 연결하면 포트 매핑 없이 자동으로 같은 포트에 외부접속이 가능하다.

하지만 이미 사용중인 포트이기 때문에 

같은 포트로 다른 웹컨테이너를 실행할 수 없다.

 

 

none 네트워크에서 컨테이너는

외부 네트워크나 다른 컨테이너에 액세스 할 수 없다.

격리된 네트워크에서 실행되기 때문이다.

 

 

 

 

기본 bridge 네트워크에 연결된 컨테이너는 서로 통신할 수 있다.

하지만 docker 호스트 내부에서 컨테이너를 격리시키고 싶다면?

내부 네트워크를 새로 생성하면된다.

네트워크 목록을 확인하려면 아래 명령어를 사용하면된다.

$ docker network ls

 

 

 

해당 컨테이너의 네트워크 설정과 ip 주소를 확인하려면 아래 명령어를 사용하면된다.

$ docker inspect [container_id or name]

 

 

 

 

내장 DNS 서버

webapp 컨테이너가 mysql 데이터베이스 컨테이너에 액세스 하려고한다.

mysql.connect(172.17.0.3) 과 같이

컨테이너 내부ip 주소를 사용하는 방법이 있다.

하지만 시스템이 재부팅 되었을 때, 같은 ip가 배정된다는 보장이 없어 좋은방법은 아니다.

정답은 컨테이너 이름을 사용하는것이다.

mysql.connect(mysql) 과 같이

docker 호스트에 있는 모든 컨테이너는 컨테이너 이름으로 서로간에 액세스 할 수 있다.

이것이 가능한 이유는 DNS 서버가 내장되어 있기 때문이다.

내장 DNS 서버는 항상 127.0.0.11 로 작동한다.

 

 

 

 

 

 

'IT > 도커' 카테고리의 다른 글

React + vite + typescript 프로젝트 도커 이미지 빌드  (0) 2023.06.26
9. 도커 엔진, cgroups  (0) 2023.01.25
8. docker registry  (0) 2023.01.25
7. docker compose  (0) 2023.01.25
6. CMD vs ENTRYPOINT  (0) 2023.01.22