1. 컨테이너 생성과 링크 설정
docker run -d -it --name container_a busybox /bin/sh -c "while true;do sleep 3600;done" docker run -d -it --name container_b --link container_a busybox /bin/sh -c "while true;do sleep 3600;done"
2. 컨테이너 IP 주소 확인
docker exec -it container_a ip a | grep 172 docker exec -it container_b ip a | grep 172
3. 컨테이너 간 통신 테스트
# container_a에서 테스트 docker exec -it container_a ping -c 1 172.17.0.3 # 성공 docker exec -it container_a ping -c 1 container_b # 실패 # container_b에서 테스트 docker exec -it container_b ping -c 1 172.17.0.2 # 성공 docker exec -it container_b ping -c 1 container_a # 성공
4. 링크된 컨테이너 제거 후 영향 확인
docker rm -f container_a docker exec -it container_b ping container_a # 오류 발생
5. 도커 네트워크 목록 확인
docker network ls # 기본 브리지 네트워크 확인
6. 사용자 정의 브리지 네트워크 생성
docker network create -d bridge custom_net
7. 네트워크 생성 확인
docker network ls brctl show # 네트워크 인터페이스 확인
8. 사용자 정의 네트워크에 컨테이너 연결
docker run -d -it --name container_c --network custom_net busybox /bin/sh -c "while true;do sleep 3600;done"
9. 네트워크 구성 검증
docker network inspect custom_net # 컨테이너 및 IP 정보 확인
10. 기존 컨테이너를 사용자 정의 네트워크에 추가
docker network connect custom_net container_b docker network inspect custom_net # 다중 컨테이너 연결 확인
11. 네트워크 간 통신 테스트
# container_a(기본 브리지)에서: docker exec -it container_a ping container_b # 실패 # container_b(이중 네트워크)에서: docker exec -it container_b ping container_c # 성공 # container_c(사용자 정의 네트워크)에서: docker exec -it container_c ping container_b # 성공
12. 추가 컨테이너 생성
docker run -d -it --name container_d --network custom_net busybox /bin/sh -c "while true;do sleep 3600;done"
13. 최종 통신 테스트
docker exec -it container_d ping container_b # 성공 docker exec -it container_d ping container_c # 성공
실험 결과 요약
1. 컨테이너는 기본적으로 bridge 네트워크 사용 2. --link 설정 시 대상 컨테이너의 이름 해석만 단방향으로 가능 3. 링크된 컨테이너 제거 시 의존성 문제 발생 4. 사용자 정의 네트워크 내에서는 모든 컨테이너가 이름 기반 통신 가능