개요
도커의 컨테이너는 내부에 네트워크가 따로 존재한다. 우리가 자주 사용하는 localhost에 대해서 생각해보자. localhost는 기본적으로 로컬머신의 ip주소를 나타낸다. 자, 앞서 컨테이너에 네트워크가 따로 존재한다고 했다. 즉, 도커 컨테이너 내부에서 실행되는 app에서 localhost를 사용한다면 도커 컨테이너의 내부 네트워크를 가리킨다. 그럼 어떻게 컨테이너와 우리의 로컬머신을 통신할 수 있게할까?
바로, host.docker.internal 을 사용하면 된다! 이것을 사용하면 도커 컨테이너 내부에서 우리의 로컬 머신과 통신할 수 있다.
네트워크
자, 위 내용으로 도커 컨테이너와 우리의 로컬 머신이 소통하는 방법에 대해 알아봤다. 그럼 컨테이너 간 통신은 어떻게 하는 걸까?
docker container inspect라는 명령어로 컨테이너의 ip주소를 볼 수 있다. 이것을 활용하면 통신을 할 수 있지만 이렇게 한다면 컨테이너가 변경되서 아이피 주소가 변경될 때마다 하드코딩으로 주소를 바꿔주어야 한다. 더 나은 방안은 없을까??
도커에서는 네트워크라는 기능을 지원한다. docker run 명령에 --network 옵션을 추가해서 사용할 수 있다. 즉, 컨테이너끼리 통신할 수 있는 네트워크가 생긴다. 이렇게 하면 우리가 위에서 했던 IP를 직접조회해서 주소를 변경하는 문제를 해결할 수 있다.
도커는 볼륨과 다르게 네트워크를 자동으로 생성해주지 않는다.
docker --network create [network-name]
이 명령어로 네트워크를 생성해주자. 이제 run 명령에 붙여서 사용해보자.
docker run -d --name mongodb --network my-network mongo
우리는 localhost:3333/ 이 주소에서 컨테이너 IP를 사용해 172.34.3.3:3333/ 이렇게 바꿨었다. 그러면 네트워크를 사용하는 지금은 어떻게 바꿔야할까? 바로, 네트워크를 지정해준 컨테이너의 이름을 넣어주면 된다!
[container-name]:[port]/
또한, 네트워크에 드라이버를 설정해줄 수 있는데 기본값은 bridge이다.