본문 바로가기

따배도 스터디

9-1 컨테이너간 통신(네트워크)- 이론편

728x90

Q1. 컨테이너는 어떻게 통신하나요?

모든 컨테이너는 외부 통신을 docker0 를 통해 진행

docker0 bridge interface

Q2. 컨테이너 포트를 외부로 노출할 수 있어요 ?

port-forwarding

-container port를 외부로 노출시켜 외부 연결 허용

iptables rule을 통한 포트 노출

-p hostPort:caontainerPort

-p conatainerPort

-P:대문자는 expose 한 포트와 매칭을 시키고 랜덤으로 포트를 만들어 주게된다.

docker run --name web -d -p 80:80 nginx:1.14

iptables -t nat -L -n -v

 

Q3. 컨테이너 네트워크를 추가할수 있나요?

user-defined bridge network 생성

 

docker network create --driver bridge 

--subnet 192.168.100.0/24 

--gateway 192.168.100.254

mynet

 

만들어진 네트워크를 확인하기 위해서 사용하는 명령어

docker network ls

 

gateway 할당 안할 시 192.168.100.1이 할당되게 된다.

 

docker run -d --name web -p 80:80 nginx:1.14

 

curl localhost

 

docker run -d --name appjs

--net mynet --ip 192.168.100.100

-p 8080:8080

smlinux/appjs

 

curl localhost:8080

 

Q4. 컨테이너끼리 통신은 어떻게 하나요?

docker run -d --name mysql -v/dbdata:/var/lib/ysql -e

MYSQL_ROOT_PASSWORD=wordpress -e

MYSQL_PASSWORD=wordpress mysql:5.7

 

docker run -d --name wordpress --link mysql:mysql -e

WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4

 

--link: 두개의 컨테이너를 연결시켜주는 역할

 

 

 

도커 환경에서 여러 컨테이너를 동일한 환경에서 연동시키기 위해서 네트워크 설정이 필요합니다.

여기서는 MySQL 과 springboot app이 동일한 네트워크에서 구동되도록 해주어야 합니다.

일단 네트워크부터 하나 생성해줍니다.
$ docker network create springboot-mysql-net

생성된 네트워크는 아래 명령어로 확인 가능합니다.
$ docker network ls

 

mysql container를 run  시켜주고 network group을 springboot-mysql-net으로 연결시켜주는 역할을 해준다.

 

docker run --name db-mysql -p 3306:3306 --network springboot-mysql-net -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -e MYSQL_USER=user -e MYSQL_PASSWORD=user -d mysql:5.7

 

springboot container를 rurn 시켜주고 network  group을 springboot-mysql-net에 종속시켜주면 된다.

docker run -p 8080:8080 --name springboot-mysql --network springboot-mysql-net -d springboot-mysql:1.0 

 

 

 

728x90