컨테이너 커뮤니케이션

김장군·2022년 12월 24일
0

Docker

목록 보기
6/6

컨테이너와 WWW

먼저 컨테이너에 있는 애플리케이션에서 HTTP 리퀘스트를

다른 웹 사이트 또는 웹 API로 보낼 수 있습니다.

컨테이너는 디폴트로 WWW에 리퀘스트를 보낼 수 있습니다.


컨테이너와 호스트

컨테이너에 있는 애플리케이션에서

컨테이너 바깥에 있는 호스트 머신이나 그 머신에 있는 DB 등과 커뮤니케이션을 하려는 케이스가 있을 겁니다.

이 케이스에서는 Docker가 만들어 놓은 유니크한 도메인, host.docker.internal을 쓰면 됩니다.


컨테이너와 컨테이너

컨테이너에서 다른 컨테이너와 커뮤니케이션을 하려 합니다.

예를 들어 B 컨테이너에 DB가 있다고 해 보죠.

하나의 컨테이너에는 하나의 기능만 있는 것이 옳기 때문에

어느 정도의 사이즈가 있는 애플리케이션이라면

하나의 컨테이너로는 모자랍니다.

어쨌든 다른 컨테이너와 커뮤니케이션을 하기 위해선 커뮤니케이션이 다 그렇듯이 IP 어드레스를 알고 있어야 합니다.

docker container inspect CONTAINER_NAME

이 커맨드에 대한 아웃풋에서 NetworkSettings에 IPAddress 값이 있습니다.

하지만.. IPAddress 값을 그대로 가져다 쓰는 것은 아름답지 않습니다.

이 어드레스는 바뀔 수 있는 것이니까요.


Docker 네트워크

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 드라이버를 쓰시게 될 겁니다.

하지만 이러한 값들이 있다는 걸 알고 있으면 좋겠죠?

  • host: 호스트 시스템을 네트워크 안에 집어 넣습니다.
  • overlay
  • macvlan: 컨테이너에 custom MAC 어드레스를 정할 수 있습니다.
  • none: 네트워크를 끕니다.
  • 서드파티 플러그인
profile
Make impacts!

0개의 댓글