본문 바로가기
Docker/실습

[Docker-실습] 9.Container Network

by Haengsin 2021. 11. 15.

(요약)

- 컨테이너 네트워크 사용하기

- 컨테이너 포트 외부로 노출하기

- User-Defined Network 구성하기

- 컨테이너 간 통신 wordpress, mysql 컨테이너 서비스 구축하기

 

 

1. 컨테이너 네트워크 사용하기 

  • docker0 bridge Network
ip addr
brctl show

docker run --name c1 -it busybox
docker inspect c1

docker run --name c2 -it busy box
docker inspect c2

ip addr
brctl show

 

 

c1
docker inspect c1

 

- sandbox : c1의 container의 network 환경을 만들어준 것.

- Endpoint : Veth, 컨테이너 안에 있는 네트워크 인터페이스.

- IP, Gateway, Mac 정보 등을 확인 가능.

 

 

 

c2

docker bridge0 은 IP:172.17.0.1 을 가지며, RUN 된 컨테이너들은 순차적으로 IP:172.17.0.2 ~ 가 할당되는 것을 확인할 수 있다.

 

docker run -d -p 80:80 --name web1 nginx:latest
curl 172.17.0.4

web1

※ NAT Table 확인

iptables -t nat -L -v

- 172.0.0.0 IP대역에 대하여 anywhere 로 나갈 때 MASQUERADE 해주겠다. (Host의 IP로 바꿔서 송출해주겠다.)

 

※ IP MASQUERADE (=MASQ, IPMASQ)

리눅스의 NAT(Network Address Translation) 기능으로써 내부 컴퓨터들이 리눅스 서버를 통해서 인터넷 등 다른 네트워크에 접속할 수 있도록 해주는 기능이다.

 

외부에서는 HOST의 IP 만 알 수 있다. 이는 높은 보안성이라는 장점을 제공하지만, 반면에 외부에서 먼저 내부로 통신을 시도할 수 없지만, 이는 iptable의 포워딩을 통해서 해소할 수 있다. 즉, 외부에서 특정 포트나 프로토콜로 Host에 요청할 경우 지정한 내부 Container로 연결하도록 규칙을 지정할 수 있다.

 

 

※ Alias를 생성하여 docker container들 삭제

alias crm='docker rm -f $(docker ps -aq)'
alias

crm
sudo docker ps

 

2. 컨테이너 포트 외부로 노출하기

  • port-forwarding

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

     iptables rule을 통한 포트 노출

         -p hostPort:containerPort

         -p containerPort

         -P

docker run --name web1 -d -p 80:80 nginx:latest
docker run --name web2 -d -p 80 nginx:latest
docker run --name web -d -P nginx:latest

 

 

 

3. User-Defined bridge Network 생성

docker network create --driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.254 \
mynet

docker network ls

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

curl localhost

sudo docker login
sudo docker run -d --name app.js \
--net mynet --ip 192.168.100.100 \
-p 8080:8080 \
smlinux/appjs

curl localhost:8080

 

※ docker network 명령어

docker network 명령어
docker ls 와 docker inspect 로 확인

 

4. Container Service Operation

  • 컨테이너를 이용한 server & client 서비스 운영
sudo docker run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_PASSWORD=wordpress mysql:5.7

sudo docker run -d --name wordpress --link mysql:mysql \
-e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4

 

 

 

Reference



'Docker > 실습' 카테고리의 다른 글

Ubuntu 에 Docker 설치  (1) 2023.04.20
[Docker-실습] 8.Container Storage  (0) 2021.10.13
[Docker-실습] 7.Container 리소스 관리  (0) 2021.09.09
[Docker-실습] 6.Container 운영  (0) 2021.08.27
[Docker-실습] 5.Container Registry  (0) 2021.08.23