1. 서브넷 마스크
https://nordvpn.com/ko/blog/what-is-subnet-mask/
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
도커 컨테이너를 만들 때 아무것도 설정하지 않으면 기본 네트워크로 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
- 도커 컨테이너들이 같은 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 |