mjeongriver
article thumbnail
Published 2023. 3. 31. 14:31
day96-docker 네트워크 TIL/Docker

1. 서브넷 마스크

https://nordvpn.com/ko/blog/what-is-subnet-mask/

 

서브넷 마스크란 무엇인가요?

이 글에서 서브넷 마스크의 정의 및 확인 방법, IP 주소를 숨겨야 하는 이유에 대해서 정확히 알아보세요.

nordvpn.com

192, 168, 123, 132 이렇게 나눈 숫자 4개는 8비트 단위로 255의 숫자로 표현됩니다.

192.168.123.132를 예로 들면 이 IP 주소에서 192.168.123.은 네트워크를 나타내며 132는 네트워크에 연결된 기기를 나타냅니다.

 

CIDR

/8 /16 /24 /32

사이더는 인트라넷(내부망) 을 구축할 때 사용하는 네트워크 대역대를 지정하는 표기입니다.

 

CIDR /24 은 24비트 이전까지는 같은 네트워크ID로 사용하고 8비트 이후 값은 호스트ID로 지정한다는 의미입니다.

192.168.10.0에서 192.168.10.255까지 사용하겠다는 의미가 됩니다.

예시 CIDR /8

192.0.0.0에서 192.255.255.255까지

예시 CIDR /16

192.168.0.0에서 192.168.255.255까지

질문 - 그럼 CIDR /32는 뭘까요?

 

사설아이피 vs 공인아이피

  • 공인아이피 전세계 유일한 본인 컴퓨터IP
  • 사설아이피 내부망으로 만들어진 가상네트워크IP
  • 192또는172로 시작한다? → 무조건 사설이다.

더 궁금하면? https://nordvpn.com/ko/blog/public-ip-and-private-ip/

 

도커 네트워크

도커 네트워크는 컨테이너간 통신을 위해 사용됩니다

도커는 기본값으로 bridge, host, none이 세 개의 네트워크를 만듭니다.

 

https://captcha.tistory.com/70

 

06. 도커 네트워크 (Docker Network)

도커 네트워크 구조 - 도커는 컨테이너에 내부 IP를 순차적으로 할당 - 내부 IP는 컨테이너를 재시작할 때마다 변경될 수 있음 - 내부 IP는 도커가 설치된 호스트, 즉 내부망에서만 쓸 수 있는 IP이

captcha.tistory.com

 

도커 컨테이너를 만들 때 아무것도 설정하지 않으면 기본 네트워크로 bridge로 연결됩니다.

bridge네트워크는 각 컨테이너들을 연결하는 역할을 합니다.

bridge네트워크는 컨테이너의 gateway역할을 합니다.

host의 eth0은 도커 호스트에서 bridge 네트워크를 연결해 줍니다. (포트포워딩)

docker run —name webserver -d -p 8181:8484 이미지명

의 명령문에서 eth0(도커호스트)로 8181요청이 들어오면 컨테이너의 8484로 연결해 주는 역할을 하게 됩니다.

 

리눅스 환경에서

ip addr

 

윈도우 환경에서

ipconfig

 

eth0의 네트워크의 모습

 

docker0의 네트워크 모습 (참고 윈도우에서는 docker0은 확인할 수 없다. 가상머신 안에 존재함)

https://captcha.tistory.com/70

 

06. 도커 네트워크 (Docker Network)

도커 네트워크 구조 - 도커는 컨테이너에 내부 IP를 순차적으로 할당 - 내부 IP는 컨테이너를 재시작할 때마다 변경될 수 있음 - 내부 IP는 도커가 설치된 호스트, 즉 내부망에서만 쓸 수 있는 IP이

captcha.tistory.com

  • 도커 컨테이너들이 같은 bridge네트워크 상에 존재한다면 서로 간에 아이피주소를 통해 통신이 가능하다는 뜻입니다.
  • 네트워크는 컨테이너를 재 시작할 때마다 변경될 수 있습니다.
  • 컨테이너가 중지되면 데이터베이스 접속 주소가 바뀔 수 있다는 의미가 되겠죠. (컨테이너 시작 시 —link로 이름 붙이기 가 가능하지만 deprecated됨)
  • 그래서 사용자 지정 네트워크 방식이 있습니다. (사용자 지정 네트워크는 네트워크명의 사용이 가능함)

 

도커 네트워크의 2가지 형식

  • default bridge network - 컨테이너 간 아이피를 통해 통신이 가능함
    • (아이피는 컨테이너 생성시 유동적으로 변하기 때문에 운영 서비스에 적합하지 않음)
  • user defined bridge network - 컨테이너 간 아이피, 컨테이너 명을 통해 통신이 가능함
    • (운영 서비스에 적합)

 

2. 도커 네트워크 명령어

 

네트워크 관련 속성들을 확인

docker network docker network ls

 

컨테이너의 네트워크 확인

docker inspect <이미지명 or network명>

 

네트워크 생성

docker network create 네트워크명 docker network create web-network

옵션을 지정하는 방식도 있습니다(참고)

driver - 도커 네트워크 인터페이스지정, subnet - 서브넷마스크 범위지정, gateway - 네트워크 입구아이피 지정

docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 test-network

 

네트워크 연결

docker network connect 네트워크명 컨테이너명 docker network connect web-network webserver docker network connect web-network webserver-mysql

 

네트워크 해제

docker network disconnect 네트워크명 컨테이너명 docker network disconnect web-network webserver

 

네트워크 삭제(단 삭제시 모든 컨테이너와 disconnect되야 합니다)

docker network rm <네트워크명>

 

컨테이너 생성시 네트워크를 지정할 수 있습니다.

docker run --net <네트워크명> <이미지> docker run --name webserver -d -p 8181:8484 --net web-network myweb:v1

 

시나리오

프로젝트 컨테이너와 mysql컨테이너를 동일한 네트워크로 묶어줍니다.

  • web-network를 생성합니다.

docker network create web-network

 

  • 우리의 프로젝트에서는 데이터베이스 연결 주소를 변경합니다. (사용자 네트워크는 네트워크 명으로 연결함)
    • 도커운영 (컨테이너명 - 외부 통신이 아닌 도커컨테이너 간 통신이므로 3306포트 입니다.)

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://<mysql도커컨테이너이름>:3306/docker?serverTimezone=Asia/Seoul spring.datasource.username=docker spring.datasource.password=docker

 

  • 프로젝트 재 빌드 하고, 이미지를 새롭게 생성합니다.

프로젝트에서 그레이들 빌드 ./gradlew build

 

  • 우리의 프로젝트 컨테이너와 mysql컨테이너를 동일한 네트워크로 묶어줍니다.

컨테이너 생성시 연결 docker run --name webserver -d -p 8181:8484 --net web-network myweb:v1

mysql컨테이너 연결 docker network connect web-network webserver-mysql

 

  • 동일한 네트워크인지 확인

docker inspect web-network

 

  • 데이터베이스 통신을 확인합니다.

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

day96-docker hub 저장소(feat.registry)  (0) 2023.03.31
day96-docker volume  (0) 2023.03.31
day96-dockerfile  (0) 2023.03.31
day96-docker  (0) 2023.03.31
day96-docker  (0) 2023.03.31
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그