본문 바로가기

따배도 스터디

9-2 컨테이너간 통신(네트워크)- 실습편

728x90

Content


container network 사용하기
container 포트를 외부로 노출
user-defined network 구성하기
container 간 통신 ( wordpress, mysql 컨테이너 서비스 구축 )

 

Q1.container network 사용하기

docker0에서 만들어진 container는 기본적으로 “순차적으로” ip가 할당된다

모든 컨테이너는 docker0를 통해서 외부와 통신한다

( 이 docker0를 bridge network라고 한다 )

 

docker0 bridge Network

ip addr 명령어 실행!

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 0e:9d:11:8a:e0:61 brd ff:ff:ff:ff:ff:ff
    inet 172.31.45.232/20 metric 100 brd 172.31.47.255 scope global dynamic eth0
       valid_lft 3221sec preferred_lft 3221sec
    inet6 fe80::c9d:11ff:fe8a:e061/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:53:8b:f4:0e 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
ubuntu@ip-172-31-45-232:~$
  • docker0의 ip address는 172.31.45.232/20 이다

( sudo apt-get install -y bridge-utils )

 

 

brctl show

brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242538bf40e       no

docker0가 bridge interface임을 확인할 수 있다

 

docker run -it --name c1 busybox

sudo docker run -it --name c1 busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
4b35f584bb4f: Pull complete
Digest: sha256:b5d6fe0712636ceb7430189de28819e195e8966372edfc2d9409d79402a0dc16
Status: Downloaded newer image for busybox:latest
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ #

docker run -it --name c2 busybox 명령어 사용시 127.0.0.2 번으로 순차적으로 늘어남을 알수있음

 

Q2.container 포트를 외부로 노출

 

port forwarding

container port를 외부로 노출시킴으로써 외부 연결을 가능케한다
iptables rule을 통한 포트 노출


-p hostPort:containerPort
-p containerPort
-P


예)
docker run --name web1 -d -p 80:80 nginx:1.14
local host 80번으로 접속하면, container 80 포트로 연결해줘!


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

host port를 생략한다 ( container port만 !)
임의의 host port를 만들어준다(안쓰는포트를 랜덤으로 설정)


docker run --name web3 -d -P nginx:1.14
nginx의 도커파일을 확인해보면, EXPOSE 80이라고 적혀있다
container port도 지정하지 않고, 도커 파일에 적혀있는 곳으로 forwarding!

 

 

Q3.user-defined network 구성하기

 

기본적으로 도커가 동작될 때, 동작되는 네트워크를 확인해보자.

여기서 birdge 네트워크가 docker0 (default 네트워크)이다

 

docker network ls

sudo docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
29585cdae63d   bridge    bridge    local
1687ad9e88e9   host      host      local
280d96f7dd60   none      null      local

mynet 네트워크 만들기

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

 

container 만들기

docker run -it --name c1 busybox
docker 0 ( default 네트워크 ) 사용
고정 IP 불가 (순차적)


docker run -it --name c1 --net mynet busybox
mynet 네트워크 사용


docker run -it --name c1 --net mynet --ip 192.168.100.100 busybox
mynet 네트워크 사용 + 고정 IP 지정

 

Q4.container 간 통신(workpress,mysql 컨테이너 서비스구축)

mysql 컨테이너를 시행

 

docker run -d --name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_PASSWORD=wordpress mysql

mysql의 관리 db들이 생성됨을 알 수 있다

ls /dbdata/

wordpress 컨테이너 실행

-link를 사용하여, wordpress를 mysql과 연동

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

 

chatgpt 답변 link와 volumn차이

 

도커 링크(Link)와 볼륨(Volume)은 둘 다 컨테이너 간에 데이터를 공유하는 방법입니다. 하지만 그 차이점은 다음과 같습니다.

Link는 컨테이너 간에 네트워크를 통해 통신할 수 있게 해줍니다. 즉, 다른 컨테이너에서 실행 중인 애플리케이션에 대한 IP 주소를 제공합니다. 반면, Volume은 파일 시스템 레벨에서 컨테이너 간에 데이터를 공유합니다.

Link는 하나의 컨테이너가 다른 컨테이너를 참조할 때 사용되며, 컨테이너가 종료되면 링크도 함께 종료됩니다. 그러나 볼륨은 컨테이너가 종료되어도 계속해서 데이터를 유지합니다.

Link는 애플리케이션 간에 데이터를 공유할 때 사용되며, 볼륨은 파일을 저장하고 공유하기 위해 사용됩니다.

따라서, 링크는 컨테이너 간의 통신에 사용되고, 볼륨은 파일을 저장하고 공유하기 위해 사용됩니다. 또한, 링크는 컨테이너 간의 의존성을 만들고, 볼륨은 데이터를 유지하고 공유하기 위한 영구적인 저장소 역할을 합니다.

 

실습 비슷한 내용정리 : 같은 네트워크+데이터공유+volumn으로 데이터 저장

 

https://minwoo-it-factory.tistory.com/entry/Docker%EC%99%80-springboot-container%EB%A1%9C-%EC%98%AC%EB%A0%A4%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Docker와 springboot,mysql Docker Compose로 올려서 사용하기

🔎 Springboot 프로젝트 설정 도커 환경에서 DB를 사용하는 애플리케이션 구동을 목표로 하므로 최대한 간단하게 프로젝트를 구성해볼께요. springboot 프로젝트는 사용자에게 글을 입력받으면 DB에

minwoo-it-factory.tistory.com

 

728x90