본문 바로가기
AWS

230331 Docker 5

서브넷마스크

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이 세 개의 네트워크를 만듭니다.

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

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

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

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

eth0 = 입구!

 

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

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

 

ip addr

윈도우 환경에서

ipconfig

eth0의 네트워크의 모습

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

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

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

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

 


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

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컨테이너를 동일한 네트워크로 묶어줍니다.

  1. web-network를 생성합니다.

docker network create web-network

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


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

 

'AWS' 카테고리의 다른 글

230331 Docker 4  (0) 2023.03.31
230331 Docker 3  (0) 2023.03.31
230330 Docker 2  (0) 2023.03.30
230330 Docker  (0) 2023.03.30
AWS 230328 aws기초5  (0) 2023.03.28