2022. 2. 9. 17:00ใBACKEND/Docker & Kubernetes
๐ Docker Series
Docker Engine, ์ ๋๋ก ์ดํดํ๊ธฐ (1) - docker engine deep dive
Docker Engine, ์ ๋๋ก ์ดํดํ๊ธฐ (2) - namespace, cgroup
> Docker Network, ์ ๋๋ก ์ดํดํ๊ธฐ (1) - libnetwork
Docker Network, ์ ๋๋ก ์ดํดํ๊ธฐ (2) - bridge, host, none drivers
Docker, ์ ๋๋ก ์ฌ์ฉํ๊ธฐ - Commands
์๋ ํ์ธ์.
์ค๋์ Docker Network๋ฅผ Deep Diveํ๊ณ ์ ํฉ๋๋ค.
์ง๋ Docker ์๋ฆฌ์ฆ๋ก Docker Engine์ ๋ํด ๋ค๋ฃจ๊ณ 3๋ถ๋ก ์งํํ๋ ค ํ๋ Network์ ํด๋น๋ฉ๋๋ค.
๋ด์ฉ๋ ๋ง๊ณ ๊ฐ๋ฒผ์ด ์ฃผ์ ๊ฐ ์๋๋ผ ์๋ฆฌ์ฆ๋ฅผ ๋ฐ๋ก ๊ตฌ์ฑํ์ต๋๋ค ใฐ๏ธ
ํด๋น ํฌ์คํ ์ ๋คํธ์ํฌ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ์ถฉ๋ถํ ์ตํ๋ค๋ ๊ฐ์ ํ์ ์์ฑํ์ต๋๋ค.
๋ํ, ๋ชจ๋ ๊ทธ๋ฆผ์ ์ง์ ๊ทธ๋ฆฐ ๊ฒ์ผ๋ก, ์ฌ์ฉ์ ์ถ์ฒ ํ์ ๋ถํ๋๋ฆฝ๋๋ค ๐๐ป.
--------------- INDEX --------------
[ 1๋ถ ]
CNM
Libnetwork
Driver
- Bridge
[ 2๋ถ ]
- Overlay
- Macvlan
----------------------------------------------
Docker์ ๋คํธ์ํน ๊ตฌ์กฐ๋ Container Network Model(CNM)์ ๊ธฐ๋ฐ์ผ๋ก ํํ๋ฅผ ๊ฐ์ถฅ๋๋ค.
์ฆ, Docker ๋คํธ์ํน์ ๋์์ธ ๊ฐ์ด๋ ์ญํ ์ ํ์ฃ .
CNM์ด ๋ฌด์์ธ์ง ์๊ณ ๋๋ฉด, ๊ตฌํ์ฒด์ด์ Docker Network๋ฅผ ๋ด๋นํ๋ libnetwork์ ์์ฐ์ค๋ฝ๊ฒ ์ดํด ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ CNM์ ๋ํ ๋ด์ฉ์ ๋จผ์ ์์๋ณด๋๋ก ํ ๊ฒ์.
ํด๋น ๋งํฌ๋ฅผ ํตํด ๋ ์์ธํ ์์๋ณด์ค ์ ์์ต๋๋ค.
CNM
Container Network Model
CNM์ ๋์์ธ ์คํspecification์ ๋๋ค.
์ด CNM์ Docker Network์ ์์ฃผ ๊ทผ๋ณธ์ ์ธ ์์๋ผ์ธ์ ์ก์ต๋๋ค.
๋์ปค ์ปจํ ์ด๋ ๊ฐ์ ์ฐ๊ฒฐ์ ์ค๊ฐํ๋ ๊ฒ์ CNM์ด๊ณ ,
๋คํธ์ํน์์ ํํ ๋ณผ ์ ์๋ ๋ค์์ฑ๊ณผ ๋ณต์ก์ฑ์ ์ถ์ํํ๋ ๊ฒ๋ CNM์ ๋๋ค.
์ง๊ธ๋ถํฐ ์๋์ CNM ๊ตฌ์ฑ ์ฑ๋ถ์ ์ฃผ์ ์ธ๊ฐ์ง์ธ Sandbox, Endpoint, Network๋ฅผ ๊ฐ์ด ์ดํด๋ณผ๊ฒ์.
โ๏ธ Sandboxes
Sandbox๋ ๊ฒฉ๋ฆฌ๋ Network Stack์ ๋๋ค.
Network Namespace๋ FreeBSD Jail๋ฑ์ ํตํ ๊ฒฉ๋ฆฌ๋ ๋คํธ์ํฌ ๊ตฌ์ฑ์ผ๋ก ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
Container์ ์ธํฐํ์ด์ค๋ routing table, DNS ์ธํ ๋ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Sandbox๋ ๋ง์ ์ฌ๋ฌ ๋คํธ์ํฌ์ ๋ง์ Endpoints๋ค์ ๊ฐ์ง ์ ์์ต๋๋ค.
โ๏ธ Endpoints
Endpoint๋ Sandbox์ ๋คํธ์ํฌ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. veth
์ ๊ฐ์ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์
๋๋ค.
๋จ ํ๋์ ๋คํธ์ํฌ์ ํ๋์ Sandbox๋ง์ ์ฐ๊ฒฐํฉ๋๋ค.
โ๏ธ Networks
๋คํธ์ํฌ๋ ๋ค์์ Endpoint๋ก ๊ตฌ์ฑ๋, Switch(802.1d bridge)๋ฅผ ์ํํธ์จ์ด๋ก ๊ตฌํํ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์, ์๋ก ํต์ ํด์ผ ํ๋ Endpoint ๊ทธ๋ฃน์ ๊ทธ๋ฃนํํ๊ฑฐ๋ ๊ฒฉ๋ฆฌํฉ๋๋ค.
์์ ๊ฐ์ ๊ตฌ์ฑ์ผ๋ก ๋ง์น ๊ฒฉ๋ฆฌ๋ ๊ฒ ๊ฐ์ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ,
์ค์ ์ ๋ฐ๋ผ ๋ก์ปฌ ์ปจํ ์ด๋๋ ์๊ฒฉ ์ปจํ ์ด๋์ ํต์ ํ ์๋ ์๊ฒ ๋ฉ๋๋ค.
์ด์ ์ค์ ๋ก ๊ตฌํ๋ ๋ด์ฉ์ ์์๋ณด๋ฉฐ ์ ๋๋ก ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Libnetwork
CNM์ด ์ค๊ณ ๋ฌธ์๋ผ๋ฉด, libnetwork๋ ๊ทธ์ ๋ํ ํ์ค ๊ตฌํ์ฒด์ ๋๋ค.
์ค์ ๋ก ๊ตฌํ๋์ด Docker Network์ ์ปจํ ์ด๋ ๋คํธ์ํน์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ฃ .
Libnetwork๋ ์์์ ์๊ฐํ Sandboxes, Endpoints, Networks๋ฅผ ๋ชจ๋ ๊ตฌํํ์ต๋๋ค.
๋, libnetwork๋ ์คํ์์ค์ด๋ฉฐ, Go๋ก ์์ฑ๋์ด cross-flatform์ ์ง์ํฉ๋๋ค.
libnetwork Repository์์ ์คํ์์ค ์ฝ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
โ๏ธ History
์ง๋ ํฌ์คํ ์์ ์ ์ ๋ค๋ค๋ ๊ฒ์ฒ๋ผ, ์ด๊ธฐ ๋์ปค์์๋ ๋๋ถ๋ถ์ ์ญํ ์ ๋์ปค ๋ฐ๋ชฌ์ด ํ์ต๋๋ค.
๋คํธ์ํน๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋คํธ์ํน์ ๊ด๋ จ๋ ์ฝ๋๊ฐ ๋ฐ๋ชฌ ๋ด์ ์กด์ฌํ์ต๋๋ค.
์๊ฐ์ด ์ง๋๋ฉด์ ๋ฐ๋ชฌ์ ์ ์ ๋ฌด๊ฑฐ์์ก๊ณ , ๋ฌด์๋ณด๋ค ๋ฆฌ๋ ์ค ์์น์ ๋ฐ๋ฅด์ง ์์์ต๋๋ค.
“์์ ๊ฒ์ด ์๋ฆ๋ต๋ค”๋ผ๋ ๋ฆฌ๋ ์ค ์์น์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์๋ํ๋ ์๊ณ ๋ชจ๋ํ๋ ๋ณตํฉ์ ์ธ ๋๊ตฌ๋ค์ ๊ฐ๋ฐํ๋ค๋ ์ฒ ํ์ผ๋ก,
์ด๋ก์ธํด ๋์ปค ๋คํธ์ํน์ด ๋ค๋ฅธ ํ๋ก์ ํธ์ ํ์ฉํ๊ธฐ ์ฝ๊ฒ ๊ตฌ์ฑ๋์ง๋ ์์์ต๋๋ค (์ฌ์ฌ์ฉ ๋ถ๊ฐ)
โ๏ธ Nowadays
๊ฒฐ๊ณผ์ ์ผ๋ก, CNM์ ๊ธฐ๋ฐ์ ๋ libnetwork ์ธ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฆฌํฉํฐ๋ง๋์์ต๋๋ค.
๊ทธ๋์ ํ์ฌ๋ ๋ชจ๋ ํต์ฌ ๋์ปค ๋คํธ์ํน ์ฝ๋๋ libnetwork์ ์กด์ฌํฉ๋๋ค.
libnetwork๋ ๋ ๋ฆฝ์ ์ด๊ณ , ๋ชจ๋ํ๋์ด ์กฐ๋ฆฝํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ๋ ์ ์๋์์ต๋๋ค.
๊ธฐ๋ณธ Service Discovery, ์์ ๊ธฐ๋ฐ์ingress-based ์ปจํ ์ด๋ ๋ก๋๋ฐธ๋ฐ์ฑ, ๋คํธ์ํฌ ์ ์ด๋ถ๋ถ์ ๊ด๋ฆฌ๋ถ๋ถ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
Driver
Libnetwork๊ฐ ๋คํธ์ํฌ์ ๋ํด ์ ์ดํ๊ณ ๊ด๋ฆฌํ๋ค๋ฉด ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ ๋ฐ์ดํฐ๋ค์ ๋ค๋ฃน๋๋ค.
Libnetwork์ ์ด์์ฑ์ด ์ปค์ง๋ฐ์๋ Driver์ ํฐ ์ํฅ์ ๋ฐ์์ต๋๋ค.
๊ทธ ์ด์ ๋ Driver๊ฐ ํ๋ฌ๊ทธํ ์ธํฐํ์ด์ค๋ก ์ธํด ์ฐ๊ฒฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์ปค์์๋ ํ๋ฌ๊ทธํ์ ๋๋ผ์ด๋ธ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ฐ์.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๋๋ผ์ด๋ธ๋ฅผ ์ฌ์ฉํด์ผํ ์ง ์์๋ด์ผ๊ฒ ์ฃ ?
๋๋ผ์ด๋ฒ๋ ์ด์ ๋ถํฐ ์์๋ณผ Docker Engine์ ํฌํจ๋ ๋ด์ฅ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๊ฐ ์๊ณ ,
ํน์ ๋คํธ์ํน ๋ฒค๋์ ์ปค๋ฎค๋ํฐ์์ ์ ๊ณตํ๋ ํ๋ฌ๊ทธ์ธ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ ์์ต๋๋ค.
๋ด์ฅ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ bridge, overlay, macvlan ๋ฑ์ด ์์ต๋๋ค.
ํด๋น ํฌ์คํ ์์๋ container๋ฅผ ์คํํ ๋ default๋ก ์ค์ ๋๋ ๋ด์ฉ์ ๋ํ ํฐ ๊ทธ๋ฆผ์ ๋ค๋ฃจ๊ณ ,
๋ค์ ํฌ์คํ ์์ driver์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
Docker Container๋ฅผ ์๋ฌด๋ฐ ์ค์ ์์ด ์คํํ๋ฉด ์ด๋ป๊ฒ ๋คํธ์ํฌ ๊ตฌ์ฑ์ด ๋๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ๋คํธ์ํฌ๋ฅผ ์๊ธฐ ์ํด์ docker0๋ฅผ ์์๋ณด๋๋ก ํ ๊ฒ์.
โ๏ธ docker0
๋์ปค๋ฅผ ์ฒ์ ์ค์นํ๊ฒ ๋๋ฉด ๋์ปค ํธ์คํธ์ docker0๋ผ๋ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์์ฑ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ์ธํ ์ ์์ต๋๋ค.
# docker host
$ ip link show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc...
link/ether 02:42:af:f9:eb:4f brd ff:ff:ff:ff:ff:ff
docker0๋ ์ผ๋ฐ์ ์ธ ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์๋๋ฉฐ,
๋์ปค๊ฐ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ ์ค ๋ธ๋ฆฌ์ง(Bridge)์ ํด๋นํฉ๋๋ค.
๋ธ๋ฆฌ์ง์ ๋ํด ๊ฐ๋จํ ์์ฝํ์๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
Bridge ?
์ผ๋ฐ์ ์ธ ๋คํธ์ํน์์ ๋ธ๋ฆฌ์ง๋ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ ๊ฐ์ ํธ๋ํฝ์ ์ ๋ฌํ๋ ๋งํฌ ๊ณ์ธต ์ฅ์น์ ๋๋ค.
๋ธ๋ฆฌ์ง๋ ํ๋์จ์ด ์ฅ์น์ผ ์๋ ์๊ณ ํธ์คํธ ์์คํ ์ ์ปค๋ ๋ด์์ ์คํ๋๋ ์ํํธ์จ์ด ์ฅ์น์ผ ์๋ ์์ต๋๋ค.
*๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ : ๋คํธ์ํฌ ์ธ๊ทธ๋จผํ ์ด์ ์ ๋คํธ์ํฌ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ธ๊ทธ๋จผํธ๋ ์๋ธ๋ท์ผ๋ก ๋๋๋ ์ํคํ ์ฒ ๋ฐฉ์์ผ๋ก, ๊ฐ๊ฐ์ด ์๊ท๋ชจ ๋คํธ์ํฌ ์ญํ ์ ํจ
Docker์์ ๋ธ๋ฆฌ์ง๋ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ํ ์ ์๊ฒ ํ๋ ์ํํธ์จ์ด ๋ธ๋ฆฌ์ง ์ ๋๋ค.
๋์์, ์๋ก ๋ค๋ฅธ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋์ ๊ฒฉ๋ฆฌ๋ฅผ ํ๊ธฐ๋ ํฉ๋๋ค.
์, ๋ค์ docker0์ ์ง์คํด๋ณผ๊ฒ์.
๋์ปค ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด ์๋์ผ๋ก ์ด docker0 ๋ธ๋ฆฌ์ง๋ฅผ ํ์ฉํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
๋ด์ฉ์ ์์ธํ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
$ docker network inspect bridge
[
{
"Name": "bridge",
...
"IPAM": {
...
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
...
"Options": {
...
"com.docker.network.bridge.name": "docker0",
...
},
"Labels": {}
}
]
docker0 ์ธํฐํ์ด์ค๋ 172.17.0.0/16 ์๋ธ๋ท์ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ฉด ์ด ๋์ญ ์์์ IP๋ฅผ ํ ๋น๋ฐ๊ฒ ๋ฉ๋๋ค. (์: 172.17.0.2, 172.17.0.3)
โ๏ธ Big Picture
Docker Container๋ฅผ ์คํ run ํ๊ฒ ๋๋ฉด, ๊ฐ์ฅ ๋จผ์ Container ๊ธฐ์ ๋ก ์ค์ ๋ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌ์ํต๋๋ค.
์ด๋, Container ๊ธฐ์ ์ด๋ผ๊ณ ํ๋ฉด ์ง๋ ํฌ์คํ ์์ ๋ค๋ค๋ Linux Namespace์ Cgroup์ ํตํ ๊ฒฉ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋์ปค ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก lo, eth0 ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๋๋ฐ์.
๊ฐ ์ปจํ ์ด๋์ eth0์๋ 127.17.x.x/16 ๋์ญ์ ํด๋นํ๋ IP๋ฅผ ํ ๋น ๋ฐ์ต๋๋ค.
์ด ๋์ญ์ ํธ์คํธ ๋ด๋ถ์ ์ฌ์ค IP์ด๋ฏ๋ก ์ธ๋ถ์์ ์ ์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
Container์ ํ ๋น๋๋ IP๋ ์ปจํ ์ด๋๊ฐ ์ฌ์์๋ ๋๋ง๋ค ๋ณ๊ฒฝ๋ ์ ์์ผ๋ ์ฐธ๊ณ ํ์ธ์.
๊ทธ๋์ ๋์ปค ์์ง์์๋ ํธ์คํธ์ veth ๋ผ๋ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฐ ์ปจํ ์ด๋์ eth0์ ์ฐ๊ฒฐํฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด, ์ปจํ ์ด๋๊ฐ ์ฒ์ ์คํ๋ ๋ ๋์ปค ์์ง์ ์ธ๋ถ ํ๊ฒฝ๊ณผ ํต์ ์ ์ํด ํ์(2๊ฐ)์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค.
โ๏ธ ์ปจํ ์ด๋ ๋ด๋ถ Namespace์ ํ ๋น๋๋ eth0 ์ธํฐํ์ด์ค
โ๏ธ ํธ์คํธ ๋คํธ์ํฌ ๋ธ๋ฆฌ์ง docker0์ ๋ฐ์ธ๋ฉ๋ vethXXXXXXX ์ด๋ฆ์ ๊ฐ๋ veth ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค
veth: virtual ethernet
์ปจํ ์ด๋์ eth0์ธํฐํ์ด์ค์ ํธ์คํธ์ veth ์ธํฐํ์ด์ค๋ ์๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ ,
veth ์ธํฐํ์ด์ค๋ค์ ํธ์คํธ์ docker0 ๋ธ๋ฆฟ์ง์ ๋ฐ์ธ๋ฉ๋์ด ์ธ๋ถ์์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ด docker0 bridge๋ ๋์ปค ์ปจํ ์ด๋๋ค์ ๊ฒ์ดํธ์จ์ด ์ญํ ์ ํ๊ฒ ๋ฉ๋๋ค.
๊ฒฐ๊ตญ docker0 ๋ธ๋ฆฌ์ง๋ veth ๊ฐ์ ์ธํฐํ์ด์ค์ ํธ์คํธ์ eth0 ์ธํฐํ์ด์ค๋ฅผ ์ด์ด์ฃผ๋ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
docker0 Bridge์ ๋ํ ์ดํด๊ฐ ๋๋ค๋ฉด, ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃฐ User-defined Bridge Networks์ ๋ํ ์ดํด๋ ์์ฃผ ์ฌ์ธ ๊ฑฐ์์.
์ด๋ ๊ฒ docker network 1 ํฌ์คํ ์ ๋ง๋ฌด๋ฆฌ ํ๊ณ ,
๋ค์ ํฌ์คํ ์์ ๋๋ผ์ด๋ฒ์ ๋ํด ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์์ ์ฌํญ์ด๋ ์๋ชป๋ ๋ถ๋ถ์ ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐๐ป
์ฐธ๊ณ
https://www.docker.com/blog/understanding-docker-networking-drivers-use-cases/
https://docs.docker.com/network/
'BACKEND > Docker & Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Docker Swarm, ์ ๋๋ก ์ดํดํ๊ธฐ - Swarm & Service (2) | 2023.10.30 |
---|---|
Docker, ์ ๋๋ก ์ฌ์ฉํ๊ธฐ - Commands (2) | 2023.10.17 |
Docker Network, ์ ๋๋ก ์ดํดํ๊ธฐ (2) (1) | 2022.02.15 |
Docker Engine, ์ ๋๋ก ์ดํดํ๊ธฐ (2) (0) | 2022.01.20 |
Docker Engine, ์ ๋๋ก ์ดํดํ๊ธฐ (1) (13) | 2022.01.16 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐