목차
1. Link
2. Link 설정
2.1 link 설정
2.2 컨테이너 명 변경
2.3 컨테이너 IP 변경
3. Script를 이용한 link 파일 생성
1. Link
- 컨테이너가 통신하려면 IP를 알아야 한다.
- link 옵션은 같은 호스트 내에 컨테이너 간 연결을 할 때 사용한다.
- 컨테이너끼리는 private ip를 기반으로 통신한다. 그런데 컨테이너가 재시작되면 ip가 변경되는 경우도 있다.
- link를 사용하게 되면 ip가 아닌 컨테이너 이름을 기반으로 통신 할 수 있다.
2. Link 설정
2.1 link 설정
- centos:7 이미지를 실행시켜 c1 컨테이너를 생성한다.
- c1 컨테이너의 IP 주소는 172.17.0.2다
- centos:7 이미지를 또 한번 실행시켜 c2 컨테이너를 생성한다.
- 이번에는 --link 옵션을 이용하여 c1 컨테이너를 link로 연결한다.
- c2 컨테이너에서 c1으로 통신이 되는 것을 볼 수 있다.
- centos:7 이미지를 이용하여 c3 컨테이너를 생성하고 이번에는 c1, c2 컨테이너를 link로 연결한다.
- c3 컨테이너에서 c2, c1으로 통신이 되는 것을 확인 할 수 있다.
- link는 반대로 통신하는 것은 불가능하다.
- link로 다른 컨테이너를 연결할 경우 /etc/hosts 파일에 해당 컨테이너의 이름과 ip 주소가 입력되면서 해당 경로를 알기 때문에 c1 컨테이너에서 c3 컨테이너로 통신을 시도하게 되면 link로 연결하지 않았기 때문에 /etc/hosts 파일에 c3의 정보가 없기 때문에 통신이 불가능 한 것이다.
- c4 컨테이너도 마찬가지로 생성하여 c1, c2, c3 컨테이너를 link로 연결시킨다.
- /etc/hosts 파일에 c1, c2, c3 컨테이너 및 IP 주소가 저장된 것을 볼 수 있고, 해당 컨테이너들에게 통신이 가능하다.
2.2 컨테이너 명 변경
- rename 명령어를 이용하여 c1 컨테이너의 이름을 c11로 변경한다.
- /etc/hosts 파일에는 여전히 c1이라는 컨테이너와 해당 IP 주소가 저장되어 있기 때문에 c1으로 통신이 가능하다.
- 하지만 바뀐 이름으로 통신은 되지 않는다.
- link 생성시 c1의 이름으로 연결했기 때문에 /etc/hosts 파일에 이름을 변경하기 전의 정보가 담겨있기 때문이다.
2.3 컨테이너 IP 변경
- 컨테이너 자원을 해제하는 방법으로 stop 명령어를 사용하여 해당 컨테이너에 저장된 자원을을 해제한다.
- c2의 컨테이너의 자원을 해제하고 h1의 이름을 가진 httpd 컨테이너를 생성한다.
- c2 컨테이너의 자원을 해제하고 새롭게 컨테이너를 생성했기 때문에 DHCP를 통해 자동으로 IP 주소가 부여되는데 앞에 c2에게 주어졌던 IP가 h1 컨테이너에 부여된 것을 볼 수 있다.
- 다시 c2의 이름을 가진 컨테이너를 생성하게 되면 해당 컨테이너의 IP 주소가 172.17.0.3 -> 172.17.0.6으로 변경된 것을 볼 수 있다.
- 하지만 c3 컨테이너에서 c2 컨테이너로 ping이 보내지는 것을 확인 할 수 있다.
- 즉, link 명령어를 사용하여 컨테이너를 연결하게 되면 IP 주소는 변경되어도 해당 컨테이너와 통신이 가능하다는 것을 알 수 있다. 하지만 이름이 바뀌게 되면 통신이 되지 않는다는 것을 알 수 있다.
3. Script를 이용한 link 파일 생성
- 위에서 알아봤던 link 설정들을 script 파일로 생성하는 작업을 해 볼 것이다.
* 시나리오
1. c1 컨테이너 생성
2. c2 컨테이너 생성 및 c1 컨테이너 link로 연결
3. c1 컨테이너 자원 해제
4. c3 컨테이너 생성
5. c1 컨테이너 재시작
6. c2 컨테이너에서 IP가 변경된 c1 컨테이너로 통신 확인
#! /bin/bash
systemctl restart docker
docker run -itd --name c1 centos:7
docker run -itd --name c2 --link c1 centos:7
docker exec c2 ping -c 4 c1
docker stop c1
docker run -itd --name c3 centos:7
docker start c1
docker exec c2 cat /etc/hosts
docker exec c2 ping -c 4 c1
docker inspect c1 | grep '"IPAddress"' | tail -1
'Programming > Docker' 카테고리의 다른 글
Docker - Word Press + MYSql (0) | 2022.06.02 |
---|---|
Docker - PHP, MYSql 설치 및 실행 (0) | 2022.06.01 |
Docker - Image 생성 (0) | 2022.05.31 |
Docker - Scripts (0) | 2022.05.31 |
Docker - HAProxy, Network, Port Forwarding (0) | 2022.05.30 |