์ฌ์ฉํ๊ฒฝ
- Azure VM
- Ubuntu 22.04 / 30GM / vCPU 2
์์ธํ ์ด๋ก ๋ฐ ์ค๋ช ๋ณด๋จ ์ฃผ์ ๋ช ๋ น์ด์ ์ค์ต ์์ฃผ๋ก ์ ๋ฆฌ
๋์ปค ์ค์น
โ [1] ๊ฐ๋จํ ๋ฐฉ๋ฒ (๊ณต์ ์ค์น ์คํฌ๋ฆฝํธ)
# ๋์ปค ์ค์น ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋ ๋ฐ ์คํ
curl -sSfL https://get.docker.com -o docker.sh
chmod +x docker.sh
sudo ./docker.sh
๐ ์ค์น ํ์ธ
docker version
systemctl status docker
โ [2] ๊ธฐ๋ณธ ๋ฐฉ๋ฒ (APT ์ ์ฅ์ ๊ธฐ๋ฐ ์ค์น: Ubuntu ๊ธฐ์ค)
# ํ์ ํจํค์ง ์ค์น
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg
# Docker GPG ํค ์ถ๊ฐ
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# APT ์ ์ฅ์ ์ค์
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker ์ค์น
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Docker ๋ฐ๋ชฌ ์ํ ํ์ธ
docker version
systemctl status docker
์ปจํ ์ด๋
0๏ธโฃ ์ปจํ ์ด๋ ์์ฑ
docker container create
root@master:~# docker container create -it --name testos centos:8
root@master:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66307471d0b0 centos:8 "/bin/bash" 5 seconds ago Created testos
1๏ธโฃ ์ปจํ ์ด๋ ์คํ ๋ฐ ์ฌ์คํ, ์ค๋จ
์คํ
# centos 8๋ฒ์ ผ ์ด๋ฏธ์ง๋ก testos๋ผ๋ ์ด๋ฆ์ ์ปจํ
์ด๋๋ฅผ ์คํ
docker container run -it --name testos centos:8
| ์ต์ | ์๋ฏธ |
| docker container run | ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์คํ |
| -i | interactive ๋ชจ๋: ์ฌ์ฉ์ ์ ๋ ฅ(STDIN)์ ๋ฐ๊ฒ ๋ค๋ ์๋ฏธ |
| -t | pseudo-TTY ํ ๋น: ํฐ๋ฏธ๋๊ณผ ์ฐ๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋์ํ๋๋ก ํจ |
| --name testos | ์ปจํ ์ด๋์ testos๋ผ๋ ์ด๋ฆ ๋ถ์ฌ (์ง์ ํ์ง ์์ผ๋ฉด ์์๋ก ์ด๋ฆ ์์ฑ) |
| centos:8 | centos๋ผ๋ ์ด๋ฏธ์ง์ 8 ๋ฒ์ (ํ๊ทธ)์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๋ง๋ฌ |
root@master:~# docker container run -it --name testos centos:8
Unable to find image 'centos:8' locally
8: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:8
[root@30ef4585d468 /]# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
15 pts/0 00:00:00 ps
[root@30ef4585d468 /]# exit
exit
- ํ์ฌ ๋ก์ปฌ์ centos:8 ์ด๋ฏธ์ง๊ฐ ์กด์ฌํ์ง ์์
- ๋์ปค๋ ๋จผ์ ๋ก์ปฌ์์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ๊ณ , ์์ผ๋ฉด ์๋์ผ๋ก Docker Hub์์ ๋ค์ด๋ก๋
- ์ปจํ ์ด๋ ์คํ ํ root@master โก๏ธ [root@30ef4585d468 /]# ์ด๋ ๊ฒ ์ฌ์ฉ์๊ฐ ๋ฐ๋. ์ปจํ ์ด๋ ๋ด๋ถ ์๋ก ๋ค์ด์จ ์ํ
- [root@30ef4585d468 /]# ์ฌ๊ธฐ์ 30ef4585d468 ๋ ์ปจํ ์ด๋ ID์ ์์๋ฆฌ
- exit๋ก ์ปจํ
์ด๋ ๋ด๋ถ์์ ๋๊ฐ ์ ์์. ์คํํ ๊ฒฝ์ฐ bash ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ฉด์ ์ปจํ
์ด๋๋ ํจ๊ป ์ ์ง๋จ
(์ปจํ ์ด๋๋ PID 1 ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์ปจํ ์ด๋ ์์ฒด๊ฐ ์ข ๋ฃ๋๋ค) - ctrl +pq ๋ฅผ ๋๋ฅด๋ฉด ๋ฐฐ์ฌ๊ฐ ์คํ๋ ์ํ๋ก ๋น ์ ธ๋์ฌ ์ ์๋ค
ํด๋น๋๋ ์ด๋ฏธ์ง ๋ฐ ๋ฒ์ ผ, ํ๊ทธ๊ฐ ์์ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ์ด๋ฏธ์ง ๋ค์ด์ด ์๋จ
์ ํํ ์ด๋ฏธ์ง ๋ฐ ํ๊ทธ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ค์
root@master:~# docker container run -it --name testos centos
Unable to find image 'centos:latest' locally
docker: Error response from daemon: manifest for centos:latest not found: manifest unknown: manifest unknown
์ปจํ ์ด๋ ์์ฑ vs ์คํ
docker container create -it --name testcentos centos
docker container start -ai testcentos
์ปจํ ์ด๋ ์คํ๊ณผ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด run์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ ๊ฒ๊ณผ create๋ฅผ ๋ง๋ ๊ฒ์ ์ปจํ ์ด๋ ์คํ ์ฌ๋ถ์ ์ฐจ์ด
create๋ ์ ๋ง ๋ง๋ค๊ธฐ๋ง ํ๊ณ ๋๋จ
๊ทธ๋์ ๋ชฉ๋ก์์๋ STATUS๊ฐ Created๋ก ํ๊ธฐ๋์ด ์๊ณ ์คํ๋์ง๋ ์๋๋ค
- run์ create + start
- ๊ฐ๋ณ ๋จ๊ณ๋ก ๋๋์ด ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
์ค๋จ
# testping์ด๋ผ๋ ์ด๋ฆ์ ์คํ ์ค์ธ ์ปจํ
์ด๋ ์ค๋จ
docker stop testping
# ํ์ฌ ์คํ ์ค์ธ ์ปจํ
์ด๋ ๋ชฉ๋ก
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
485e8b3d6df3 centos:8 "/bin/ping localhost" 23 minutes ago Up 23 minutes testping
root@master:~# docker stop testping
testping
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
์คํ ์ค์ด๋ testping์ด๋ผ๋ ์ปจํ ์ด๋๊ฐ ์คํ ๋ชฉ๋ก์์ ์ฌ๋ผ์ง์ ํ์ธ
์ฌ์คํ
docker container start -ai testos
- ์์์ ๋ง๋ testos ์ปจํ ์ด๋๋ฅผ ๋ค์ ์คํ
- -a : attach (์ถ๋ ฅ ์ฐ๊ฒฐ), -i: interactive
- run์ ๋ฐ๋ณตํ๋ฉด testos๋ผ๋ ์ด๋ฆ์ ์ปจํ ์ด๋๊ฐ ์ด๋ฏธ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํจ
๐ง ์์ฝ ์ ๋ฆฌ: run vs start
| ํญ๋ชฉ | docker run | docker start |
| ์ญํ | ์ปจํ ์ด๋๋ฅผ ์๋ก ์์ฑํ๊ณ ์คํ | ์ด๋ฏธ ์์ฑ๋ ์ปจํ ์ด๋๋ฅผ ๋ค์ ์คํ |
| ์คํ ๋์ | ์ด๋ฏธ์ง | ์ค์ง๋ ์ปจํ ์ด๋ |
| ์ปจํ ์ด๋ ์ด๋ฆ ํ์ ์ฌ๋ถ | ์๋ต ๊ฐ๋ฅํ์ง๋ง --name์ผ๋ก ์ง์ ๊ฐ๋ฅ | ์ด๋ฏธ ์กด์ฌํ๋ ์ปจํ ์ด๋ ์ด๋ฆ ํ์ |
| ์ ธ ์ ์ ์ฌ๋ถ | ๊ฐ๋ฅ (-it ์ฌ์ฉ ์ ์๋ ์ ์) | ๊ธฐ๋ณธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ, ์ ์ํ๋ ค๋ฉด -ai ํ์ |
| ์ค๋ฌด ์ฌ์ฉ ์์ | ์ปจํ ์ด๋ ์ฒ์ ๋ง๋ค ๋ | ์ปจํ ์ด๋๋ฅผ ๋ค์ ์์ํ ๋ |
| ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ | โ ๋งค๋ฒ ์๋ก์ด ์ปจํ ์ด๋ ์์ฑ๋จ | โ ๋์ผ ์ปจํ ์ด๋ ์ฌ์ฌ์ฉ |
2๏ธโฃ ์ปจํ ์ด๋ ๋ชฉ๋ก ๋ฐ ์ํ ํ์ธ
docker container ps -a
- STATUS๊ฐ Up, Exited๋ก ๋๋จ
- ps๋ก ํ์ฌ ์คํ ์ค์ธ ๊ฒ๋ง ๋ณด๋ ค๋ฉด -a ์ต์ ์๋ต
- ๋ช
๋ น์ด์์ container๋ฅผ ๋นผ๊ณ ์คํํด๋ ๋์ผํ ๊ฒฐ๊ณผ ๋์ด
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
485e8b3d6df3 centos:8 "/bin/ping localhost" 11 seconds ago Up 10 seconds testping
root@master:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
485e8b3d6df3 centos:8 "/bin/ping localhost" About a minute ago Up About a minute testping
47ba93a0865a centos:8 "/bin/bash" 13 minutes ago Exited (0) 2 minutes ago testos
3b45b7e120ec web-nginx:2.0 "nginx -g 'daemon of…" 2 days ago Exited (0) 40 minutes ago web-nginx
0f62c7865ccc nginx "/docker-entrypoint.…" 2 days ago Exited (0) 39 minutes ago web00
3๏ธโฃ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๊ธฐ
docker container run -d --name testping centos:8 /bin/ping localhost
| ์ต์ | ์ค๋ช |
| run | ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ์์ฑ + ์คํ |
| -d | detached ๋ชจ๋ — ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ (ํฐ๋ฏธ๋์ ์ฐจ์งํ์ง ์์) |
| --name testping | ์ปจํ ์ด๋ ์ด๋ฆ์ testping์ผ๋ก ์ง์ |
| centos:8 | ์คํํ ์ด๋ฏธ์ง (CentOS 8) |
| /bin/ping localhost | ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํํ ์ฃผ ํ๋ก์ธ์ค (PID 1) |
๋ก๊ทธ ํ์ธ: ์คํ ์ค์ธ ์ปจํ ์ด๋์ ์ถ๋ ฅ ํ์ธ ๊ฐ๋ฅ
docker container logs testping
root@master:~# docker logs testping
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from localhost (::1): icmp_seq=4 ttl=64 time=0.041 ms
64 bytes from localhost (::1): icmp_seq=5 ttl=64 time=0.053 ms
64 bytes from localhost (::1): icmp_seq=6 ttl=64 time=0.042 ms
4๏ธโฃ ์ปจํ ์ด๋์ ํ์ผ ๊ตํ
# ํธ์คํธ → ์ปจํ
์ด๋
echo "hello docker" > hello.txt
docker container cp hello.txt testping:/root/hello.txt
# ์ปจํ
์ด๋ → ํธ์คํธ
docker container cp testping:/root/hello.txt ./hello_from_container.txt
๋ก์ปฌ์์ ์ปจํ ์ด๋๋ก ์ ๋๋ก ๋ณต์ฌ๋์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค
- ์ง์ ์ปจํ ์ด๋์ ์ ์ํด์ ํ์ธํ๊ธฐ
- ์ธ๋ถ์์ ์ปจํ ์ด๋๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ถ๋ ฅํ๊ธฐ
root@master:~# cat hello.txt
hello docker
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
343499dcd3a3 centos:8 "/bin/ping localhost" 28 minutes ago Up 28 minutes testping
root@master:~# docker cp hello.txt testping:/root/hello.txt
Successfully copied 2.05kB to testping:/root/hello.txt
๐ ๋ณต์ฌ ํ์ธ ๋ฐฉ๋ฒ (์ปจํ ์ด๋ ๋ด๋ถ์์):
docker exec -it testping /bin/bash
cat /root/hello.txt
์ ธ์ ๋ค์ด๊ฐ์ง ์๊ณ ํ์ผ ๋ด์ฉ๋ง ํ์ธ
docker exec testping cat /root/hello.txt
++ ์ปจํ ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค
docker container diff
root@master:~# docker diff testping
C /root
A /root/hello.txt
- C : Change
- A : Add
- ๋ก์ปฌ์์ ์ปจํ ์ด๋๋ก hello.txt๋ฅผ ์ถ๊ฐํ์ฌ Add๋ก ๋ณ๊ฒฝ ์ฌํญ์ด ์ถ๊ฐ๋์๋ค
5๏ธโฃ ์ปจํ ์ด๋ ์ญ์
# ์ค์ง ํ ์ญ์
docker container stop testping
docker container rm testping
# ๊ฐ์ ์ญ์
docker container rm -f testping
- ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋จผ์ ์ค์ง ํ ์ญ์ ํด์ผํ๋ค
- ๋ฌด์ํ๊ณ ๊ฐ์ ๋ก ์ญ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅ.. ๊ทธ๋ฌ๋ ์ปจํ ์ด๋ ๋ด๋ฆฌ๊ณ ์ญ์ ํ๋ ๊ฒ์ด ๊น๋
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
343499dcd3a3 centos:8 "/bin/ping localhost" 38 minutes ago Up 38 minutes testping
root@master:~# docker rm testping
Error response from daemon: cannot remove container "testping": container is running: stop the container before removing or force remove
๋์ปค ๋คํธ์ํฌ
Docker์ ๊ธฐ๋ณธ ๋คํธ์ํฌ ๊ตฌ์กฐ
๋์ปค๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก bridge๋ผ๋ ์ด๋ฆ์ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ฑ๋๋ค
- ์ด๋ฆ: bridge
- ์ฅ์น๋ช : docker0
- ์ญํ : ๊ฐ์์ ์ค์์น. ์ปจํ ์ด๋๋ค์ ์ฌ๊ธฐ์ ์๋ ์ฐ๊ฒฐ๋จ
- IP ๋์ญ: ๋ณดํต 172.17.0.0/16

# ๋์ปค์ ๊ธฐ๋ณธ ๋คํธ์ํฌ ํ์ธ
docker network ls
docker network inspect bridge
root@master:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
60d2ca38db82 bridge bridge local
d43edfb4c844 host host local
cad2e5d0b284 none null local
---
root@master:~# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "60d2ca38db8291bdc68f6f5f8a9709246d2041e6dfdb5740d9d7623073022b8d",
"Created": "2025-06-17T00:03:53.711452532Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv4": true,
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"343499dcd3a33037d67e23983b78fdf0a068d07656ab347f47ad76cf8db96417": {
"Name": "testping",
"EndpointID": "610003609a9ec7c8af34ec1fe39c26cafc3d4f8b36001fcc14a675952c60422f",
"MacAddress": "4a:93:89:5f:9f:9d",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
๐งช ์ค์ต 1. ์ปจํ ์ด๋ IP ๊ตฌ์กฐ ์ดํดํ๊ธฐ
docker run -itd --name test01 centos:8
# ์ปจํ
์ด๋์ ํธ์คํธ ๊ฐ๊ฐ์ IP ํ์ธ
ip a # ํธ์คํธ์ docker0 ํ์ธ
docker exec test01 ip a # ์ปจํ
์ด๋ ๋ด๋ถ IP ํ์ธ
ip a
=> 4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 1a:58:0f:2f:2a:b0 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::1858:fff:fe2f:2ab0/64 scope link
valid_lft forever preferred_lft forever
docker exec test07 ip a
=> 2: eth0@if62: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 1e:d6:38:bc:ce:97 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
- docker0 ์ธํฐํ์ด์ค๊ฐ 172.17.0.1์ด๋ผ๋ IP๋ฅผ ๊ฐ๊ณ ์์
- ์ปจํ ์ด๋ test01์ 172.17.0.x ํ์์ IP๋ฅผ ํ ๋น๋ฐ์
- ์ด IP๋ ํธ์คํธ ์์์๋ง ํต์ ๊ฐ๋ฅ, ์ธ๋ถ์์๋ ์ง์ ์ ๊ทผ ๋ถ๊ฐ
- ์๋น์ค๋ก ์ ๊ณต์ ์ธ๋ถ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด์ผ ํจ
์ปจํ ์ด๋๋ฅผ ํ๋๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ๋ฆฌ๋ฉด?
=> 172.17.0.2/16, 172.17.0.3/16, 172.17.0.4/16 ์ด๋ ๊ฒ ๋น์ด์๋ ip๋ฅผ ํ ๋น๋ฐ๋๋ค
๋์ปค๋ ์ปจํ ์ด๋ ๋ด๋ถ IP๋ฅผ ์์ฐจ์ ์ผ๋ก ํ ๋นํ๋ฉฐ, ํ ๋น๋ IP๋ ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ ๋๋ง๋ค ๋ณ๊ฒฝ๋ ์ ์๋ค๊ณ ํจ
๐งช ์ค์ต 2. ํฌํธ ํฌ์๋ฉ๊ณผ NAT ํ์ธ
์ปจํ ์ด๋๋ฅผ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ํธ์คํธ์ ํฌํธ๋ฅผ ์ปจํ ์ด๋ ํฌํธ๋ก ํฌ์๋ฉํด์ผ ํ๋ค
# ๊ธฐ์กด ์ปจํ
์ด๋ ์ ๋ฆฌ
docker rm -f $(docker ps -aq)
# nginx ์น ์๋ฒ ์ปจํ
์ด๋ ์คํ (8080 → 80 ํฌํธ ํฌ์๋ฉ)
docker run -d --name netbr00 -p 8080:80 nginx
์ปจํ ์ด๋ ์ํ ํ์ธ
docker ps
docker inspect netbr00 | grep -i ipa
root@master:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e222e832af1 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp netbr00
root@master:~# docker inspect netbr00 | grep -i ipa
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
IPAddress ํญ๋ชฉ ํ์ธ → 172.17.0.2๋ก ํ ๋น๋์์ ๊ฐ๋ฅ์ฑ ์์
๐ ์ค์ต 3. ์ ์ ํ ์คํธ
# ์ปจํ
์ด๋ ๋ด๋ถ IP๋ก ์ ๊ทผ
curl 172.17.0.2 # ํธ์คํธ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
# ํธ์คํธ์ 8080 ํฌํธ๋ก ์ ๊ทผ (ํฌํธ ํฌ์๋ฉ ํ์ธ)
curl localhost:8080 # ํฌ์๋ฉ๋ ์์ฒญ → ์ปจํ
์ด๋๋ก ์ ๋ฌ๋จ
root@master:~# curl 172.17.0.2 (curl localhost:8080)
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
๐ ์ค์ต 4. iptables ํ์ธ
๐ Docker์ iptables: ๋ด๋ถ ๋คํธ์ํฌ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋๊ฐ?
๋์ปค๋ ์ปจํ
์ด๋๋ฅผ ์ธ๋ถ์ ํต์ ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก iptables๋ฅผ ์ฌ์ฉํ๋ค
ํนํ nat ํ
์ด๋ธ์ ํตํด ํฌํธ ํฌ์๋ฉ๊ณผ IP ๋ณํ(NAT) ๊ท์น์ ์๋์ผ๋ก ์ค์ ํ ์ฒ๋ฆฌํ๋ค
iptables -t nat -vnL
๊ด์ฐฐ ํฌ์ธํธ
- DNAT ๊ท์น์ด ์๊ฒผ๋์ง ํ์ธ
์: tcp dpt:8080 to:172.17.0.2:80 - MASQUERADE ๊ท์น์ด ์๋์ง ํ์ธ (NAT ํ IP ๋ณํ ์ฒ๋ฆฌ)
์๋๋ iptables -t nat -vnL ๋ช ๋ น์ด๋ฅผ ์คํํ์ ๋์ ๊ฒฐ๊ณผ์ด๋ค
root@master:~# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4014 236K DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
6 373 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.2:80
1. DOCKER ์ฒด์ธ
- DNAT (Destination NAT) ๊ท์น:
์ธ๋ถ์์ ํธ์คํธ์ 8080 ํฌํธ๋ก ์ค๋ ์์ฒญ์ 172.17.0.2:80์ผ๋ก ์ ๋ฌ - !docker0: docker0 ์ธํฐํ์ด์ค๋ฅผ ํตํ์ง ์๋ ์ธ๋ถ ์์ฒญ๋ง ๋์์ผ๋ก ํจ
- 172.17.0.2๋ ์ปจํ ์ด๋ netbr00์ ๋ด๋ถ IP (์์ ์ค์ตํ๋ nginx ์ปจํ ์ด๋)
๐ ์์ฝ: "localhost:8080 → ์ปจํ ์ด๋ ๋ด๋ถ 80๋ฒ ํฌํธ"๋ก ์ฐ๊ฒฐ๋จ
2. POSTROUTING ์ฒด์ธ
- MASQUERADE๋ ์ถ๋ฐ์ง IP๋ฅผ ํธ์คํธ์ IP๋ก ๋ณํ
- ์ฆ, ์ปจํ ์ด๋์์ ์ธ๋ถ๋ก ๋๊ฐ๋ ํจํท์ ๋ํด ์ถ๋ฐ์ง IP๋ฅผ ๊ฐ๋ฆผ
- ์ผ๋ฐ์ ์ธ NAT ๊ธฐ๋ฅ
๐ ์์ฝ: ์ปจํ ์ด๋ → ์ธ๋ถ ์์ฒญ ์ IP๊ฐ ํธ์คํธ IP๋ก ๋ณ์กฐ๋จ
3. PREROUTING ์ฒด์ธ
- ๋ชจ๋ ํจํท ์ค ๋ชฉ์ ์ง๊ฐ ๋ก์ปฌ์ธ ๊ฒฝ์ฐ, DOCKER ์ฒด์ธ์ผ๋ก ์ ๋ฌ
- ๋์ปค์์ ์ค์ ํ ํฌํธ ํฌ์๋ฉ ๊ท์น๋ค์ด ์ ์ฉ๋จ
[ ์ธ๋ถ ์์ฒญ: localhost:8080 ]
↓
→ iptables PREROUTING
↓
→ DOCKER ์ฒด์ธ (DNAT: 8080 → 172.17.0.2:80)
↓
→ ์ปจํ
์ด๋ ๋ด๋ถ nginx ์๋น์ค ์๋ต
↓
→ iptables POSTROUTING (MASQUERADE๋ก IP ๋ณ์กฐ)
↓
→ ์๋ต ๋ฐํ
| ๊ฐ๋ | ์ญํ |
| DNAT | ์ธ๋ถ ํฌํธ๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ ํฌํธ๋ก ํฌ์๋ฉ |
| MASQUERADE | ์ปจํ ์ด๋์์ ๋๊ฐ๋ IP๋ฅผ ํธ์คํธ IP๋ก ๋ฐ๊ฟ |
| docker0 | ํธ์คํธ์ ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ๋ธ๋ฆฌ์ง |
| iptables | ๋์ปค ๋คํธ์ํฌ์ ํต์ฌ ๊ธฐ๋ฐ (์๋ ์ค์ ๋จ) |
์ด๋ฏธ์ง
๐ฆ ๋์ปค ์ด๋ฏธ์ง๋?
๋์ปค ์ด๋ฏธ์ง(Docker Image)๋ ์ปจํ
์ด๋ ์คํ์ ์ํ ์ฝ๊ธฐ ์ ์ฉ(READ-ONLY) ํ์ผ ์์คํ
์ด๋ฏธ์ง๋ OS, ์ ํ๋ฆฌ์ผ์ด์
, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ๋ฑ ์คํ ํ๊ฒฝ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ๋ค
์ปจํ ์ด๋๋ ์ด ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋๋ฉฐ, ์ปจํ ์ด๋๊ฐ ์คํ๋๋ฉด ์ฌ๊ธฐ์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ ์ด์ด๊ฐ ์ถ๊ฐ๋๋ค
๐ฆ ์ด๋ฏธ์ง์ ๊ณ์ธต ๊ตฌ์กฐ(Layer)
๋์ปค ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ๋ ์ด์ด(layer) ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค
- ๊ฐ ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด์ ๋ณ๊ฒฝ ์ฌํญ์ ์์์ฌ๋ฆฐ ๊ฒ
- Dockerfile์ ๊ฐ ๋ช ๋ น์ด(FROM, RUN, COPY ๋ฑ)๋ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑ
- ๊ฐ์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ๋ ์ปจํ ์ด๋๋ค์ ์ค๋ณต ์์ด ๋ ์ด์ด๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝ
๐ ๋์ปค ์ด๋ฏธ์ง ์ด๋ฆ ๊ตฌ์กฐ
docker.io/lbh1224/web:1.0
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
| โ ๋ ์ง์คํธ๋ฆฌ (docker.io) | ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ๋ค์ด๋ก๋ ํ ์ ์๋ ์๋ฒ. ๊ธฐ๋ณธ๊ฐ์ ๋์ปค ํ๋ธ(Docker Hub) |
| โก ์ ์ฅ์ (lbh1224) | ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ 'ํด๋' ๊ฐ๋ . ๊นํ์ ์ ์ฅ์(Repo)์ ๋น์ทํ ๊ฐ๋ . ์ฌ์ฉ์ ๋๋ ์กฐ์ง ์ด๋ฆ์ด ๋ค์ด๊ฐ |
| โข ์ด๋ฏธ์ง (web) | ์ปจํ ์ด๋ ๋ง๋ค๊ธฐ ์ํ ์ด๋ฏธ์ง์ ์ด๋ฆ. ์ฃผ๋ก ์ด๋ฏธ์ง์ ์ญํ ๊ณผ ๊ด๋ จ๋ ์ด๋ฆ์ผ๋ก ๋ถ์ |
| โฃ ํ๊ทธ (1.0) | ์ด๋ฏธ์ง ๋ฒ์ . ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ latest |
๐ ์ด๋ฏธ์ง ๋ค์ด๋ก๋์ ํ์ธ, ์ญ์
# ์ด๋ฏธ์ง ๋ค์ด๋ก๋
docker pull centos:8
# ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ธ
docker images
# ์ด๋ฏธ์ง ์์ธ ์ ๋ณด ํ์ธ
docker inspect centos:8
์ด๋ฏธ์ง๋ฅผ pull ํ๊ธฐ ์ , ๋์ปค ํ๋ธ์ ๊ณต๊ฐ๋ ๊ณต์ ์ด๋ฏธ์ง๊ฐ ์กด์ฌํ๋์ง search๋ฅผ ํตํด ์ฐพ์๋ณผ ์ ์๋ค
docker search ubuntu

# ์ด๋ฏธ์ง ์ญ์
docker image rm centos:7
docker rmi centos:7
# ์ปจํ
์ด๋๊ฐ ์๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ค ์ญ์
docker image prune -a
- ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋จผ์ ํด๋น ์ด๋ฏธ์ง๋ค์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ค์ด ์ญ์ ๋์ด์ผ ํ๋ค
- ๋ฌผ๋ก ๊ฐ์ ๋ก ์ญ์ ๋ช ๋ น์ ์คํํ ์๋ ์์ผ๋.. ์ค์ ๋ก ์ด๋ฏธ์ง๊ฐ ์ญ์ ๋์ง ์๋๋ค
root@master:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 1e5f3c5b981a 2 months ago 192MB
centos 8 5d0da3dc9764 3 years ago 231MB
root@master:~# docker rmi -f centos:8
Untagged: centos:8
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
root@master:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 1e5f3c5b981a 2 months ago 192MB
<none> <none> 5d0da3dc9764 3 years ago 231MB
- ์์ ์์์ฒ๋ผ, ์ปจํ
์ด๋๊ฐ ์กด์ฌํ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ๋ก ์ญ์ ํ๋ ค๋ฉด ์ค์ ์ด๋ฏธ์ง ์ญ์ ๊ฐ ์๋ ์ธํ๊ทธ๋ง ๋์ด๋ฒ๋ฆฐ๋ค
์ด๋ฏธ์ง์ ID๋ ๊ทธ๋๋ก ๋์ผํ๋ค
๐ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋์ ๊ด๊ณ
- ์ด๋ฏธ์ง๋ ์ฝ๊ธฐ ์ ์ฉ
- ์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋๋ฉฐ, ์์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ ์ด์ด๊ฐ ์ถ๊ฐ๋จ
- ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์ผ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์์
docker run -it --name test1 centos:8
docker run -it --name test2 centos:8
→ ๋ ์ปจํ
์ด๋๋ ๋์ผํ centos:8 ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๊ณต์ ํ์ง๋ง,
→ ๊ฐ๊ฐ์ ๊ฐ๋ณ์ ์ธ ์ฐ๊ธฐ ๋ ์ด์ด(๋ณ๊ฒฝ ์ฌํญ) ๋ฅผ ๊ฐ๋๋ค
๐ ๋์ปค ํ๋ธ์ ์ด๋ฏธ์ง ์ ๋ก๋
๋์ปค ํ๋ธ ๋ก๊ทธ์ธ
# ๋์ปค ํ๋ธ ๋ก๊ทธ์ธ
docker login
- ๋จผ์ ๋์ปค ํ๋ธ ๊ณ์ ๋ง๋ค๊ธฐ
- ํด๋น ๋ช ๋ น์ด ์คํ ํ ์์ด๋ ์ ๋ ฅ, ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ์ฝ๋ ์ ๋ ฅํ๋ฉด ๋ก๊ทธ์ธ ์๋ฃ

์ด๋ฏธ์ง ํ๊ทธ ๋ณ๊ฒฝ
# ์ด๋ฏธ์ง ํ๊ทธ ๋ณ๊ฒฝ
docker image tag nginx lbh1224/web
root@master:~# docker image tag nginx lbh1224/web
root@master:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lbh1224/web latest 1e5f3c5b981a 2 months ago 192MB
nginx latest 1e5f3c5b981a 2 months ago 192MB
centos 8 5d0da3dc9764 3 years ago 231MB
- ๊ธฐ์กด ์ด๋ฏธ์ง์ ํ๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋์ผํ ์ด๋ฏธ์ง ID์ ์๋ก์ด ํ๊ทธ์ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋๋ค
- ํ๊ทธ๋ง ๋ฐ๋์์ ๋ฟ, ๊ธฐ์กด์ ์ด๋ฏธ์ง์ ๋ชจ๋ ๊ฒ์ด ๋์ผํ๋ค
์ด๋ฏธ์ง ๋์ปค ํ๋ธ์ ์ ๋ก๋
# ์ด๋ฏธ์ง ์
๋ก๋
docker image push
root@master:~# docker image push lbh1224/web:latest
The push refers to repository [docker.io/lbh1224/web]
7e893c1b6ee8: Layer already exists
463308bed0c9: Layer already exists
4197a611afec: Layer already exists
3e96162769d5: Layer already exists
892e805f6f4f: Layer already exists
626ab8a5d57b: Layer already exists
7fb72a7d1a8e: Layer already exists
latest: digest: sha256:784f317e7068b3b5af6a44851c39cb9e927b6425d5c634197b2899fc8551293d size: 1778

์๋ ๊ฒ ๋์ปค ํ๋ธ์ ๊ฐ์ธ ๋ ํฌ์ ์ ๋ก๋ ๋๋ค
๐ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ 2๊ฐ์ง๊ฐ ์๋ค
1. commit์ผ๋ก ์ปจํ ์ด๋ ๊ทธ๋๋ก ์ด๋ฏธ์ง ์ ์ฅ
2. Dockerfile๋ก ์ด๋ฏธ์ง ๋น๋
์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค๊ณ ํ๋ฉด ์ฃผ๋ก Dockerfile๋ก ๋น๋ํ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉด๋จ
์ปจํ ์ด๋๋ก ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ (commit)
์ปจํ ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ด๋ฏธ์ง๋ก ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก, ์ปจํ ์ด๋์ ์ํ ๊ทธ๋๋ก ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค
ํฌ๊ธฐ๊ฐ ์๊ฑฐ๋ ๊ฐ๋จํ ์๋น์ค, ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฆฐ ์ปจํ ์ด๋๋ผ๋ฉด ๊ทธ๋๋ก ๋ถ์์ ์ฑ์ ์ต์ํํ๊ณ ์ ๊ทธ๋๋ก ์ด๋ฏธ์ง๋ก ์ ์ฅํ ์๋ ์๊ฒ ์ง๋ง... nginx ๊ณต์ ์ด๋ฏธ์ง๋ง ํด๋ ์ฉ๋์ด 192MB์ด๊ณ centos:8 ์ด 231MB์ธ ๊ฒ์ ์๊ฐํ๋ฉด ์ฌ๋ฌ๋ชจ๋ก ๋นํจ์จ์ ์ด๋ค
์๋์ ์ฌ์ฉํด๋ณผ Dockerfile์ ๋ฟ๋ ค์ ์ด๋ฏธ์ง ๋น๋ํ๊ณ ์ปจํ ์ด๋๋ค์ ์ฌ๋ฆฌ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ณ ์ข๋ค
docker run -it --name base centos:8
# (์ปจํ
์ด๋ ๋ด๋ถ์์ ์์
)
exit
docker commit base mycentos:v1
- base ์ปจํ ์ด๋์์ ํ ์์ ์ mycentos:v1 ์ด๋ฏธ์ง๋ก ์ ์ฅ
- ๋น์ถ์ฒ ์ด์ : ๋ณ๊ฒฝ ๋ด์ญ์ด ๋ถํฌ๋ช , ์ฌํ ๋ถ๊ฐ → Dockerfile์ ์ฌ์ฉํ์
Dockerfile๋ก ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
Dockerfile์ด๋?
Dockerfile์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ช
๋ น์ด ์งํฉ์ด์ ์ ์์
์ฆ, ๋ด๊ฐ ์ํ๋ ํ๊ฒฝ์ ์ฝ๋๋ก ์ ์ํด์ ๋ฐ๋ณต ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ์ค๊ณ๋
- Dockerfile์ ์์ฑํ๊ณ → docker build ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง ์์ฑ
- ์ค๋ฌด์์ ์ด๋ฏธ์ง๋ฅผ ์์์ ์ผ๋ก ๋ง๋ค์ง ์๊ณ Dockerfile๋ก ์๋ํํ๋ ์ด์
๐ฆ ๊ธฐ๋ณธ ๊ตฌ์กฐ
# 1. ์ด๋ค ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒ์ธ๊ฐ?
FROM ubuntu:20.04
# 2. ์ปจํ
์ด๋ ์์ ์ด๋ค ๋ช
๋ น์ด๋ฅผ ์คํํ ๊ฒ์ธ๊ฐ?
RUN apt-get update && apt-get install -y nginx
# 3. ํธ์คํธ์ ํ์ผ์ ์ปจํ
์ด๋์ ๋ณต์ฌํ ๊ฒ์ธ๊ฐ?
COPY index.html /var/www/html/index.html
# 4. ์ปจํ
์ด๋ ์คํ ์ ์ด๋ค ๋ช
๋ น์ด๋ฅผ ์คํํ ๊ฒ์ธ๊ฐ?
CMD ["nginx", "-g", "daemon off;"]
๐จ ์ฃผ์ ๋ช ๋ น์ด ์ ๋ฆฌ
| ๋ช ๋ น์ด | ์ค๋ช |
| FROM | ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ค์ (ํ์) |
| RUN | ์ ธ ๋ช ๋ น์ด ์คํ (์ด๋ฏธ์ง ๋น๋ ์ค์ ์คํ) |
| COPY | ํธ์คํธ ํ์ผ์ ์ปจํ ์ด๋๋ก ๋ณต์ฌ |
| CMD | ์ปจํ ์ด๋ ์คํ ์ ์คํํ ๋ช ๋ น์ด (1๊ฐ๋ง ๊ฐ๋ฅ) |
| EXPOSE | ์ปจํ ์ด๋๊ฐ ์ด ํฌํธ ์ง์ (๊ธฐ๋ฅ์ ์๋ฏธ๋ง ์์) |
| WORKDIR | ์์ ๋๋ ํ ๋ฆฌ ์ค์ |
| ENV | ํ๊ฒฝ ๋ณ์ ์ค์ |
์ด ์ธ์๋ ADD, VOLUME, USER ๋ฑ๋ฑ ์ฌ๋ฌ ๋ช ๋ น์ด๋ค์ด ์กด์ฌ
์ค์ต: ๊ฐ๋จํ ์น ์๋ฒ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
๐ ๋๋ ํ ๋ฆฌ ๋ฐ ์ํ ์ ํ
๊ฐ๋จํ๊ฒ ์น์์ ๋์ธ html ํ์ผ ์์ฑ
mkdir dockerfile-web && cd dockerfile-web
echo "<h1>Hello Dockerfile</h1>" > index.html
dockerfile-web/
โโโ Dockerfile
โโโ index.html
โ๏ธ Dockerfile ์์ฑ
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/index.html
CMD ["nginx", "-g", "daemon off;"]
๐ ์ด๋ฏธ์ง ๋น๋
docker build -t myweb:v1 .
- -t : ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ
- . : ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ Dockerfile ์ฌ์ฉ. ์ ๋นผ๋จน์ผ๋ฉด ์๋ฌ๋จ. ์ ์๋ณด๊ณ ๋์ด๊ฐ๊ธฐ ์ฌ์ฐ๋ ์ฃผ์ํ๊ธฐ
ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋์ปค ํ์ผ์ด ์ฌ๋ฌ๊ฐ ์๋ค๋ฉด? โก๏ธ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋์ปค ํ์ผ ์ง์ ํ๊ธฐ
docker build -t myweb:v1 -f MyDockerfile .
- -f : ์ฌ์ฉํ Dockerfile์ ํ์ผ๋ช ์ง์
- . : ํด๋น ํ์ผ์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ (context) ์ง์
root@master:~# docker build -t myweb:v1 -f Dockerfile .
[+] Building 38.0s (9/9) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 184B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:20.04 2.3s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:20.04@sha256:8feb4d8ca5354def3d8fce243717141ce31e2c4287 3.7s
=> => resolve docker.io/library/ubuntu:20.04@sha256:8feb4d8ca5354def3d8fce243717141ce31e2c4287 0.1s
=> => sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214 6.69kB / 6.69kB 0.0s
=> => sha256:c664f8f86ed5a386b0a340d981b8f81714e21a8b9c73f658c4bea56aa179d54a 424B / 424B 0.0s
=> => sha256:b7bab04fd9aa0c771e5720bf0cc7cbf993fd6946645983d9096126e5af45d713 2.30kB / 2.30kB 0.0s
=> => sha256:13b7e930469f6d3575a320709035c6acf6f5485a76abcf03d1b92a64c09c247 27.51MB / 27.51MB 0.8s
=> => extracting sha256:13b7e930469f6d3575a320709035c6acf6f5485a76abcf03d1b92a64c09c2476 2.6s
=> [internal] load build context 0.1s
=> => transferring context: 31B 0.0s
=> [2/3] RUN apt-get update && apt-get install -y nginx 28.9s
=> [3/3] COPY index.html /var/www/html/index.html 0.3s
=> exporting to image 2.5s
=> => exporting layers 2.5s
=> => writing image sha256:b3eb28b80a3c113d2c460cdef15af46e8640b214e297e3884678f9bbf2232bc0 0.0s
=> => naming to docker.io/library/myweb:v1 0.0s
root@master:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myweb v1 b3eb28b80a3c 7 seconds ago 190MB
nginx latest 1e5f3c5b981a 2 months ago 192MB
centos 8 5d0da3dc9764 3 years ago 231MB
์ด๋ฏธ์ง ๋ชฉ๋ก์ ํ์ธํด๋ณด๋ฉด myweb:v1 ์ด ์ ์์ ์ผ๋ก ๋น๋๋จ์ ํ์ธํ ์ ์๋ค
๐ ์ด๋ฏธ์ง ์คํ ๋ฐ ์ ์ ํ ์คํธ
docker run -d -p 8080:80 --name webtest myweb:v1
curl localhost:8080
root@master:~# docker run -d -p 8080:80 --name webtest myweb:v1
d3168f15e0ea59c57f0e38dd2626c81c1cc28357054fc6ce52cdae657503f728
root@master:~# curl localhost:8080
hello world
Dockerfile๋ก ์ง์ ๋น๋ํ ์ด๋ฏธ์ง๋ก ์น์ด ์ ์ ์๋ํจ์ ํ์ธํ ์ ์๋ค