๐ ๊ณต๋ถ ๊ณ๊ธฐ
์ถ๊ฐ์ ์ธ ๋์ปค ๊ณต๋ถ๋ฅผ ์ํด ์ ํ๋ธ ๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ๋ฅผ ๋ณด๋ฉด์ ์ ๋ฆฌํด ๋ด ๋๋ค.
๋ชฉ์ฐจ
๐9-1. ์ปจํ ์ด๋ ๊ฐ ํต์ (๋คํธ์ํฌ) : ์ด๋ก
1๏ธโฃ ์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ํต์ ํ๋์?
* ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ์ปจํ ์ด๋๋ Net namespace๋ผ๋ ๊ธฐ์ ์ ํตํด์ ๊ตฌํ๋ ๊ฐ์ํ๋ก ๊ฐ์ ๋ ๋ฆฝ๋ ๋คํธ์ํฌ ๊ณต๊ฐ์ ํ ๋น ๋ฐ๋๋ค. 1
- ์ปจํ ์ด๋์ ๋คํธ์ํฌ ๋ชจ๋ธ
โ ์ปจํ ์ด๋๋ฅผ ์์ฑ์ eth0๋ผ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ปจํ ์ด๋์ ํ ๋น
โก ๊ทธ์ ๋์์ ํธ์คํธ์๋ veth(virtual ethernet)๋ผ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ํ ๋น
โข ์ด veth๋ฅผ ํตํด ์ปจํ ์ด๋์ eth0 ์ธํฐํ์ด์ค์ ์๋ก ํต์
โฃ ๊ทธ๋ฆฌ๊ณ ํธ์คํธ veth๋ docker0๊ณผ ๋ฐ์ธ๋ฉ๋๊ณ
โค docker0๋ ํธ์คํธ์ eth0 ์ธํฐํ์ด์ค ์ฐ๊ฒฐ๋์ด
โฅ ์ธ๋ถ๋ก๋ถํฐ ๋ค์ด์จ ์์ฒญ์ ์ฐ๊ฒฐ
* ethernet ์ด๋?
์ปดํจํฐ ๋คํธ์ํฌ ๋ฐฉ์์ผ๋ก ๊ฐ์ ์ด๋ ๊ฑด๋ฌผ๊ณผ ๊ฐ์ ๋ก์ปฌ ํ๊ฒฝ(LAN)์์ ๊ฐ์ฅ ๋ง์ด ํ์ฉ๋๋ ๊ธฐ์ ๊ท๊ฒฉ์ด๋ค.
์ด๋๋ท์ OSI ๋ชจ๋ธ์ ๋ฌผ๋ฆฌ ๊ณ์ธต์์ ์ ํธ์ ๋ฐฐ์ , ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต์์ MAC(media access control)ํจํท๊ณผ ํ๋กํ ์ฝ์ ํ์์ ์ ์ํ๋ค.
๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๊ฐ ๊ธฐ๊ธฐ๋ค์ด 48๋นํธ ๊ธธ์ด์ ๊ณ ์ ์ MAC ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์ด ์ฃผ์๋ฅผ ์ด์ฉํด ์ํธ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋ง๋ค์ด์ ธ ์๋ค.
* docker0 ๋?
docker0 ์ธํฐํ์ด์ค๋ ํธ์คํธ์ eth0 ์ธํฐํ์ด์ค์ ์ปจํ ์ด๋ eth0 ์ฌ์ด์ ์ค์ฌ์ ์ญํ , ์ฐ๊ฒฐ ๋ค๋ฆฌ ์ญํ ์ ํ๋ ๊ฐ์ ๋ธ๋ฆฟ์ง๋ก ๋์ปค๋ฅผ ์ค์นํ๋ฉด ๋์ปค ๋ด๋ถ๋ก์ง์ ์ํด ์๋์ผ๋ก ์ค์ ๋๋ฉฐ, ์๋์ผ๋ก IP๋ฅผ ํ ๋น๋ฐ๊ฒ ๋๋ค.
(๊ธฐ๋ณธ 172.17.X.X๋ก ์์ํ๋ฉฐ netmask๋ 255.255.0.0์ผ๋ก ์ค์
* veth (virtual ethenet) ๋?
์ปจํ ์ด๋ ์์ฑ์ ๋์ปค๊ฐ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๊ฐ์์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ก, ํญ์ ์์ผ๋ก ์์ฑ๋๋ค.
ํ๋๋ vethxxxx ๋ผ๋ ์ด๋ฆ์ผ๋ก ํธ์คํธ์ ์์ฑ๋์ด docker0์ ๋ฐ์ธ๋ฉ ๋๋ ๊ฒ ํ๋์
eth0๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปจํ ์ด๋ ๋ด๋ถ์ ์์ฑ๋์ด veth์ ์ฐ๊ฒฐํ๋ ๊ฒ ํ๋๋ฅผ ์์ฑํ๋ค.
- ๊ทธ๋์ ์ปจํ ์ด๋ ๋คํธ์ํฌ๋
- virtual ethernet bridge : 172.17.0.0/16
- container ์์ฑ ์ veth ์ธํฐํ์ด์ค ์์ฑ (sandbox)
- ๋ชจ๋ ์ปจํ ์ด๋๋ ์ธ๋ถ ํต์ ์ docker0 ํตํด ์งํ
- container running์ 172.17.X.Y๋ก IP ์ฃผ์ํ ๋น
1) ์ด๋๋ท ip ์ฃผ์ ์กฐํ
ip address
** wsl2 ํ๊ฒฝ์์๋ ๋ณ๋๋ก bridge ๊ธฐ๋ฅ์ ํ์ฑํ ํ์ง ์์ผ๋ฉด docker0์ด ๋ณด์ด์ง ์๋๋ค๊ณ ํ๋ค.
2๏ธโฃ ์ปจํ ์ด๋ ํฌํธ๋ฅผ ์ธ๋ถ๋ก ๋ ธ์ถํ ์ ์์ด์?
Port Forwarding ์ ํตํด ํฌํธ๋ฅผ ์ธ๋ถ๋ก ๋ ธ์ถ์ํฌ ์ ์๋ค.
docker run [-p ํธ์คํธํฌํธ:์ปจํ
์ด๋ํฌํธ] <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
iptables rule์ ํตํด ํฌํธ ๋ ธ์ถ์ด ๊ฐ๋ฅํ๋ฐ ํฌํธํฌ์๋ฉ์ ํ๋ฉด ๋ฐฉํ๋ฒฝ ๋ฃฐ์ด ๋ง๋ค์ด์ ธ ์ฐ๊ฒฐ ๊ฐ๋ฅ
์๋ ๋ช ๋ น์ด๋ก ํฌํธํฌ์๋ฉ ๋๊ฑฐ ํ์ธ ๊ฐ๋ฅ
iptables -t nat -L -n -v
* 80ํฌํธ๋ฅผ ์ด๊ณ ์๋ ์ปจํ ์ด๋๋ค์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒ์ ๊ฐ๋ฅ ํ๋ ํธ์คํธ์ eth0 ์ 80ํฌํธ๋ก ์ฐ๊ฒฐ๋ ์ ์๋ ๊ฑด ํ๋. ์ปจํ ์ด๋ ๋ผ๋ฆฌ๋ ip๊ฐ ๋ฌ๋ผ์ ํฌํธ๊ฐ 80ํฌํธ๋ก ๊ฐ์๋ ๊ฐ์์ ํฌํธ๋ผ ์๊ด์์ง๋ง ์ฐ๊ฒฐ๋๋ ํธ์คํธ์ ํฌํธ 80์ ๋จ ํ๋๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก nginx๋ฅผ ์ฌ๋ฌ๊ฐ ์ฐ๊ฒฐํด์ฃผ๊ณ ์ถ๋ค๋ฉด, 80ํฌํธ๊ฐ ์๋ ๋ค๋ฅธ ํฌํธ๋ก ์ฐ๊ฒฐ์ํค๋ฉด ๋๋ค.
* ํฌํธ๋ผ๋ฆฌ๋ ๊ผญ ๊ฐ์ ํฌํธ๋ก ์ผ์น์ํฌ ํ์ ์๋ค.
* ํธ์คํธ ํฌํธ ์ค ์ฌ์ฉํ์ง ์๊ณ ์๋ ํฌํธ ์ค์ ๋๋ค์ผ๋ก ๋ถ์ฌํ๊ณ ์ถ๋ค๋ฉด
# ํธ์คํธํฌํธ๋ ๋๋ค์ผ๋ก ์ง์
docker run [-p ์ปจํ
์ด๋ํฌํธ] <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
๋ง์ฝ ๋๋ฌธ์ P๋ง ํ๋ค๋ฉด dockerfile์์ expose๋ก ์ ์ํ๊ณ ์๋ ํฌํธ์ ๋ง์ถฐ ๋๋ค ํฌํธ๋ฅผ ์ค์ ํ๊ฒ ๋๋ค.
docker run -P <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
3๏ธโฃ ์ปจํ ์ด๋ ๋คํธ์ํฌ๋ฅผ ์ถ๊ฐํ ์ ์๋์?
docker0์ ํ ๋น๋๋ ip๋ ์ํ๋๋๋ก staticํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค
๊ทธ๋ผ static์ผ๋ก ํ ๋นํ๊ฑฐ๋ ์ํ๋ ip๋์ญ๋์ ํ ๋นํ๊ณ ์ถ๋ค๋ฉด
docker0์ ๋์ญ๋๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ ์ ์ ์์ ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ฉด ๊ฐ๋ฅํ๋ค
1) ๋คํธ์ํฌ ์์ฑ
# docker network create [--driver ๋ฐฉ์] [--subnet ๋์ญ๋/์ฌ์ด๋] [--gateway ip์ฃผ์์ค์ ] <๋คํธ์ํฌ๋ช
>
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet
* driver : bridge ํํ์ ๋คํธ์ํฌ๋ ํธ์คํธ ๋๋ non base์ ๋คํธ์ํฌ๋ฅผ ํ ๊ฒ์ธ์ง ์ค์ ๊ฐ๋ฅ
* subnet : ์๋ธ๋ท ๋์ญ๋ ์ค์ . ์๋ตํ๊ฒ ๋๋ฉด docker0์ ๋ฐ๋ฅธ ์์์ ์ธ ๋์ญ๋๊ฐ ์ค์ ๋๋ค.
* gateway : ์ปดํจํฐ ๋คํธ์ํฌ์์ ์๋ก ๋ค๋ฅธ ํต์ ๋ง, ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ปดํจํฐ๋ ์ํํธ์จ์ด๋ฅผ ๋๋ฃจ ์ผ์ปซ๋ ๋ง๋ก, ์ฆ ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ๋ค์ด๊ฐ๋ ์ ๊ตฌ ์ญํ
๐งโ IP์ฃผ์ ๋ค /์ซ์๋ ๋ญ์ง? CIDR (์ฌ์ด๋)์ผ! ์ฌ์ด๋๋ ๋ ๋ญ๋ฐ!?
์ ์๋ก ํ์๋ฉด Classless Inter-Domain Routing ์ผ๋ก ํด๋์ค ์๋ ๋๋ฉ์ธ๊ฐ ๋ผ์ฐํ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
(์ด๊ฒ ๋ฌด์จ๋ง์ด์ผ)
โ IP์๋ ํด๋์ค๊ฐ ์๋จ ๋ง์ด์ผ?
์ฌ์ด๋๋ฅผ ์๊ธฐ ์ ์ ๋จผ์ IPํด๋์ค๊ฐ ์ด๋ป๊ฒ ๋๋๋ ์ง ๋ถํฐ ๋ณด์.
1๏ธโฃ Aํด๋์ค
๋งจ์์๋ฆฌ ์๊ฐ ํญ์ 0์ธ ๊ฒฝ์ฐ๋ก 2์ง์๋ก ํํํ๋ฉด 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ์ด๋ค.
๋ฒ์๋ 00000000.00000000.00000000.00000000 (0.0.0.0) ~ 01111111.11111111.11111111.11111111 (127.255.255.255) ์ด๋ค.
Aํด๋์ค๋ ํ๋์ ๋คํธ์ํฌ๊ฐ ๊ฐ์ฅ ๋ง์ ํธ์คํธ ์๋ฅผ ๊ฐ์ง ์ ์๋ ํด๋์ค์ด๋ฉฐ,
ip์ฃผ์ ์ฒซ ์ฅํ ๋ ๊น์ง๋ฅผ ๋คํธ์ํฌ ๋ฒ์๋ก ํ๋ค 3
์ฒซ ์ฅํ ๋ ๋ถ์ ์๋ฆฌ๋ ๋คํธ์ํฌ ๋ฒ์, ๋ค์ 3๊ฐ์ ์ฅํ ๋ ํ๋ ๋ถ๋ถ์ ํธ์คํธ ๋ฒ์
00000000 | 00000000 | 00000000 | 00000000 |
๋คํธ์ํฌ๋ ์ฒซ์๋ฆฌ 0์ ๊ณ ์ ์ด๋ผ ์ด๋ฅผ ์ ์ธํ๋ฉด 2^7๊ฐ ๊น์ง ๊ฐ๋ฅํ์ง๋ง, 127์ ๋ฃจํ๋ฐฑ์ฃผ์ ๋ผ ์ ์ธ๋์ผํด์ ๋คํธ์ํฌ ๋ฒํธ๋ 1~126๊น์ง ๊ฐ๋ฅํ๋ค. 4
๋ง์ฝ 13.0.0.0์ ๋คํธ์ํฌ๋ฅผ ํ ๋น ๋ฐ์ผ๋ฉด 13๋ถ๋ถ์ด ๋คํธ์ํฌ, ๋๋จธ์ง 0.0.0์ ํธ์คํธ IP๋ก ํ ๋น ๊ฐ๋ฅํ๋ฐ
์ด ๊ฒฝ์ฐ 13.0.0.0์ ๋คํธ์ํฌ ์ฃผ์ ํํ์ ์ํด, 13.255.255.255๋ ๋ธ๋ก๋์บ์คํธ ์ฃผ์๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋น ์ง๊ฒ ๋๊ณ ์ด๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ฃผ์๋ค์ ์ ๋ถ ํ ๋นํ ์ ์์ด์ ip๊ฐ์์ ์์ด
(2^(ํธ์คํธ 2์ง์ ์))-2 ๊ฐ๋ก ์์์๋ (2^24)-2๊ฐ๊ฐ ๋๋ค.
๋คํธ์ํฌ ๊ฐ์ | ํธ์คํธ ๊ฐ์ |
2^7 - 1 (์์ด 0๊ณ ์ ์, 127์ ์ธ) | 2^24 - 2 (๋คํธ์ํฌ ์ฃผ์ 0.0.0๊ณผ ๋ธ๋ก๋์บ์คํธ ์ฃผ์ 255.255.255 ์ ์ธ) |
2๏ธโฃ Bํด๋์ค
Bํด๋์ค๋ ๋ฐ๋์ 10์ผ๋ก ์์ํ๋ฉฐ 2์ง์๋ก ํํํ๋ฉด 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ๋๋ค.
128.0.0.0 ~ 191.255.255.255๊น์ง์ ๋ฒ์๋ฅผ ์ง๋๋ค
์์ด 10์ผ๋ก ๊ณ ์ ๋์ด 127 ์ดํ์ 128 ๋ถํฐ ๋คํธ์ํฌ ๋ฒ์๊ฐ ์์.
๋คํธ์ํฌ ๋ฒ์๊ฐ ๋๋ฒ์งธ ์ฅํ ๋ ๊น์ง์ด๋ค
00000000 | 00000000 | 00000000 | 00000000 |
๋คํธ์ํฌ ๊ฐ์ | ํธ์คํธ ๊ฐ์ |
2^14 (์์ 10์ด ๊ณ ์ ) | 2^16 - 2 (๋คํธ์ํฌ ์ฃผ์ 0.0.0๊ณผ ๋ธ๋ก๋์บ์คํธ ์ฃผ์ 255.255.255 ์ ์ธ) |
3๏ธโฃ Cํด๋์ค
Cํด๋์ค๋ ๋ฐ๋์ 110์ผ๋ก ์์ํ๋ฉฐ 2์ง์๋ก ํํํ๋ฉด 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ์ด๋ฉฐ
์์ด 110์ผ๋ก ๊ณ ์ ๋์ด 192.0.0.0 ~ 223.255.255.255 ๊น์ง์ ๋ฒ์๋ฅผ ๊ฐ๋๋ค๊ณ ํ๋ค.
๋คํธ์ํฌ ๋ฒ์๊ฐ ์ธ๋ฒ์งธ ์ฅํ ๋ ๊น์ง์ด๋ค
๋คํธ์ํฌ ๋ฒ์๊ฐ ๊ฐ์ฅ ํฌ๋ฏ๋ก ์๋์ ์ผ๋ก ํธ์คํธ ๊ฐ์๋ฅผ ๊ฐ์ฅ ์ ๊ฒ ๊ฐ์ง์ ์๋ ํด๋์ค์ด๊ธฐ๋ ํ๋ค.
00000000 | 00000000 | 00000000 | 00000000 |
๋คํธ์ํฌ ๊ฐ์ | ํธ์คํธ ๊ฐ์ |
2^21 (์์ 110์ด ๊ณ ์ ) | 2^8 - 2 (๋คํธ์ํฌ ์ฃผ์ 0.0.0๊ณผ ๋ธ๋ก๋์บ์คํธ ์ฃผ์ 255.255.255 ์ ์ธ) |
ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๋๋๋์ง ์์ ๋ณด์๋ค๋ฉด ์ด์ ๋ค์ ์ฌ์ด๋๋ก ๋์์ ๋ณด์.
IP์ฃผ์๋ฅผ 2์ง์๋ก ๋ 8๋นํธ 4๊ฐ ๋ธ๋ก์ผ๋ก ๋๋๋ฉด ์ด 32๊ฐ์ ์๋ฆฌ์๊ฐ ์๊ธด๋ค
์ฌ์ด๋๋ 32๊น์ง์ ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ด ๋ง์ธ ์ฆ์จ ์ด ์๋ ์๋ฆฟ์๋ค์ ํด๋น ์ ๋งํผ ๊ณ ์ ํ์ฌ ๊ทธ๋ฃนํํ๊ฒ ๋๋ค.
00000000 | 00000000 | 00000000 | 00000000 |
/24๋ฅผ ์๋ก ๋ค์๋ฉด ์๋ ๋ถ์ ์ซ์ 24๊ฐ๊น์ง ๊ฐ์ IP์ฃผ์๋ฅผ ์ฌ์ด๋ ๊ทธ๋ฃน์ผ๋ก ๋ง๋ค๊ฒ ๋๋ค.
00000000 | 00000000 | 00000000 | 00000000 |
์์๋ก 192.168.100.0 ์์ 24 ์ฌ์ด๋๋ฅผ ์ค์ ํด์ฃผ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ ์๊ฐ ๊ณ ์ ip๊ฐ ๋๊ณ ๋๋จธ์ง๊ฐ ํธ์คํธ๋ก ๋ฐฐ์ ๋๋ค.
11000000 | 10101000 | 01100100 | 00000000 |
Cํด๋์ค์ ๋ฒ์๊ฐ ๊ฐ์์ ๋ญ๊ฐ ๋ค๋ฅด๋?! ์ถ์ง๋ง
๊ธฐ์กด ํด๋์ค๋ ์ฅํ ๋ ๋จ์๋ก๋ง ๊ทธ๋ฃน์ ๋๋ ์ ์์๋ค๋ฉด!
์ฌ์ด๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด /16, /24, /32 ์ฅํ ๋ ๊ธฐ์ค์ด ์๋ ๊ทธ ์ธ์ ์ซ์๋ก๋ ์ฌ์ด๋ ๋ธ๋ก์ผ๋ก ๊ทธ๋ฃนํ์ด ๊ฐ๋ฅํด์
ํด๋์ค์ ์๊ด์์ด ๋ผ์ฐํ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ์ด๋๋ฅผ ํด๋์ค ์๋ ๋๋ฉ์ธ๊ฐ ๋ผ์ฐํ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
๊ธฐ์กด์ Network Class ๋ฐฉ์์ ๋นํด ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ณ ๊ทธ๋ฃน๋ค์ ๊ณ์ธต์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ๋ฅ ํด IP ์ฃผ์ ์ฒด๊ณ๋ฅผ ๋ณด๋ค ํจ์จํํ ์ ์๊ฒ ํด์ค๋ค.
2) ๋คํธ์ํฌ ์กฐํ
docker network ls
3) ์ปจํ ์ด๋ ์์ฑ์ ๋คํธ์ํฌ ์ค์
net ์ต์ ์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ docker0๋ก ์ค์ ๋๋ค.
ip์ต์ ๋ ์ค์ ํด์ฃผ์ง ์๋๋ค๋ฉด ์ค์ ๋๋ ๋คํธ์ํฌ ๋์ญํญ์์ ์์ฐจ์ ์ผ๋ก ๋ฐฐ์ ๋๋ค.
(docker0๋ก ๋คํธ์ํฌ๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ip์ต์ ์ ์ฌ์ฉํด static ip ํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ ์ ์ ์ ๋คํธ์ํฌ๋ง ๊ฐ๋ฅ)
# docker run [-d] [--name ์ปจํ
์ด๋๋ช
] [--net ๋คํธ์ํฌ์ด๋ฆ] [--ip ip์ฃผ์] [-p ํธ์คํธํฌํธ:์ปจํ
์ด๋ํฌํธ] <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
docker run -d --name web --net mynet --ip 192.168.100.100 -p 80:80 nginx:1.14
4๏ธโฃ ์ปจํ ์ด๋๋ผ๋ฆฌ ํต์ ์ ์ด๋ป๊ฒ ํ๋์?
์ปจํ ์ด๋ ๊ฐ์ ํต์ ์ ์ด์ฉํด ํ๋ก ํธ ์๋ฒ์ ๋ฐฑ ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์๋ ์๋ค.
1) ์ฐ๊ฒฐํ ์ปจํ ์ด๋ ํ๋ ์์ฑ
์์๋ก mysql์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๊ฑด๋ฐ mysql์ ์ปจํ ์ด๋๋ ์์ฑ์ ํ๊ฒฝ๋ณ์ ์ค์ ์ด ํ์ํ๋ค.
e์ต์ ์ผ๋ก environment ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํด mysql ๊ณ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์
(v์ต์ ์ผ๋ก ํธ์คํธ์ ๋ฐ์ดํฐ ์ ์ฅํ ์ ์๋๋ก ๋ณผ๋ฅจ๋ง์ดํธ)
# e์ต์
(environment ํ๊ฒฝ๋ณ์)
docker run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_PASSWORD=wordpress \
mysql
2) ์ฐ๊ฒฐํ ๋ค๋ฅธ ์ปจํ ์ด๋ ํ๋ ์์ฑ
์ฌ๊ธฐ์ ๋ค๋ฅธ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ ค๋ฉด link ์ต์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
# --link ์ฐ๊ฒฐํ ์ปจํ
์ด๋๋ช
:์์๋ช
์นญ
docker run -d --name wordpress --link mysql:mysql \
-e WORDPRESS_DB_PASSWORD=wordpress \
-p 80:80 wordpress:4
๐9-2. ์ปจํ ์ด๋ ๊ฐ ํต์ (๋คํธ์ํฌ) : ์ค์ต
1๏ธโฃ ์ปจํ ์ด๋ ๋คํธ์ํฌ ์ฌ์ฉํ๊ธฐ & ์ปจํ ์ด๋ ํฌํธ ์ธ๋ถ๋ก ๋ ธ์ถํ๊ธฐ
1) ๋์ปค bridge, eth0 ์ฃผ์ ํ์ธ
ip address
๋์ปค 0์ ํ ๋น๋ ipํ์ธ
brctl์ ์ด๋๋ท ๋ธ๋ฆฌ์ง ๊ด๋ฆฌ ๋๊ตฌ๋ก bridge-utils ํจํค์ง์ ํฌํจ๋์ด ์๋ค.
apt-get์ ์ ๋ฐ์ดํธํ๊ณ apt-get install bridge-utils ํด์ ์ค์นํด์ฃผ๋ฉด ์ฌ์ฉํ ์ ์๋ค.
์๋ ๋ช ๋ น์ด๋ฅผ ์ณ๋ณด๋ฉด docker0๊ฐ ๋ธ๋ฆฌ์ง ์ธํฐํ์ด์ค์์ ํ์ธํ ์ ์๋ค.
brctl show
2) ์ปจํ ์ด๋ ํ๋๋ฅผ ์์ฑํ์ฌ ํ ๋น๋ ์์ดํผ๋ฅผ ํ์ธํด๋ณด์
docker run -it --name c1 busybox
c1์ ์ข ๋ฃํ์ง ๋ง๊ณ ๋ค๋ฅธ ์ธ์ ์ผ๋ก ์ ์ํด ๋ํ๋์ busybox๋ฅผ ๋๋ ค๋ณด๋ฉด
๊ทธ ๋ค์ ์์ดํผ๋ฅผ ํ ๋น ๋ฐ์ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ฅธ ์ปจํ ์ด๋๋ก ์น์๋ฒ๋ฅผ ํ๋ ๋๋ ค๋ด๋ ๊ทธ ๋ค์ ์์ดํผ๊ฐ ํ ๋น ๋ ๊ฑธ ํ์ธ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์ปจํ ์ด๋๋ค์ docker0๋ฅผ ํตํด ์ธ๋ถ๋ก ๋๊ฐ๋ค.
3) ์ข ๋ ์์ธํ๊ฒ ๋ณด๊ธฐ
docker inspect c1
* sandbox : ์ปจํ ์ด๋์ ๋คํธ์ํฌ ํ๊ฒฝ
* endpoint : veth, ๋คํธ์ํฌ ์ธํฐํ์ด์ค
๋ง์ฝ ์ปจํ ์ด๋์์ ์ ํธ๊ฐ ๋๊ฐ๋ ค๋ฉด gateway๋ฅผ ํตํด ๋๊ฐ๋ค
์ด๊ฑธ ๋ฐ๋ ๋ธ๋ฆฌ์ง ์ธํฐํ์ด์ค๋ ์์ ์ ip์ฃผ์๋ฅผ ํธ์คํธ ip address๋ก ๋ฐ๊พธ์ด ์ธ๋ถ๋ก ๋ณด๋ด๋ Masquerade ์๋น์ค (๋ง์ค์ปค๋ ์ด๋), nat ์๋น์ค (Network Address Translation) ๋ฅผ ์ง์ํ๊ฒ ๋๋ค.
์๋ ๋ช ๋ น์ด๋ก nat ํ ์ด๋ธ์ ๋ณด๋ฉด docker0์์ ๋๊ฐ๋ ๊ฒ์ ์ด๋๋ก๋ ๋ง์ค์ปค๋ ์ด๋๋ฅผ ํด์ค๋ค๋ ๊ฒ ํ์๊ฐ ๋์ด ์๋ค.
iptables -t nat -L -v
2๏ธโฃ ์ปจํ ์ด๋ ํฌํธ ์ธ๋ถ๋ก ๋ ธ์ถํ๊ธฐ
- ํฌํธํฌ์๋ฉ ์ต์ ๋ค
# ํธ์คํธํฌํธ:์ปจํ
์ด๋ํฌํธ
docker run --name web1 -d -p 80:80 nginx:1.14
# ์ปจํ
์ด๋ํฌํธ
docker run --name web2 -d -p 80 nginx:1.14
# ๋๋ฌธ์ P, expose ์ค์ ๋ ํฌํธ์ ๋ง์ถ๋ ์ต์
docker run --name web3 -d -P nginx:1.14
1) ํธ์คํธ ํฌํธ์ ์ปจํ ์ด๋ ํฌํธ ๋๋ค ์ค์
docker run -p 80:80 -d --name web1 nginx
2) ์ปจํ ์ด๋ ํฌํธ๋ง ์ค์
ํธ์คํธ์์ ์ฌ์ฉํ์ง ์๋ ํฌํธ ์ค ํ๋๊ฐ ๋๋ค์ผ๋ก ์ปจํ ์ด๋ 80ํฌํธ์ ์ฐ๊ฒฐ๋จ
docker run -p 80 -d --name web2 nginx
3) ๋๋ฌธ์ P ์ต์ : dockerfile์ ์ค์ ๋ expose๋์ด ์๋ ํฌํธ๋งํผ ์ค์
ํ๋ธ์์ ๋ค์ด ๋ฐ์ ์ด๋ฏธ์ง๋ค์ ํ๋ธ ์์ธ dockerfile์์ ์ด๋ ํฌํธ์ ์ค์ ๋์ด ์๋์ง ํ์ธ ํ ์ ์๋ค.
ํ ์คํธํด๋ณด๋ ค๋ nginx ๊ณต์ dockerfile์๋ expose๋ก 80์ด ์ค์ ๋์ด ์์ผ๋ฏ๋ก ๋๋ฌธ์ P ์ต์ ์ฌ์ฉ์ 80์ผ๋ก ์ค์ ๋๋ค.
์ด๋ฏธ 80์ด ์๋ค๋ฉด ๋๋คํฌํธ๋ก ์ค์ ํ๊ฒ ๋๋ค.
์ฌ๋ฌ๊ฐ expose๋์ด ์๋ค๋ฉด ์ฌ๋ฌ๊ฐ ๋ชจ๋ ์ค์ ๋๋ค. ์ฌ๋ฌ๊ฐ๊ฐ ์ค๋ณต์ด๋ผ๋ฉด ์ด๋ํ ๋๋คํฌํธ๋ก ์ค์
docker run -P -d --name web3 nginx
์ค๋ณต๋ 80ํฌํธ๋ฅผ ํผํด, ๋ ์์๋ก ์ค๋ณต๋ ์ ์๋ ๊ทธ๋ค์ ํฌํธ๋ฅผ ํผํด 32769๋ก ํ ๋น๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๐ข ์ด๋ ๊ฒ 3๊ฐ์ง๋ก ํฌํธํฌ์๋ฉํด ์ธ๋ถ๋ก ๋ถํฐ ์ปค๋ฅ์ ํ์ฌ ์๋น์ค ํ ์ ์๊ฒ ๋๋ค.
3๏ธโฃ ์ ์ ์ ์ (user-defined) ๋คํธ์ํฌ ๊ตฌ์ฑํ๊ธฐ
1) ๋คํธ์ํฌ ์กฐํ
docker network ls
์ฌ๊ธฐ์ bridge์ ์ฐ๊ณ ์๋๊ฒ docker0 ์ด๋ค
2) ๋คํธ์ํฌ ์์ฑ
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet
* driver ์ค์ ์ํด๋ ๊ธฐ๋ณธ ์ค์ ์ด bridge
* subnet ์ค์ ์ ์ํ๋ฉด ๊ธฐ๋ณธ ๋์ปค๊ฐ ์ฐ๋ ๋์ญํญ์ด 172.17 ๋ถํฐ ์์ํ๋ฏ๋ก ๊ทธ ์ดํ๋ก ์ค์ ๋๋ค.
* ๊ฒ์ดํธ์จ์ด๋ฅผ ์ค์ ์ํ๋ฉด ๋์ญํญ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์ดํผ๋ฅผ ์ฌ์ฉํ๋ค.
3) ๋คํธ์ํฌ ์์ธ ์กฐํ
# docker network inspect <๋คํธ์ํฌ๋ช
>
docker network inspect mynet
4) ๋คํธ์ํฌ ์ฌ์ฉ ์ปจํ ์ด๋ ์์ฑ
# --net ๋คํธ์ํฌ๋ช
docker run -it --name c1 --net mynet busybox
4๏ธโฃ ์ปจํ ์ด๋ ์๋น์ค ์ด์
์ปจํ ์ด๋๋ฅผ ํตํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ์๋น์ค๋ฅผ ์ด์ํด๋ณด์
1) mysql ์ปจํ ์ด๋ ์์ฑ ๋ฐ ์คํ
docker run -d --name mysql -v /dbdata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
mysql
2) wordpress ์ปจํ ์ด๋ ์์ฑ ๋ฐ ์คํ
docker run -d --name wordpress --link mysql:mysql \
-e WORDPRESS_DB_HOST=db \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpress \
-e WORDPRESS_DB_NAME=wordpress \
-p 80:80 wordpress
ํ ... wsl๋ก ํ๋ฉด db ์ฐ๊ฒฐ ์คํจํ๋คํ๊ณ
๋ฒ๋ฐ์ผ๋กํ๋ฉด Failed to connect to localhost port 80 ๋จ๊ณ ....
๋ง์ง๋ง ์ฐ๊ฒฐ ๋ถ๋ถ์ ์์ด์ ์ด์๊ฐ ์๋ ๋ฐ ์ด๋ถ๋ถ์ ํด๊ฒฐํ๋ฉด ์ถ๊ฐ์์ !
๋์ปค ๋คํธ์ํฌ ๊ตฌ์กฐ ์ฐธ์กฐ
- Net namespace
Network interface, iptables ๋ฑ ๋คํธ์ํฌ ๋ฆฌ์์ค์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ถํ ํ์ฌ ๊ฐ๊ฐ์ ๋ค๋ฅธ namespace์ ํ ๋น [๋ณธ๋ฌธ์ผ๋ก] - L2 (Layer 2)
OSI๊ณ์ธต์ 2๋ฒ์งธ ๋ ์ด์ด์ธ ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต ํต์ ์ ๋งํ๋ค [๋ณธ๋ฌธ์ผ๋ก] - ์ฅํ
๋ octet
2์ง์ 8์๋ฆฌ๋ฅผ ์ฅํ ๋๋ผ๊ณ ํ๋ค. [๋ณธ๋ฌธ์ผ๋ก] - ๋ฃจํ๋ฐฑ์ฃผ์
๋คํธ์ํฌ์์์ ์์ ์ ๋ํ๋ด๋ ๊ฐ์์ ์ธ ์ฃผ์์ด๋ฉฐ, ์์ ์๊ฒ ๋ค์ ๋คํธ์ํฌ ์ ๋ ฅ์ด ๋ค์ด์จ๋ค๊ณ ํ์ฌ ๋ฃจํ๋ฐฑ(Loopback) ์ฃผ์๋ผ ํ๋ค [๋ณธ๋ฌธ์ผ๋ก]
'DevOps > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 10] ๋น๋์์ ์ด์๊น์ง (docker compose) (0) | 2023.04.23 |
---|---|
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 8] Docker Container Storage (0) | 2023.04.21 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 7] ์ปจํ ์ด๋ ๊ด๋ฆฌ (0) | 2023.04.15 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 6] ์ปจํ ์ด๋ ์ฌ์ฉํ๊ธฐ (0) | 2023.04.14 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 5] ์ปจํ ์ด๋ ๋ณด๊ด์ฐฝ๊ณ Registry (0) | 2023.04.13 |