<aside> 💡 Docker Network 활용하기
<aside> ❓ 네트워크란?
<aside> 💡 도커 네트워크 종류
<aside> 🌐 docker virtual bridge
Docker default network : bridge
nmcli dev
docker network ls
docker network rm polynet
ifconfig
yum install bridge-utils -y
brctl show
# network 만들기 (default: bridge)
docker network create mynet
docker network create -d bridge [이름]
docker network create -d host [이름] ※ 1개만 가능
docker network create -d null [이름] ※ 1개만 가능
docker run -itd --name c1 --net bridge alpine
docker run -itd --name c2 --net mynet alpine
docker run -itd --name c3 --net mynet alpine
# 확인
brctl show
traceroute를 이용한 ping test
# mynet 설정 확인
docker network inspect mynet
EXPOSE : PORT를 외부에 노출하기
Docker Host의 docker0 NIC가 NAT 기능을 하므로, IP가 사설 IP이므로, Host 외부에서 container에 접속할 수 없다.
FROM ubuntu:18.04
RUN apt update
RUN apt -y install iputils-ping traceroute apache2
EXPOSE 80
ENTRYPOINT ["apache2ctl"]
CMD ["-D", "FOREGROUND"]
# dockerfile apache-poly라는 image 만들기
docker build -t apache-poly .
docker images
docker history apach-poly
# 포트포워딩으로 container 만들기
docker run -d --name myweb -p 80:80 apache-poly
docker run -d --name myweb8888 -p 8888:80 apache-poly
# myweb8888 포트정보
docker port myweb8888
</aside>
<aside> 🌐 Docker network
docker run -itd --name bcon10 --net bridge alpine
docker run -itd --name bcon20 --net bridge alpine
docker run -itd --name bcon30 --net mynet alpine
docker run -itd --name bcon40 --net mynet alpine
docker run -itd --name hcon10 --net host alpine
docker run -itd --name hcon20 --net host alpine
docker run -itd --name ncon10 --net none alpine
docker run -itd --name ncon20 --net none alpine
<aside> 📌 정리 bcon10 → bcon20 : 통신 O bcon10 → bcon30 : 통신 X
bcon30 → bcon40 : 통신 O bcon30 → bcon10 : 통신 X bcon30 → node1 : curl http://192.168.0.32 O
</aside>
# nginx , pengbai/docker-supermario container 생성
docker run -d --name hostweb --net host nginx
docker run -d --name game --net host pengbai/docker-supermario
<aside> ✅ 이미지 실행 포트 확인
docker history pengbai/docker-supermario | grep -i expose
docker history apache-poly | grep -i expose
</aside>
<aside> 🚨 외부에서 접속할 때에 포트포워딩 필수 network-bridge
# -p [호스트포트]:[외부포트] : 포트포워딩
docker run -d -p 80:80 httpd
</aside>
</aside>
<aside> 🌐 동일한 Host에서 실행 중인 container에 연결
# 옵션 link를 이용해 통신하기
docker run -itd --name containerhigh alpine
docker run -itd --name con10 --link containerhigh:con20 alpine
<aside> 🌐 MACVLAN
# mymacvlan network 만들기
docker network create -d macvlan --subnet 192.168.0.0/24 --ip-range **192.168.0.225**/32 --gateway 192.168.0.1 -o parent=enp0s8 mymacvlan
# 만든 mymacvlan으로 nginx container 만들기
**docker run -d --name myweb --network mymacvlan nginx**
</aside>
<aside> 🌐 Overlay 네트워크
</aside>
</aside>
<aside> 🕹️ 쉬어가는 코너
<aside> ⛔ container에서 script 실행하기
</aside>
</aside>
<aside> 🌐 Reverse Proxy Server 및 VPN 연결
<aside> 🚨 Bridege 네트워크의 한계 내부 → 외부 : NAT기능 외부 → 내부 : PORT Forwarding 동일한 PORT가 내부에 여러개가 있을때 문제가 발생!
</aside>
<aside> 💡 Proxy Server
Forward Proxy
클라이언트 그뤂 앞에 있는 서버
사내 → 인터넷으로 나가는 요청 처리
Reverse Proxy
하나 이상의 웹 서버 앞에 위치하며, 인터넷에서 요청을 가져와서 해당 웹 서버로 전달하는 역할(대리자)을 한다. 클라이언트가 해당 origin 서버와 직접 통신하지 않도록 한다.
인터넷 → 사내로 들어오는 요청 처리
<aside> 💡
Nginx Proxy Manager (NPM)
# docker-compose 설치
yum install docker-compose -y
# /root 경로에 npm 디렉토리 만듬
mkdir ~root/npm ; cd npm
# /root/npm 에 config.json, docker-compose.yml 다운
wget <http://down.cloudshell.kr/docker/npm/config.json>
wget <http://down.cloudshell.kr/docker/npm/docker-compose.yml>
# docker-compose로 동시 2개 comtainer 생성
docker-compose up -d
# portainer_data volume 만들기
docker volume create portainer_data
#
docker run -d --name portainer -p 8000:8000 -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.9.3
<aside> ✨ PORT안쓰고 web설정하기
</aside>
</aside>
</aside>
</aside>
<aside> 🌐 VPN을 이용한 container
</aside>