먼저 컨테이너에 있는 애플리케이션에서 HTTP 리퀘스트를
다른 웹 사이트 또는 웹 API로 보낼 수 있습니다.
컨테이너는 디폴트로 WWW에 리퀘스트를 보낼 수 있습니다.
컨테이너에 있는 애플리케이션에서
컨테이너 바깥에 있는 호스트 머신이나 그 머신에 있는 DB 등과 커뮤니케이션을 하려는 케이스가 있을 겁니다.
이 케이스에서는 Docker가 만들어 놓은 유니크한 도메인, host.docker.internal을 쓰면 됩니다.
컨테이너에서 다른 컨테이너와 커뮤니케이션을 하려 합니다.
예를 들어 B 컨테이너에 DB가 있다고 해 보죠.
하나의 컨테이너에는 하나의 기능만 있는 것이 옳기 때문에
어느 정도의 사이즈가 있는 애플리케이션이라면
하나의 컨테이너로는 모자랍니다.
어쨌든 다른 컨테이너와 커뮤니케이션을 하기 위해선 커뮤니케이션이 다 그렇듯이 IP 어드레스를 알고 있어야 합니다.
docker container inspect CONTAINER_NAME
이 커맨드에 대한 아웃풋에서 NetworkSettings에 IPAddress 값이 있습니다.
하지만.. IPAddress 값을 그대로 가져다 쓰는 것은 아름답지 않습니다.
이 어드레스는 바뀔 수 있는 것이니까요.
Docker로 컨테이너 네트워크라는 것을 만들 수 있습니다.
그냥 네트워크라고 부르기도 합니다.
먼저 네트워크를 만들어야 합니다.
docker network create NETWORK_NAME
이제 docker run 커맨드를 돌릴 때 위에서 만든 네트워크를 붙일 수 있습니다.
docker run --network NETWORK_NAME
애플리케이션 코드에는 앞서 썼던 IP 어드레스도 아니고, host.docker.internal도 아니고, 뭘 써야 할까요?
컨테이너 이름을 써 주면 네트워크에서 이를 알 수 있습니다.
물론 반드시 같은 네트워크에 있는 컨테이너 이름이어야 하고요..!
모든 컨테이너를 하나의 네트워크에 집어 넣을 수 있습니다.
네트워크를 하는 일에 따라 묶을 수 있도 있겠죠!?
Docker 네트워크는 여러 드라이버를 가지고 있습니다.
docker network create --driver bridge NETWORK_NAME
웬만하면 디폴트 값인 bridge 드라이버를 쓰시게 될 겁니다.
하지만 이러한 값들이 있다는 걸 알고 있으면 좋겠죠?