[Docker] 컨테이너 네트워크
네트워크 간 연결 연습
$ mkdir webdata
$ echo "<h1>Docker Volume-Learn</h1>" > index.html
- webdata 폴더를 만들어 html index를 저장해줌
$ docker run -d --name web -p 80:80 -v \ /webdata:/usr/share/nginx/html:ro nginx:1.14
- webdata 폴더에 볼륨마운트 시켜줌
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f4f3236e15b nginx:1.14 "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web
# ngnix 컨테이너가 실행 중임을 확인
- localhost:80 포트에 접속하면 서버가 통신중인 것 확인할 수 있음
네트워크간 연결 연습 2
df -h /
: 디스크 사용량을 모니터링 할 때 사용하는 커멘드
해당 커멘드를 10초마다 갱신해서 서버에 전송해보자
#!/bin/bash
mkdir -p /webdata
while true
do
df -h / > /webdata/index.html
sleep 10
done
# df.sh 파일을 생성 -> 서버에 전송할 html 파일
FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]
# dockerfile을 만들어줌. 서버에 df.sh가 실행되도록 명령을 전송하는 역할
-
df.sh 와 dockerfile을 bulid함
docker build -t wjddlr0303/df:latest .
-
docker run -d --name web2 -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14
- 80 포트로 접속하여 로컬 호스트에서 실행되는 것을 확인할 수 있음
컨테이너 간 통신
docker를 host에 설치한 후 host의 network interface를 살펴보면, docker0라는 virtual interface가 있는 것을 볼 수 있다.
-
IP 는 자동으로 172.17.42.1 로 설정 되며 16 bit netmask(255.255.0.0) 로 설정된다.
-
이 IP는 DHCP를 통해 할당 받는 것은 아니며, docker 내부 로직에 의해 자동 할당 받는 것이다.
-
docker0 는 일반적인 interface가 아니며, virtual ethernet bridge 이다.
docker가 설치되면 docker0라는 bridge가 생성되며, container가 running 될때마다 vethXXXX라는 이름의 interface가 attach되는 형태이다.
root@~~:# brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.d67973326669 no veth0e580ab veth77faee0
# 2개의 컨테이너가 running 중인 상태
댓글남기기