06B. Docker ์ปจํ ์ด๋ ์ฐ๊ฒฐํ๊ธฐ
06B. Docker ์ปจํ ์ด๋ ์ฐ๊ฒฐํ๊ธฐ ๊ด๋ จ
Docker๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ์น ์๋ฒ, DB ๋ฑ ํ์ํ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์ค์นํ ์๋ ์์ง๋ง ๋ณดํต ํ๋ก๊ทธ๋จ๋ณ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ก๊ทธ๋จ๋ณ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ปจํ ์ด๋๋ฅผ ์์ฑํ์ ๋ ์์ ์๋ ์ปจํ ์ด๋์ ์ ์ํ ์ผ์ด ๋ง์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ์น ์๋ฒ๋ DB์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํฉ๋๋ค.
Docker ์ปจํ
์ด๋๋ผ๋ฆฌ ์ฐ๊ฒฐํ ๋๋ docker run
๋ช
๋ น์์ --link
์ต์
์ ์ฌ์ฉํฉ๋๋ค. ๋จผ์ DB ์ด๋ฏธ์ง๋ฅผ ์ปจํ
์ด๋๋ก ์คํํฉ๋๋ค. ์ด๋ฒ์๋ MongoDB๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค(docker run
๋ช
๋ น์ ๋ก์ปฌ์ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ต๋๋ค).
sudo docker run --name db -d mongo
DB ์ปจํ
์ด๋ ์ด๋ฆ์ db
๋ก ์ค์ ํ์์ต๋๋ค.
์ด์ web ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ฉด์ db
์ปจํ
์ด๋์ ์ฐ๊ฒฐํฉ๋๋ค. ์น ์๋ฒ๋ก ์ฌ์ฉํ ์ปจํ
์ด๋๋ nginx
์ด๋ฏธ์ง๋ก ์์ฑํ๊ฒ ์ต๋๋ค.
sudo docker run --name web -d -p 80:80 --link db:db nginx
docker run
๋ช
๋ น์์ ์ฐ๊ฒฐ ์ต์
์ --link <์ปจํ
์ด๋ ์ด๋ฆ>:<๋ณ์นญ>
ํ์์
๋๋ค.
์ปจํ ์ด๋ ๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
sudo docker ps
#
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 2ef5f41efbed nginx "/docker-entrypoint.โฆ" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp web
# dba0e6bfcac0 mongo "docker-entrypoint.sโฆ" 2 minutes ago Up 2 minutes 27017/tcp db
db
์ปจํ
์ด๋์ web
์ปจํ
์ด๋๊ฐ ์ฐ๊ฒฐ๋์์ต๋๋ค. web/db
๋ผ๊ณ ํ์๋๋๋ฐ web
์ปจํ
์ด๋์์ db
์ปจํ
์ด๋์ ์ ์ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
์ด์ web
์ปจํ
์ด๋ ์์์ db:27017
์ฃผ์๋ก db
์ปจํ
์ด๋์ MongoDB์ ์ ์ํ ์ ์์ต๋๋ค.
mongodb://db:27017/exampledb
์ปจํ
์ด๋ ์์์ ๋ค๋ฅธ ์ปจํ
์ด๋์ ์ ์ํ ๋๋ <๋ณ์นญ>:<ํฌํธ ๋ฒํธ>
ํ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋ณ์นญ๊ณผ IP ์ฃผ์
๋ค์๊ณผ ๊ฐ์ด docker inspect
๋ช
๋ น์ผ๋ก web ์ปจํ
์ด๋์ ์ธ๋ถ ์ ๋ณด์์ hosts
ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ๋ค cat
๋ช
๋ น์ผ๋ก ๋ด์ฉ์ ์ดํด๋ด
๋๋ค(`๋ ํญํค ์์ ์๋ ๋ฌธ์์
๋๋ค).
sudo cat `sudo docker inspect -f "{{ .HostsPath }}" web`
#
# 127.0.0.1 localhost
# ::1 localhost ip6-localhost ip6-loopback
# fe00::0 ip6-localnet
# ff00::0 ip6-mcastprefix
# ff02::1 ip6-allnodes
# ff02::2 ip6-allrouters
# 172.17.0.3 db dba0e6bfcac0
# 172.17.0.4 2ef5f41efbed
db
๋ --link db:db
์์ ์ค์ ํ ๋ณ์นญ์ด๊ณ , 172.17.0.3
๋ db
์ปจํ
์ด๋์ IP ์ฃผ์์
๋๋ค.
์ปจํ
์ด๋๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์ด๋ ๊ฒ hosts
ํ์ผ์ IP ์ฃผ์๊ฐ ์๋์ผ๋ก ์ค์ ๋๊ธฐ ๋๋ฌธ์ ๋ณ์นญ์ ํตํด ์ฐ๊ฒฐํ ์ปจํ
์ด๋์ ์ ์ํ ์ ์์ต๋๋ค.
์ถ๊ฐ ํด์ค
๋์ปค 1.9.0 ๋ฒ์ ๋ถํฐ ๋คํธ์ํฌ๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ ์์ผ๋ก ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ ๋คํธ์ํฌ๋ฅผ ์์ฑํ๊ณ ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐ์ํค๋ฉด ํด๋น ๋คํธ์ํฌ ์์ ์ํ ์ปจํ ์ด๋๋ผ๋ฆฌ๋ ์๋ก ์ ์ํ ์ ์์ต๋๋ค.
์ถํ --link
์ต์
์ ์ฌ๋ผ์ง ์๋ ์์ต๋๋ค.
๋จผ์ docker network create
๋ช
๋ น์ผ๋ก hello-network
๋ฅผ ์์ฑํฉ๋๋ค.
sudo docker network create hello-network
DB ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ฉด์ hello-network
์ ์ฐ๊ฒฐํฉ๋๋ค.
sudo docker run --name db -d --network hello-network mongo
web
์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ฉด์ hello-network
์ ์ฐ๊ฒฐํฉ๋๋ค.
sudo docker run --name web -d -p 80:80 --network hello-network nginx
web
์ปจํ
์ด๋์์ Bash ์
ธ์ ์คํํ ๋ค์ ping
์ ์ค์นํ์ฌ ์คํํด๋ด
๋๋ค.
sudo docker exec -it web bash
apt update && apt install iputils-ping -y
ping db
#
# PING db (172.18.0.2) 56(84) bytes of data.
# 64 bytes from db.hello-network (172.18.0.2): icmp_seq=1 ttl=64 time=0.118 ms
# 64 bytes from db.hello-network (172.18.0.2): icmp_seq=2 ttl=64 time=0.089 ms
# 64 bytes from db.hello-network (172.18.0.2): icmp_seq=3 ttl=64 time=0.089 ms
์ด๋ ๊ฒ ๊ฐ์ ๋คํธ์ํฌ์ ์ํ ์ปจํ ์ด๋๋ผ๋ฆฌ๋ ์ปจํ ์ด๋ ์ด๋ฆ์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.