본문 바로가기

Linux/Docker

35. CentOS7 : Docker - Container Link

Container Link

컨테이너 내보의 /etc/hosts 파일을 설정하여 IP가 변경되어도 통신이 유지되도록 하는 기능

1. Container Link 실습 전 Docker 설치

Docker 설치 관련

31. CentOS7 : Cloud & Docker

1. Cloud 언제 어디서나 어떠한 단말을 가지고서라도 인터넷 접속만 가능하다면 사용한만큼 비용을 지불하고 원하는 IT 자원을 이용하는 것 설치할 필요 없음 통합된 환경 제공 사용한 만큼 비용

mh-itstudy.tistory.com

2. Container Link 실습

2.1. Container Link

※ c1, c2 컨테이너 생성
# docker run -itd --name c1 centos:7
# docker run -itd --name c2 centos:7

※ c1, c2 컨테이너가 링크하여 c3 컨테이너 생성


※ 생성된 컨테이너 확인


※ c3 컨테이너의 /etc/hosts 파일 확인
→ c1, c2 컨테이너가 링크되어 있는 것을 확인할 수 있음


※ c3 컨테이너에서 c1, c2 컨테이너로 통신 테스트

2.2. Container Link - 별칭 등록

※ c4 컨테이너 구동 - c1, c2, c3 컨테이너 링크 및 별칭 등록


※ c4 컨테이너의 /etc/hosts 파일 설정 내용 확인


※ 설정한 별칭 이용하여 통신 테스트 - mhan1(c1), mhan2(c2), mhan3(c3)

2.3. Continer Link - IP 변경 후 통신 테스트

※ 컨테이너 삭제
# docker rm $(docker ps -aq)

※ c1 컨테이너 구동


※ c2 컨테이너 구동 - c1 링크


Stop vs Pause
stop: 자원 해제/정상 종료
pause: 작업 멈춤
※ IP 변경을 위해 c1 컨테이너 stop 및 확인


※ c1 컨테이너 상세 정보 출력 - 네트워크 할당 해제 확인


※ c3 컨테이너 구동


※ c3 컨테이너 상세 정보 출력 - 기존에 c1이 사용 중이던 IP를 c3가 할당 받음


※ 멈춰있던 c1 컨테이너 재 구동


※ c2 컨테이너에서 c1 컨테이너로 통신 테스트 (IP 변경 됨)

3. 실습 내용 스크립트로 작성하여 자동화 환경 구성

위에서 실습했던 내용을 쉘 스크립트로 작성하여 자동화 되도록 구성해 보자

※ dockerLink.sh 작성

#! /bin/bash

docker run -itd --name c1 centos:7
docker run -itd --name c2 --link c1:mhan1 centos:7

echo "===============$(date)===============" >> linkRes.txt
echo "--------C1 NETWORK INFO--------" >> linkRes.txt
docker inspect c1 | sed -n '187,203p' >> linkRes.txt

echo -e "\n--------Ping Test 1--------" >> linkRes.txt
docker exec c2 ping -c 4 c1
docker exec c2 ping -c 4 c1 >> linkRes.txt

docker stop c1
docker ps -a

echo -e "\n--------STOP C1 NETWORK INFO--------" >> linkRes.txt
docker inspect c1 | sed -n '187,203p' >> linkRes.txt

echo -e "\n--------C3 NETWORK INFO--------" >> linkRes.txt
docker run -itd --name c3 centos:7
docker inspect c3 | sed -n '187,203p' >> linkRes.txt

docker start c1

echo -e "\n--------Docker Process--------" >> linkRes.txt
docker ps
docker ps >> linkRes.txt

echo -e "\n--------CHANGE C1 NETWORK INFO--------" >> linkRes.txt
docker inspect c1 | sed -n '187,203p' >> linkRes.txt

echo -e "\n--------Ping Test 2--------" >> linkRes.txt
docker exec c2 ping -c 4 c1
docker exec c2 ping -c 4 c1 >> linkRes.txt
echo -e "\n\n" >> linkRes.txt

docker rm -f $(docker ps -aq)



※ dockerLink.sh 파일에 실행 권한 부여


※ dockerLink.sh 파일 실행
# ./dockerLink.sh

※ dockerLink.sh 파일 실행으로 인해 생성된 linkRes.txt 파일 내용 확인 (로그)

===============2022. 06. 01. (수) 11:04:01 KST===============
--------C1 NETWORK INFO--------
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b7f3be54d76d06b295e7120971f61041c5b5b9dc585924efe43622ad28fca757",
"EndpointID": "67e16b9c9cbfb36a0d0f1840af350c44ff88e7eb4c4b79e4d574511676d93314",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}

--------Ping Test 1--------
PING mhan1 (172.17.0.2) 56(84) bytes of data.
64 bytes from mhan1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from mhan1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from mhan1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.051 ms
64 bytes from mhan1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.053 ms

--- mhan1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.051/0.053/0.059/0.009 ms

--------STOP C1 NETWORK INFO--------
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b7f3be54d76d06b295e7120971f61041c5b5b9dc585924efe43622ad28fca757",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}

--------C3 NETWORK INFO--------
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b7f3be54d76d06b295e7120971f61041c5b5b9dc585924efe43622ad28fca757",
"EndpointID": "cef36e920291adf1ed19f0ce5cc0880464e29881f2d2adb92c3a20c1f89a927a",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}

--------Docker Process--------
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9c4a1c9d651 centos:7 "/bin/bash" 1 second ago Up Less than a second c3
e066de841682 centos:7 "/bin/bash" 19 seconds ago Up 18 seconds c2
5e7ea128a830 centos:7 "/bin/bash" 21 seconds ago Up Less than a second c1

--------CHANGE C1 NETWORK INFO--------
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "b7f3be54d76d06b295e7120971f61041c5b5b9dc585924efe43622ad28fca757",
"EndpointID": "ca91462c338789c213c6c4250f97eaade18e03d23f521bb06a61b75c615e9340",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.4",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:04",
"DriverOpts": null
}
}

--------Ping Test 2--------
PING mhan1 (172.17.0.4) 56(84) bytes of data.
64 bytes from mhan1 (172.17.0.4): icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from mhan1 (172.17.0.4): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from mhan1 (172.17.0.4): icmp_seq=3 ttl=64 time=0.143 ms
64 bytes from mhan1 (172.17.0.4): icmp_seq=4 ttl=64 time=0.195 ms

--- mhan1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 0.027/0.108/0.195/0.065 ms