쿠버네티스/docker
8-1. 컨테이너간 통신(네트워크)
몽자비루
2024. 5. 3. 19:54
- 컨테이너 통신 방법
- Container Network Model
- docker0
- virtual ethernet bridge:172.17.0.0/16 값을 가지는 bridge network 가 docker 0.
- 이 대역대 안에서 docker 0는 172.17.0.1 ip를 가지고 gateway 역할을 함.
- L2 통신기반
- container 생성 시 veth 인터페이스 생성(sandbox)
- 모든 컨테이너는 외부 통신을 docker0을 통해 진행
- container running 시 172.17.X.Y로 IP 주소 할당.
- container 통신 방법
- docker host system 에서 docker deamon이 실 행되면 docker 0 라고 하는 docker network interface가 생김
- docker 0은 virtual ethernet bridge network 를 지원해주는 가상 네트워크
- 컨테이너의 ip대역대와 docker host 가 가지고 있는 network를 연결해주는 bridge 역할을 함.
- bridge network 역할을 위해 network adression translation 과 port forwarding 을 지원함 (ip tables를 통해)
- 컨테이너 포트 외부 노출
- port-forwarding
- container port를 외부로 노출시켜 외부 연결 허용
- iptables rule을 통한 포트 노출
- -p hostPort:containerPort
- -p containerPort : hostport 는 rondom port 가 열리게 됨
- -P : 랜덤포트가 자동으로 만들어지게 됨.
- docker run --name web -d -p 80:80 nginx:1.14
ㄴ -p 호스트 포트:컨테이너 포트 - iptables -t nat -L -n -v
- port-forwarding
- 컨테이너 네트워크 추가
- static ip 를 정하는 방법.
- ip는 일반적으로 순차적으로 할당됨.
- 기본적으로 docker 0 인터페이스 내 네트워크는 static ip 할당 불가능.
- 단, docker 0 networkl interface 대역대를 변경하거나 user define network를 만들 수 있음.
- user-defined bridge network 생성
- $ docker network create --drive bridge \ > 드라이브를 선택할 수 있는데, bridge가 default 값임.
--subnet 192.168.100.0/24 \ > subnet 대역대는 정해줄 수 있고, 생략할 수 있음
--gateway 192.168.100.254 \ > gateway 주소를 지정하여 고정할 수 있음.
mynet > network 이름을 지정할 수 있음. - $ docker network ls > 만들어진 네트워크 확인
- $ docker run -d --name web -p 80:80 \ nginx:1.14
$ curl localhost - $ dicjer run -d --name appjs \
--net mynet --ip 192.168.100.100 \ > user define network 의 경우, static network 설정 가능.
-p 8080:8080 \smlinux/appjs - $ curl localhost:8080
- $ docker network create --drive bridge \ > 드라이브를 선택할 수 있는데, bridge가 default 값임.
- static ip 를 정하는 방법.
- 컨테이너간의 통신 방법
- 컨테이너를 이용한 server & client 서비스 운영
- # docker run -d --name mysql -v /dbdata:/var/lib/mysql -e > /var/lib/mysql 의 컨텐츠를 /dbdata 에 저장
MYSQL_ROOT_PASSWORD=wordpress -e
MYSQL_PASSWORD=wordpress mysql:5.7 > wordpress 가 사용하는 password - # docker run -d --name wordpress --link mysql:mysql -e
> link 를 통해 2개의 conainer 연결 (컨테이너 이름 : 원하는 이름)
WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4
> wordpress 동작 후 만들어지는 데이터는 mysql의 db 형태로 저장됨
- # docker run -d --name mysql -v /dbdata:/var/lib/mysql -e > /var/lib/mysql 의 컨텐츠를 /dbdata 에 저장
- 컨테이너를 이용한 server & client 서비스 운영
출처 : https://youtu.be/jOX80bXND2w