Docker & Kubernetes

컨테이너와 네트워크

beekei 2021. 11. 26. 13:13
반응형
컨테이너간 통신 및 연결

실행 중인 컨테이너는 IP 주소를 할당받아 컨테이너 간 통신이 가능하다.

호스트 내에서 접근 가능한 전용 네트워크를 통해 애플리케이션과 데이터베이스를 연결하는 것이 가능하다.

또한, 컨테이너를 호스트의 외부 네트워크에 공개하는 것도 가능하다.

 

컨테이너 간의 연결을 이용하는 애플리케이션 이미지가 도커 허브에는 다수 등록되어 있다.

이들 애플리케이션은 컨테이너를 기동하는 것만으로 사용할 수 있다.

애플리케이션 설명 연동하는 컨테이너
Rocket.Chat 슬랙(Slack)과 비슷한 채팅 애플리케이션 MongoDB 컨테이너와 연동
owncloud BOX나 DropBox 같은 파일 공유 애플리케이션 MySQL이나 MariaDB 등 컨테이너와 연동
Redmine 프로젝트 관리 애플리케이션 PostgreSQL 컨테이너와 연동
WordPress 유명한 컨텐츠 관리 시스템 MySQL 컨테이너와 연동

컨테이너 네트워크

도커 허브에 등록된 많은 애플리케이션들이 --link를 사용해 컨테이너를 연동할 것을 안내하고 있다.

하지만 --link는 폐지될 수도 있는 기능이 되었고 docker network 사용을 권고 한다.

docker의 서브 커맨드 network를 사용하면 컨테이너 네트워크를 만들거나 지울 수 있다.

컨테이너 네트워크 커맨드 설명
docker network ls 컨테이너 네트워크를 리스트로 표시
docker network inspect 네트워크명을 지정해서 자세한 내용을 표시
docker network create 컨테이너 네트워크를 생성
docker network rm 컨테이너 네트워크를 삭제
docker network connect 컨테이너를 컨테이너 네트워크에 접속 
docker network disconnect 컨테이너를 컨테이너 네트워크에서 분리

컨테이너 네트워크 목록

DRIVER 값이 bridge인 경우는 외부 네트워크와 연결되어 있는 네트워크이다.

이 네티워크에 연결된 컨테이너는 외부 리포지터리에 접근할 수 있으며 -p 옵션으로 외부에 포트를 공개할 수도 있다.

컨테이너를 기동할 때 명심적으로 네트워크를 지정하지 안흥면 이 네트워크에 연결된다.

 

네트워크를 만들어보자

네트워크 생성
컨테이너 네트워크 목록

컨테이너를 기동할 때 docker run 커맨드 옵션으로 --network my-network를 지정하면 my-network에 연결된 컨테이너가 기동한다.

이렇게 기동된 컨테이너는 같은 네트워크에 연결된 컨테이너와만 통신이 가능하다.

 

 

이번에는 웹 서버인 Nginx를 my-network에 연결해보겠다.

컨테이너 실행
실행중인 컨테이너 목록

또 다른 컨테이너를 기동하여 nslookup으로 방금 만든 컨테이너 이름에 대한 IP 주소를 조사하고 curl로 HTTP 요청을 전송해 보겠다.

 

 

이번에는 기본으로 지정되는 bridge 네트워크에 연결된 컨테이너에서 폐쇄 네트워크에 접속을 시도해 보겠다.

bridge 네터워크에 연결된 컨테이너는 nslookup으로 webserver의 도메인 이름 분석에 실패하는 것을 알 수 있다.

IP 주소로 직접 접속을 시도해도 응답이 오지 않는다.

이를 통해 my-network는 기본 네트워크로부터 분리되어 있음을 알 수 있다.


외부에 포트를 공개하기

이번에는 컨테이너의 포트를 호스트의 IP 주소로 공개해보겠다.

docker run [옵션] 리포지터리[:태그] 커맨드 인자의 옵션으로 -p 공개포트번호:컨테이너내포트번호를 지정하면 컨테이너 내 포트를 호스트의 IP 주소상의 포트번호로 매핑한다.

여기서 작성한 컨테이너 네트워크는 docker network rm my-network 혹은 docker network prune로 삭제할 수 있다.

반응형