컨테이너간 통신 실습하기

2022. 9. 30. 14:02교육/클라우드 인프라

 

실습환경

 

Ubuntu(우분투), Docker Desktop(실행만함)

 

 

실습하기

네트워크 드라이버 확인하기

docker network ls

자신의 네트워크 드라이브를 확인합니다.

  • bridge : 하나의 호스트에서 여러 컨테이너가 통신합니다. (기본 네트워크 드라이버)
  • host : 컨테이너가 호스트의 네트워크 내에서 실행(격리x)합니다.
  • none : 네트워크를 완전히 격리합니다.
  • overlay : 여러 호스트에서 분산되어 돌아가는 컨테이너 간 통신합니다.
  • macvlan : 컨테이너에 MAC 주소를 할당하여, 물리적 장치로 인식하게 합니다.

 

 

 

 

 

Bridge Network 사용하여 테스트

docker run -dit --name alpine1 alpine ash
docker run -dit --name alpine2 alpine ash

2개의 컨테이너를 만듭니다.

 

 

 

 

생성한 컨테이너를 확인합니다.

 

 

 

 

Bridge 네트워크에 연결이 된 것을 확인할 수 있습니다.

 

 

 

 

docker attach alpine1
# ping -c (ping 보내는 횟수) (alpine1 IPv4 주소)
# ping -c (ping 보내는 횟수) alpine2

 alpine1에 접속한 후 각각 alpine1, alpine2에 각각 Ping을 3번 보냅니다.

 

※ 자신의 주소인 alpine1은 Ping이 전달이 되고, 자신의 주소가 아닌 alpine2는 Ping이 전달이 안되는 것을 알 수 있습니다.

 

 

이후

  • exit로 연결되어 있는 alpine1을 나갑니다. (하지만 alpine1에서 exit로 나가면 작동중인 것이 중단됩니다.)
  • ctrl + p + q 누르고 빠져나옵니다. 

 

docker container stop alpine1
docker container stop alpine2
docker container rm alpine1
docker container rm alpine2

순서대로 작동을 중지한 후 alpine1, alpine2를 제거합니다.

 

 

 

 

 

사용자 정의 브릿지 네트워크 사용하여 테스트

docker network create --driver bridge alpine-net

alpine-net 사용자 브릿지 네트워크를 만듭니다.

 

 

docker network ls

정상적으로 추가되었음을 확인할 수 있습니다.

 

 

 

docker run -dit --name alpine1 --network alpine-net alpine ash
docker run -dit --name alpine2 --network alpine-net alpine ash
docker run -dit --name alpine3 alpine ash
docker run -dit --name alpine4 alpine ash

alpine1, alpine2는 같은 alpine-net 같은 네트워크 상에 두고 alpine3, alpine4는 각각 다른 네트워크 상에 위치시킵니다.

 

 

docker container ls

container를 확인하여 정상적으로 추가되었는지 확인합니다.

 

 

 

 

docker network inspect bridge

bridge 상의 네트워크를 확인합니다. (apline3, alpine4)

 

 

 

 

docker network inspect alpine-net

alpine-net 상의 네트워크를 확인합니다.(alpine1, alpine2)

 

 

 

 

docker container attach alpine1
# ping -c 3 alpine2
# ping -c 3 alpine3

alpine1에 접속한 후 alpine2, alpine3에 ping을 보내서 테스트합니다.

alpine1 & alpine2 : 연결양호

alpine1 & alpine3 : 연결 불가능

 

 

※ 추가정보

docker network connect alpine-net alpine3

alpine-net 네트워크에 alpine 3을 연결합니다.

 

docker attach alpine1
# ping -c 3 alpine3

alpine3은 alpine-net에 연결되어 같은 네트워크 상에 있게되어 핑을 보낼 수 있게됩니다.

 

 

 

 

 

link 옵션을 사용하여 통신하기

docker run -dit --name alpine1 alpine ash
docker run -dit --name alpine2 alpine ash
docker run -dit --name alpine3 alpine ash

alpine1, alpine2, alpine3 네트워크를 각각 생성합니다.

 

 

 

 

정상적으로 네트워크가 추가되었음을 확인할 수 있습니다.

 

 

 

 

docker run -dit --link alpine1 --link alpine2 --name alpine4 alpine ash

apline4 생성하고, alpine1, alpine2 네트워크에 연결합니다.

 

 

 

docker container ps -a

alpine4가 정상적으로 생성되었음을 확인할 수 있습니다.

 

 

 

 

docker attach alpine4
# ping -c 3 alpine1
# ping -c 3 alpine2
# ping -c 3 alpine3

alpine4에 접속한 후 alpine1, alpine2, alpine3에 ping을 보내서 테스트합니다.

alpine4 & alpine1 / alpine4 & alpine2 : 연결양호

alpine4 & alpine3 : 연결 불가능

 

 

같은 네트워크에 있는 컨테니어간만 통신이 가능하며 사용자가 만든 외부 네트워클르 이용하면 컨테이너 이름으로 연결이 가능합니다.

 

 

 

 

참고블로그


실습 참고

https://xmobile.tistory.com/m/26

 

[Docker] 네트워크, 컨테이너간 통신

1. 네트워크 드라이버 종류 $ docker network ls NETWORK ID NAME DRIVER SCOPE f5d0db8f813a bridge bridge local 13d25bc6a925 host host local b1f2996399bf none null local 위와 같이 docker 는 3개의 네트..

xmobile.tistory.com

 

https://royleej9.tistory.com/entry/Docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EA%B0%84-%ED%86%B5%EC%8B%A0

 

[Docker] 컨테이너간 통신

컨테이너간 통신 1. --link 옵션 사용 해당 기능은 추후 docker 업데이트시 삭제 될 수 있음 / 사용자 정의 네트워크를 사용하자 사용자 정의 네트워크를 사용하는 컨테이너에서도 --link 옵션은 사용

royleej9.tistory.com


호스트 이름 변경

https://blog.dalso.org/linux/wsl2/11162

 

WSL2 리눅스 Hostname 변경하기. - 달소씨의 하루

원래 리눅스 호스트네임의 경우 /etc/hostname에서 수정하거나 hostnamectl과 같은 명령어로 변경이 가능합니다. WSL2의 리눅스에도 마찬가지로 해당파일이 있지만 이걸 변경한다고 따로 호스트네임이

blog.dalso.org