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으로 데이터 저장
'따배도 스터디' 카테고리의 다른 글
10-2 빌드에서 운영까지 (using Docker Compose) - 실습편 (0) | 2023.04.30 |
---|---|
10-1 빌드에서 운영까지 (using Docker Compose) - 이론편 (0) | 2023.04.30 |
9-1 컨테이너간 통신(네트워크)- 이론편 (0) | 2023.04.27 |
8-2 Docker Container Storage - 실습편 (0) | 2023.04.25 |
8-1 Docker Container Storage - 이론편 (0) | 2023.04.25 |