๐ฏ Goals
- Docker ์์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ๋ชจ๋ 4๊ฐ์ง๋ฅผ ์์๋ณธ๋ค.
- host - container ๊ฐ ํต์ ๊ณผ ์ฐจ์ด์ ์ ์๋ค.
- container ๊ฐ ํต์ ํ๋ ๋ฒ์ ์์๋ณธ๋ค.
Docker Netowrk Mode 4
๋ชจ๋๋ผ๊ณ ํ์ง๋ง --network, --net ์ '์ด๋ฆ'์ด๊ธฐ๋ ํ๋ค.
bridge (default)
๋ณ๋์ ๋คํธ์ํฌ ์ค์ ์ด ์๋๊ฒฝ์ฐ ์ด ๊ฐ์ผ๋ก ์ง์ ๋๋ค.
docker0 ์ผ๋ก ๋์ปค ์ค์น์ ๊ธฐ๋ณธ ๋ด์ฅ๋๋ค.
172.17.0.1 ์ Gateway ๋ก ๊ฐ๊ณ ์๋ค.
์ด ๋ชจ๋๋ก ์ถ๊ฐ๋๋ ์ปจํ
์ด๋๋ veth ๋ก ์ปจํ
์ด๋ ์ธ๋ถ์ (๋ณดํต bridge์) ์ฐ๊ฒฐ๋๊ณ , eth๋ ๋ด๋ถ Network Interface ๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
veth
Virtual Network Adapter๋ก Virtual Ethernet ์ ์ฝ์๋ค.
๊ฐ์์ ์ฌ๋ฌ ๋์นด๋๋ฅผ ๊ฐ์ง ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
L2 Layer ์ด๋๋ท ํ๋กํ ์ฝ์ ์ง์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ํํธ์จ์ด์ ์ผ๋ก ๊ตฌํํ๋ค๊ณ ๋ณด๋ฉด๋๋ค.
eth
Ethernet ์ฝ์๋ก ์ฐ๋ฆฌ๊ฐ ํํ ๋งํ๋ Network Interface Card (NIC) ๋ค. eth0 eth1 ๋ก ๋ค์ด๋ฐํ๋ค.
Layer2 ๋ก ํ๋ ์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒํ๋ค.
host
ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค.
์ฆ, ์ปจํ ์ด๋๊ฐ ํธ์คํธ IP, Port ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
์ค๋ก์ง Linux ์์๋ง ์ ์ ์๋ํ๋ค.
Mac, Windows ์์๋ --network host ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ ์ฝ์ด ์๋ค.
์๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ์๋ผ
none
๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์๋ ์ํ๋ก ์ฌ์ฉํ๋ค.
container
ํน์ ์ปจํ
์ด๋์ ๋คํธ์ํฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
๋ณ๋ IP/Mac ์ด ํ ๋น๋์ง ์๋๋ค.
Host - Container ๊ฐ ํต์
(1) 172.17.0.1
Docker biridge network ๊ฒ์ดํธ์จ์ด ๋๋ฉ์ธ
Host <-> Container ์ฐ๊ฒฐ์ ์ ์ฉํ๋ค.
(2)`host.docker.internal`
๊ฐ๋ฐ ๋ชฉ์ ์ผ๋ก host ์ ์ํด ์ฐ์ธ๋ค.
Container -> Host ์์ฒญ์ ์ ์ฉํ๋ค.
์๋์ผ๋ก Host OS ์ 'localhost' IP ์ฃผ์๋ก ๋ณํ์ํจ๋ค.
๋์ IP ๋ฅผ ๊ฐ๋ Host IP ์ฃผ์์ ๋์ํ๊ธฐ ์ํ Special DNS Domain ์ด๋ค.
ํ๋ก๋์
ํ๊ฒฝ์๋ ์ฐ์ด์ง ์๋๋ค.
Container ๊ฐ ํต์
์ปจํ ์ด๋ ์ด๋ฆ ๊ทธ ์์ฒด๊ฐ ๋๋ฉ์ธ์ด ๋๋ค.
๋์ผํ Host ๋ด์ ์กด์ฌํ๋ ์ปจํ
์ด๋๋ ์ปจํ
์ด๋ ์ด๋ฆ์ ๋ช
์ํด์ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
์ปจํ
์ด๋๊ฐ ํต์ ์ ์ํด docker ์์๋ ๋คํธ์ํฌ ์์ฑ์ ๊ถ์ฅํ๋ค.
์๋์ ๊ฐ์ด ๋คํธ์ํฌ๋ฅผ ์์ฑํ๊ณ
$ docker network create node-mongo-network
c198debcc15699d3aa2ec18c1988bccb141a5fe92fdc48e17880d5a3f0bbdb0b
๋์ปค ์ปจํ ์ด๋ ์คํ์ --network ์ต์ ์ผ๋ก ์คํํ๋ฉด ํด๋น ๋คํธ์ํฌ ๋ด์์ ์ปจํ ์ด๋์ ์ด๋ฆ๋ง์ผ๋ก IP์ฃผ์๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
app.listen(4000, async ()=>{
console.log('express server is loaded')
try {
// container name ์ด IP ์ฃผ์ ๋์ ์จ๋ค.
await mongoose.connect('mongodb://mongodb:27017');
console.log('mongoDB is connected')
} catch (e) {
console.error(e);
}
});
mongodb ๋ผ๋ ์ปจํ
์ด๋ ์ด๋ฆ์ IP ๋ฅผ ๊ทธ๋๋ก ๋ฐ์จ๋ค.
๊ทธ๋์ ๋ณต์กํ๊ฒ ๋คํธ์ํฌ ์์ฑํ๋ฉด ๋ญ๊ฐ ์ข์๋ฐ์?
ํฌํธ ๋ฐ์ธ๋ฉ์ด ํ์ ์์ด์ง๋ค.
์๋์ ๊ฐ์ด -p ์ต์
์ผ๋ก ๋ก์ปฌํธ์คํธ ๋๋ ์ธ๋ถ ์ปจํ
์ด๋ ํฌํธ์ ์ปจํ
์ด๋ ๋ด๋ถ ํฌํธ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ์์
์ด ํ์ํ์ง ์๋ค.
--network ๋ก ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด๋ง์ด๋ค.
$ docker run --it --name "container-name" -p <localhost-port>:<container-port> <image-name>
--network ๋ฅผ ํตํด ์ด๋ก์จ ์ฌ๋ฌ ์ปจํ
์ด๋๊ฐ ํต์ ์ด ์ฉ์ดํ Virtual Private Network ๋ฅผ ๊ตฌ์ถํ ์ ์๊ฒ ๋์๋ค.
๊ทผ๋ฐ ์ด๋ป๊ฒ ์ปจํ ์ด๋ ์ด๋ฆ๋ง์ผ๋ก ํต์ ์ด๋์ฃ ?
์ฐ์ , ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ์ด๋ค๋๊ฑด Container ๊ฐ ๋์ผํ VPC ๋ด์ ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
์ค์ , Private IP๋ก ๋งคํ๋๋ ์์ ์ Container ์์ HTTP Request ์์ฒญ์ด Container ๋ฐ๊นฅ์ผ๋ก ๋น ์ ธ๋๊ฐ๋ ์์ ์ด๋ค.
๋์ปค๋ ๊ฐ ์ปจํ
์ด๋์ ์คํ ํ๊ฒฝ(๋คํธ์ํฌ ๊ตฌ์ฑ ์ ๋ณด)๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์, ์์ฒญ์ด ์ปจํ
์ด๋ ๋ฐ์ผ๋ก ๋๊ฐ๋ ์์ ์ IP ๋ฅผ ๋งคํํ์ฌ ๋ณด๋ธ๋ค.
์ปจํ
์ด๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์ฌ์ค IP ๋ก ๋งคํ์ํค๋ ์์ ์ด ์ด๋๋ค.
๋ฐ๋๋ก ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ ์ธ๋ถ์์ ์ค๋ ์์ฒญ์ docker ๊ฐ ์ด์ฐ ๋งคํํ ๋ฐฉ๋๊ฐ ์๋ค.
์ปจํ ์ด๋ ์ด๋ฆ์ hostname ์ผ๋ก ์ฐ๋ ค๋ฉด
user-defined network ๋ฅผ ์์ฑ ๋ฐ ์ ์ฉํด์ผํ๋ค.
์คํ ๋งํฌ
default bridge network ๋ ์๋์ผ๋ก DNS ์๋น์ค๊ฐ ์ ๊ณต๋์ง ์์ container name - hostname ์ด ๋งคํ๋์ง ์๋๋ค.
์ค๋ก์ง ์ฌ์ฉ์๊ฐ ์ง์ ๋ช ์ํด์ ๋ง๋ ๋คํธ์ํฌ์๋ง container name - hostname ์ด ๋งคํ๋๋ค.
์ด๊ฒ ์ซ๋ค๋ฉด ๊ทธ๋ฅ docker-compose ๊ฐ์ ๊ฑธ ์ฐ๋๊ฒ ์ ์ ๊ฑด๊ฐ์ ์ข๋ค.
๊ทธ๋ผ, nginx + apache ๊ฐ์ ๊ฒฝ์ฐ์?
nginx.config ๋ ์ด๋ป๊ฒ ์ง์ ํด์ผํ ๊น?
container name ์ ํด๋น ํ์ผ ๋ด์ ์ ์ํด๋ ๊ด์ฐฎ์๊น?
๋ณดํต docker-compose ๋ก ๊ฐ์ด ๋์ฐ๊ณ , ์๋น์ค๋ช
์ผ๋ก ๋ช
์ํ๋ค.
'๊ธฐํ > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Multi Stage (0) | 2024.09.20 |
---|---|
[Docker] credential (0) | 2024.08.09 |
[Docker] Host to container network (0) | 2023.04.19 |
[Docker] volume with CLI (0) | 2022.05.19 |
[Docker] volume ์ฌ์ฉํ (0) | 2022.05.18 |