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 |