티스토리 뷰
Docker 컨테이너(container)는 격리된 환경에서 돌아가기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능하다. 하지만 여러 개의 컨테이너를 하나의 Docker 네트워크(network)에 연결시키면 서로 통신이 가능해진다.
또한 보안상으로 격리 시키는게 좋기 떄문에 사용자들은 DB를 아예 접근 하지 못하도록 설정해놓고 Apache Container가 DB에 접근하도록 한다. 이렇게 해야 보안적으로 안전하다. 실제 서비스는 아래와 구조와 같다고 보면된다.
아래에서 이런 환경을 어떻게 만드는지 살펴보겠다.
1. Apache Container 올림
vagrant@ubuntu:~$ docker run -d --name=apache httpd
2. OS 올림 (바로꺼지지 않도록)
vagrant@ubuntu:~$ docker run -d --name=centos centos:8 /bin/sleep
3. network 확인 및 브릿지 생성
* Container는 bridge(Software로 구현되어 있음, 스위치 역할)를 사용한다.
vagrant@ubuntu:~$ docker container inspect apache | grep 172
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
vagrant@ubuntu:~$ curl http://172.17.0.2
<html><body><h1>It works!</h1></body></html>
vagrant@ubuntu:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
2584c079b427 bridge bridge local
8df519e060d0 host host local
c1d098eb0664 none null local
* 컨테이너는 docker0에 물려있음
* 가상인터페이스가 만들어져 있음
vagrant@ubuntu:~$ ip addr show
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:56:b3:e7:5b brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
* 브릿지 확인 패키지 다운
vagrant@ubuntu:~$ sudo apt install bridge-utils
* 브릿지 확인 - docker0 가 ip를 가지고 있음
vagrant@ubuntu:~$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024256b3e75b no vethacb84fe
* 4가지 타입이 있음
vagrant@ubuntu:~$ docker network create --driver
bridge ipvlan macvlan overlay
도커 네트워크 드라이버(driver)를 지원함
bridge 네트워크 : 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있도록 해줌
host 네트워크 : 컨터이너를 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용
overlay 네트워크: 여러 호스트에 분산되어 돌아가는 컨테이너들 간에 네트워킹을 위해서 사용
* 브릿지 생성
vagrant@ubuntu:~$ docker network create --driver bridge db_bridge
901e75176848f4fa28ea8c07e104af26bfe670f4706975b07eeab8fe631c1e5e
vagrant@ubuntu:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
2584c079b427 bridge bridge local
901e75176848 db_bridge bridge local
8df519e060d0 host host local
c1d098eb0664 none null local
4. DB컨테이너 올리기
* docker0에 연결됨
vagrant@ubuntu:~$ docker run -d --name=mysql57 --env MYSQL_ROOT_PASSWORD=mypass mysql:5.7 /bin/bash
901f08930a8010942de11262f4d720460beba4d212efcb263adcb89eb1d19821
5. 브릿지 연결
* network 메타데이터는 inspect로 확인
* inspect로 연결되어 있는 컨테이너 확인 가능
vagrant@ubuntu:~$ docker network inspect bridge
- bridge에 연결된 mysql컨테이너를 db_bridge에 연결
* 연결 확인
* 연결 끊기
vagrant@ubuntu:~$ docker network ls
vagrant@ubuntu:~$ docker network disconnect bridge mysql
* mysql이 db_bridge에 연결된거 확인
* apache도 db_bridge에 연결
'Infra > Docker & k8s' 카테고리의 다른 글
[Docker] Dockerfile이란? (0) | 2023.02.25 |
---|---|
[Docker] 도커 이미지 만들기 (0) | 2023.02.25 |
[Docker] 도커를 사용하는 이유 (0) | 2023.02.19 |
[Docker] 도커 환경설정 (0) | 2023.02.19 |