컨테이너간 통신

1. --link 옵션 사용

  • 해당 기능은 추후 docker 업데이트시 삭제 될 수 있음 / 사용자 정의 네트워크를 사용하자
  • 사용자 정의 네트워크를 사용하는 컨테이너에서도 --link 옵션은 사용 가능
  • 서로 통신해야하는 컨테이너가 많아지면 --link 옵션 정의가 복잡해진다.
  • 컨테이너의 /etc/hosts에 --link에 사용한 컨테이너의 IP가 정의되어 있다.
# 컨테이너 생성 
# 테스트용 리눅스(alpine) 3개 생성 / 백그라운드 상에서 계속 shell이 실행 된 상태를 유지
$ docker run -dit --name alpine1 alpine ash
$ docker run -dit --name alpine2 alpine ash
$ docker run -dit --name alpine3 alpine ash


# link 적용
# 테스트용ㅇ 리눅스 alpine4 생성 및 alpine1/alpine2 와 네트워크 연결
# --link <name or id>:alias 또는 --link <name or id>
$ docker run -dit --link alpine1:a1 --link alpine2 --name alpine4  alpine ash

# alpine4 접속
$ docker attach alpine4

# ping 테스트
$ ping a1 # 또는 ping alpine1
PING a1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.260 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.170 ms

$ ping alpine2
PING alpine2 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.249 ms

# alpine4에서 hosts 설정 파일을 보면 --link를 사용한 컨테이너가 추가된 것을 확인 할 수 있다.
$ cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    a1 9cb90e3facf6 alpine1
172.17.0.3    alpine2 424aaf8ce579
172.17.0.5    565b40f058b3

2.사용자 정의 네트워크 사용

  • automatic service discovery (자동 서비스 검색) 제공으로 대상 컨테이너의 IP가 아닌 이름으로 통신 할 수 있습니다.
# 사용자 정의 네트워크 생성
$ docker network create alpine-net

# alpine-net 네트워크를 사용하는 컨테이너 생성
$ docker run -dit --name alpine1 --network alpine-net alpine ash
$ docker run -dit --name alpine2 --network alpine-net alpine ash

# alpine1 컨테이너에 접속
$ docker container attach alpine1

# alpin2 에서 alpine2로 IP가 아닌 이름으로 ping 테스트 가능
$ ping -c 2 alpine2
  • 네트워크가 서로 다를 경우 IP 대역이 다르기 때문에 아래와 같이 통신하고자 하는 대상 컨테이너가 속한 네트워크에 추가적으로 연결을 해야합니다.
# net1 / net2 네트워크 생성
$ docker network create net1
$ docker network create net2

# 컨테이너 생성
$ docker run -dit --name alpine1 --network net1 alpine ash
$ docker run -dit --name alpine2 --link alpine1:a1 --network net2 alpine ash

# alpine2 컨테이너에 net1 네트워크 추가 연결
$ docker network connect net1 alpine2

# ping 테스트
$ docker attach alpine2
$ ping -c 2 alpine1

'서버' 카테고리의 다른 글

[ubuntu] ansible 설치  (0) 2023.02.02
[Vagrant] - 테스트 서버 생성  (0) 2022.04.27
[Docker] volume 백업/복원  (0) 2021.09.03
Centos 7.4 다운로드  (0) 2018.05.21
DB validationQuery  (0) 2013.10.22

+ Recent posts