docker info
: 도커 정보를 볼 수 있는 명령어
도커엔진은 클라이언트와 서버로 구분된다
- 도커 클라이언트 : 도커 명령을 받고 결과를 출력하는 역할
- 도커 서버 : 도커 데몬(도커 엔진)을 이용해 컨테이너 시작, 운영, 정지 등을 담당
도커의 네트워크 종류는 bridge, host, none등이 있다
docker0
이 생성된다 docker0
는 virtual ethernet bridge이다 bridge네트워크를 지원해주는 가상 네트워크. 컨테이너 ip와 호스트의 ip를 연결해주는 역할이 bridge이다. docker0
을 통해 진행된다
컨테이너는 외부와 통신하기 위해 2개의 네트워크 인터페이스를 함께 생성한다. 컨테이너 내부 Namesapce에 할당되는 고유한 eth0 인터페이스.
나머지는 docker0에 바인딩되는 veth(가상의)인터페이스이다.
컨테이너가 생성될때 veth와 eth0은 1:1로 생성된다
docker0
브릿지는 veth 가상 인터페이스와 호스트의 eth0 인터페이스를 연결해주는 역할을 한다. 컨테이너안의 eth0 인터페이스는 veth 가상 인터페이스를 통해 외부와 통신이 가능해진다
CIDR 클래스 없는 도메인간 라우팅 기법
- 발생배경
- IPv4는 32비트의 숫자로 구성되어 있으며 제한적인 갯수로 인해 Private network를 사용하게 되었다
집에 핸드폰, 노트북, 테블릿등 다양한 기기를 사용하고 점점 주소가 부족해짐. 이를 대표자 하나만 묶자. 이것이 공유기의 역할. 이들은 모두 유일한 ip인 pirvate ip이다.
- private ip는 지정된 대역의 ip만 사용이 가능하다 여기서 공유기가 pulbic ip로 NAT(포트를 변경하여 사용)
외부에서는 private을 보지 않고 대표 ip인 public ip만 주고받는다.
- 여기서 ip를 또다시 계층화 시킨게 클래스이다
- 네트워크 ID와 호스트 ID를 분리시켰다.
네트워크 ID는 어떤 네트워크를 사용하는지, 호스트 ID는 해당 네트워크의 어느 기기인지를 나타낸다
서울에 사는 펭수, 부산에 사는 펭수, 서울에 사는 뽀로로가 있다
지역은 네트워크 id, 이름은 호스트 id이다
서울에 사는 펭수와 부산에서 사는 펭수는 연락 못함
서울에 사는 펭수와 서울에 사는 뽀로로는 연락 가능
부산에 사는 펭수와 서울에 사는 뽀로로는 연락 못함
같은 지역의 다른 이름만 통신이 가능하다
- 이런 클래스 없이 ip를 할당하는 새로운 방법이 CIDR이다
ip주소 뒤에 /로 구분하고 서브넷 마스크의 비트수를 적어 표시한다
docker0 은 172.17.0.0/16 16비트이며 172.17.0.1부터 172.17.255.254가지 65534 컨테이너 생성이 가능하다
ubuntu@jupiter:~$ docker network create devapp-net
e482a71bb154207fdd3e27e8be82497bb6349ce9475575dbc7f7fbea1f70b8db
ubuntu@jupiter:~$
ubuntu@jupiter:~$ docker run -d \
> --name=mongodb \
> -p 17017:27017 \
> --restart=always \
> --network=devapp-net \
> mongo:4
ubuntu@jupiter:~$ docker run -d \
> --name=backend \
> --network=devapp-net \
> --restart=always \
> -e PORT=8000 \
> -e GUESTBOOK_DB_ADDR=mongodb:27017 \
> leecloudo/guestbook:backend_1.0
Unable to find image 'leecloudo/guestbook:backend_1.0' locally
backend_1.0: Pulling from leecloudo/guestbook
ubuntu@jupiter:~$ docker run -d \
> --name=frontend \
> -p 3000:8000 \
> --network=devapp-net \
> --restart=always \
> -e PORT=8000 \
> -e GUESTBOOK_API_ADDR=backend:8000 \
> leecloudo/guestbook:frontend_1.0
Unable to find image 'leecloudo/guestbook:frontend_1.0' locally
front, backend, mongodb 컨테이너 생성
devapp-net bridge 네트워크로 연결
참고자료
https://yohanpro.com/posts/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-IP%EC%A3%BC%EC%86%8C%EC%9D%98%20%EA%B5%AC%EC%A1%B0/
https://jonnung.dev/docker/2020/02/16/docker_network/