06C. ๋ค๋ฅธ ์๋ฒ์ Docker ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ธฐ
06C. ๋ค๋ฅธ ์๋ฒ์ Docker ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ธฐ ๊ด๋ จ
์์์ ์ค๋ช
ํ --lin
k ์ต์
์ ๊ฐ์ ์๋ฒ์ ์ปจํ
์ด๋๋ผ๋ฆฌ ์ฐ๊ฒฐํ๋ ์ต์
์
๋๋ค. ์ด๋ฒ์๋ ์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋(Ambassador Container)๋ผ๋ ๊ฒ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ์๋ฒ์ ์๋ ์ปจํ
์ด๋์ ์ฐ๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋๋ ํน๋ณํ ์ปจํ
์ด๋๊ฐ ์๋ ๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ Docker ์ปจํ
์ด๋์
๋๋ค. ์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋๋ socat
์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ด์ฉํ์ฌ TCP ์ฐ๊ฒฐ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋์ Dockerfile์ ๋ณด๋ฉด ์๋นํ ๋ณต์กํ๊ฒ ๋ณด์ด์ง๋ง ์๊ฐ๋ณด๋ค ๊ฐ๋จํฉ๋๋ค. docker run
๋ช
๋ น์ ์คํํ ๋ ์ ๋ฌํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ socat
์ ์คํํ๋ ์
ธ ์คํฌ๋ฆฝํธ์
๋๋ค.
CMD env | grep _TCP= | \
sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat \
TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' \
| sh && top
docker run
๋ช
๋ น์์ --link
์ต์
์ ์ฌ์ฉํ๊ฑฐ๋ -e EXAMPLE_PORT_1234_TCP=tcp://192.168.0.10:1234
๋ผ๊ณ ์ค์ ํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๊ฒฝ ๋ณ์์ ํฌํธ ์ ๋ณด๊ฐ ์ค์ ๋ฉ๋๋ค.
env
๋ช
๋ น์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๋ ฅํ๊ณ , grep
๋ช
๋ น์ผ๋ก _TCP=
๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด์ ์ฐพ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ sed
๋ช
๋ น์ผ๋ก ์ ๊ทํํ์์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์์ ํฌํธ ๋ฒํธ์ IP ์ฃผ์๋ฅผ ์ถ์ถํฉ๋๋ค. ๊ทธ ๋ค ์ถ์ถํ ํฌํธ ๋ฒํธ์ IP ์ฃผ์๋ฅผ์ ์ด์ฉํ์ฌ socat
๋ช
๋ น์ ์คํํฉ๋๋ค.
EXAMPLE_PORT=tcp://192.168.0.10:1234
EXAMPLE_PORT_1234_TCP_ADDR=192.168.0.10
EXAMPLE_NAME=/example_ambassador/example
HOSTNAME=0cf479687cb0
EXAMPLE_PORT_1234_TCP_PORT=1234
HOME=/
EXAMPLE_PORT_1234_TCP_PROTO=tcp
EXAMPLE_PORT_1234_TCP=tcp://192.168.0.10:1234
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
์ ์์ ํ๊ฒฝ์์๋ socat
๋ช
๋ น์ผ๋ก ๋ก์ปฌ์ TCP ํ๋กํ ์ฝ 1234
๋ฒ ํฌํธ๋ฅผ 192.168.0.10
์ 1234
๋ฒ ํฌํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ก ์ค์ ํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ์ฐ๋ฐฐ์๋ ํจํด(Ambassador Pattern)์ด๋ผ ํฉ๋๋ค.
๊ทธ๋ฅ ๋ค๋ฅธ ์๋ฒ์ ์ปจํ ์ด๋์์ ํฌํธ๋ฅผ ๋ ธ์ถ์ํค๊ณ , ํด๋น ํฌํธ์ ์ฐ๊ฒฐํ๋ฉด ๊ฐ๋จํ๋ฐ ์ ์ด๋ ๊ฒ ๋ณต์กํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊น์? ์ปจํ ์ด๋์์ ํฌํธ๋ฅผ ๋ ธ์ถ์ํค๋ฉด ํด๋น ์๋ฒ์ IP ์ฃผ์๋ ๋๋ฉ์ธ์ ์์์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ค ๋ ๋ฒจ์์ IP ์ฃผ์๋ ๋๋ฉ์ธ์ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ๋ง์ฝ ์๋ฒ์ IP์ฃผ์, ๋๋ฉ์ธ์ด ๋ฐ๋๋ฉด ์์ค๋ฅผ ์์ ํด์ผ ํ๋๋ฐ, ์ฐ๋ฐฐ์๋ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ๋ฉด ๋ณ์นญ์ผ๋ก ์ ๊ทผํ๋ฏ๋ก ์์ค๋ฅผ ์์ ํ์ง ์์๋ ๋ฉ๋๋ค. ์ฆ ์ธ๋ถ์ ์๋ ์๋ฒ๋ผ๋ ๊ฐ์ ์๋ฒ์ Docker ๋ด๋ถ๋ง์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๊ฐ ๋ฉ๋๋ค.
socat
socat์ SOcket CAT์ ๋ปํ๋ฉฐ ์์ผ ํต์ ์ ๋ค๋ฅธ ์ฑ๋๋ก ์ ๋ฌํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ฑ๋์ ํ์ผ, ํ์ดํ, ์ฅ์น(์๋ฆฌ์ผ, pseudo ํฐ๋ฏธ๋ ๋ฑ), ์์ผ(์ ๋์ค ์์ผ, TCP, UDP ๋ฑ)์ด ์์ต๋๋ค.
์ด์ ์ฐ๋ฐฐ์๋ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํด์ ๋ค๋ฅธ ์๋ฒ์ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ํํ ํ ์คํธ๋ฅผ ์ํด Redis๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
๋จผ์ Redis ์๋ฒ๋ก ์ธ ์ปดํจํฐ์์ Redis ์ปจํ
์ด๋๋ฅผ ์์ฑํฉ๋๋ค. ์ด ์๋ฒ์ IP ์ฃผ์๋ 192.168.0.10
์ด๋ผ ํ๊ฒ ์ต๋๋ค.
sudo docker pull redis:latest
sudo docker run -d --name redis redis:latest
--name redis
์ต์
์ผ๋ก ์ปจํ
์ด๋ ์ด๋ฆ์ redis
๋ก ์ง์ ํฉ๋๋ค.
.Redis ์ปจํ
์ด๋๋ฅผ ์ํ ์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋๋ฅผ ์์ฑํฉ๋๋ค. svendowideit
๋ ์ฐ๋ฐฐ์๋ ํจํด์ ๋ง๋ ์ฌ๋ ์ด๋ฆ์
๋๋ค.
sudo docker run -d --link redis:redis --name redis_ambassador \
-p 6379:6379 svendowideit/ambassador
-d
์ต์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํฉ๋๋ค.--link redis:redis
์ต์ ์ผ๋กredis
์ปจํ ์ด๋๋ฅผredis
๋ณ์นญ์ผ๋ก ์ฐ๊ฒฐํฉ๋๋ค.--name redis_ambassador
์ต์ ์ผ๋ก ์ปจํ ์ด๋ ์ด๋ฆ์redis_ambassador
๋ก ์ง์ ํฉ๋๋ค.-p 6379:6379
์ต์ ์ผ๋ก ์ปจํ ์ด๋์6379
๋ฒ ํฌํธ์ ํธ์คํธ์6379
์ฐ๊ฒฐํ๊ณ ์ธ๋ถ์ ๋ ธ์ถํฉ๋๋ค.- Docker Hub์ ์๋
svendowideit/ambassador
์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ๋ค ์ปจํ ์ด๋๋ก ์์ฑํฉ๋๋ค(docker run
๋ช ๋ น์ ๋ก์ปฌ์ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ์๋์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ต๋๋ค).
์ด์ Redis ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ์ปดํจํฐ์์ ์ฐ๋ฐฐ์๋ ์ปจํ
์ด๋๋ฅผ ์์ฑํฉ๋๋ค. Redis ์๋ฒ์ IP ์ฃผ์๋ 192.168.0.10
์
๋๋ค.
sudo docker run -d --name redis_ambassador --expose 6379 \
-e REDIS_PORT_6379_TCP=tcp://192.168.0.10:6379 svendowideit/ambassador
-d
์ต์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํฉ๋๋ค.--name redis_ambassador
์ต์ ์ผ๋ก ์ปจํ ์ด๋ ์ด๋ฆ์redis_ambassador
๋ก ์ง์ ํฉ๋๋ค.--expose 6379
์ต์ ์ผ๋ก ๋ค๋ฅธ ์ปจํ ์ด๋์์6379
๋ฒ ํฌํธ์ ์ฐ๊ฒฐํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค. ์ฆ Redis ํด๋ผ์ด์ธํธ๊ฐ ์ดredis_ambassador
์ปจํ ์ด๋์6379
ํฌํธ์ ์ ์ํ๊ฒ ๋ฉ๋๋ค.--expose
์ต์ ์-p
์ต์ ๊ณผ๋ ๋ฌ๋ฆฌ ํธ์คํธ์ ํฌํธ๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์์ต๋๋ค.-e REDIS_PORT_6379_TCP=tcp://192.168.0.10:6379
์ต์ ์ผ๋ก IP ์ฃผ์์ ํฌํธ๋ฅผ ์ค์ ํ์ฌ ๋ค๋ฅธ ์๋ฒ์ ์๋redis_ambassador
์ปจํ ์ด๋์ ์ฐ๊ฒฐํฉ๋๋ค.- Docker Hub์ ์๋
svendowideit/ambassador
์ด๋ฏธ์ง ๋ฐ์ ๋ค ์ปจํ ์ด๋๋ก ์์ฑํฉ๋๋ค.
์ด์ Redis ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ฉํ์ฌ redis_ambassador
์ปจํ
์ด๋์ ์ ์ํฉ๋๋ค.
sudo docker run -i -t --rm --link redis_ambassador redis:latest redis-cli -h redis_ambassador
-i -t
์ต์ ์ผ๋ก ์ฝ์์์ ์ ์ถ๋ ฅ์ ํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค.--rm
์ต์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํ๋ง ํ๊ณ ์ปจํ ์ด๋ ์์ฒด๋ ์ญ์ ํฉ๋๋ค. Redis ํด๋ผ์ด์ธํธ์ฒ๋ผ 1ํ์ฑ์ผ๋ก ์ฌ์ฉํ ๋ ํธ๋ฆฌํฉ๋๋ค.--link redis_ambassador
์ต์ ์ผ๋กredis_ambassador
์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.redis:latest redis-cli -h redis_ambassador
๋redis:latest
์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ๋คredis-cli
๋กredis_ambassador
์ปจํ ์ด๋์ ์ฐ๊ฒฐํฉ๋๋ค.
.Redis ํด๋ผ์ด์ธํธ๊ฐ ์คํ๋๋ฉด ping
๋ช
๋ น์ ์
๋ ฅํฉ๋๋ค. ๊ฒฐ๊ณผ๋ก PONG
์ด ์ถ๋ ฅ๋๋ฉด ๋ค๋ฅธ ์๋ฒ์ Redis ์ปจํ
์ด๋์ ์ ์์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒ์
๋๋ค.
ping
#
# PONG