ETC/Docker

Docker Network 기본 사용법 과 Tip

Raconer 2023. 8. 9. 14:09
728x90

기본 명령어

설명 사용 예시
네트워크를 생성 docker network create <network_name>
네트워크 삭제 docker network rm <network_name>
미사용 네트워크 삭제 docker network prune
Container를 네트워크에 연결 docker network connect <network_name> <container_name>
Container를 네트워크에서 분리 docker network disconnect <network_name> <container_name>
네트워크에 상세 정보 docker network inspect <network_name>
네트워크 목록 docker network ls

Docker Run 할때 연결 하는법

    docker run -dp 8080:8080  --network=`<network_name>` --name `<container_name>` docker-image

Basic Docker Network Driver (공식 문서를 자세히 보고 추후 다시 정리 할 예정)

  • bridge
    • 이는 기본적으로 생성되는 네트워크로, 도커 호스트와 Container 간의 통신을 위해 사용
    • Container들은 이 브리지 네트워크에 연결되어 통신 가능
  • host
    • Container와 도커 호스트가 동일한 네트워크 네임스페이스를 공유
    • 이 모드에서는 Container가 호스트의 네트워크 인터페이스를 직접 사용하므로 네트워크 격리가 없음
  • none
    • 이 네트워크 모드는 Container가 어떤 네트워크도 사용하지 않음을 의미
    • 이 경우 Container는 완전히 격리되어 네트워크 통신을 할 수 없음

Tip!

      1. Container Network 설정 안했을시테스트 방법
        • Container 2개 실행
          • container_A( 8080:8080 )
          • container_B( 8081:8080 )
        • 2개의 Container는 네트워크 설정을 안한 상태
        • 테스트 실행
        1. 특정 Docker Container에 접속한다.
        2. docker exec -it container_A /bin/sh
        3. CURL로 다른 Container 호출테스트 결과
        4.  

아마 내가 그 동안 해봤던 결과 라면 container_B를 찾지 못할것이다.
docker network inspect bridge 실행해 보아도 같은 bridge Network에 연결되어 있는 걸로 나타나 있지만
원하는 결과가 나오지 않는다
그래서 위의 테스트가 성공으로 뜰려면 같은 Network로 연결 하는것을 추천한다.

      1.  
      2. curl http://container_B:8081
    1. 환경
    2.  

여러 내용을 찾아 보았을때, 공식문서는 아직 찾아 보지 못했습니다.
기본 Bridge Network에 연결되어 기본 Bridge Network 끼리 통신이 가능하다고 되어 있습니다.
하지만 Container에 접속후 CURL로 특정 Container를 호출 하였지만 찾지 못한다고 나와 있습니다.
이를 해결하기 위해 Docker Network를 생성 하고 Container 끼리 연결 후 사용하였습니다.
기본 Network가 Bridge로 설정되어 별도의 Network로 묶지 않은 이상 모든 Container끼리 통신이 가능하다고 되어 있으나 현재까지 성공하지 못했습니다.

  1.  
  2. sh파일 실행시 Network 확인후 없으면 생성 하는 방법
NETWORK_NAME="test-network"

# 네트워크가 존재하는지 확인
docker network ls —filter name=${NETWORK_NAME} —format '{{ .Name }}' | grep -wq ${NETWORK_NAME}

# 위 명령의 결과 값이 없으면 네트워크 생성
if [ $? -ne 0 ]; then
  echo "Network ${NETWORK_NAME} does not exist, creating…"
  docker network create —driver bridge ${NETWORK_NAME}
else
  echo "Network ${NETWORK_NAME} already exists."
fi
728x90

'ETC > Docker' 카테고리의 다른 글

Docker 기본 배포  (0) 2024.09.03
Docker Network  (0) 2023.08.09
내가 이해한 Volume이란?  (0) 2023.08.03
Mysql 설정 및 기본 명령어  (0) 2023.08.03
Docker Swarm과 Kubernetes(K8s) 비교  (0) 2023.07.26