๐ณ Docker ๅฎๅ
จใฌใคใ โ ๅณ่งฃไปใใง่ฉณใใๅญฆใถ
ๅบๅ
ธ: Medium, DEV Community, Spacelift, ITcross, Qiita, Zenn, CircleCI ใชใฉใฎ่คๆฐใฎๆ่ก่จไบใ็ทๅ
ไฝๆๆฅ: 2026ๅนด4ๆ25ๆฅ
็ฎๆฌก
- Docker ใจใฏไฝใ
- ใชใ Docker ใๆณจ็ฎใใใใฎใ
- ใณใณใใ VS ไปฎๆณใใทใณ (VM)
- Docker ใฎใขใผใญใใฏใใฃ๏ผๆง้ ๅณ๏ผ
- Docker ใณใณใใผใใณใใฎ่ฉณ็ดฐ่งฃ่ชฌ
- ใคใกใผใธ vs ใณใณใใ โ ๆ นๆฌ็ใช้ใ
- Docker ใฎๅ
้จๅไฝ โ
docker run ใฎ่ฃๅด
- Layered Filesystem๏ผ้ๅฑคใใกใคใซใทในใใ ๏ผ
- ๅบ็ค็ฅ่ญ: Namespaces ใจ cgroups
- Docker ใฎๅบๆฌ็ใชไฝฟใๆนใฎๆตใ
- Dockerfile ใฎๆธใๆน
- Docker Compose ๅ
ฅ้
- Docker ใใใใฏใผใฏใจใใชใฅใผใ
- ใใไฝฟใ Docker ใณใใณใไธ่ฆง
- Docker ใฎๆดป็จๆณใปๆดป็จใทใผใณ
- ใคใพใใใใคใณใใจ่งฃๆฑบ็ญ
- ใพใจใ
1. Docker ใจใฏไฝใ
Docker ใฏใใขใใชใฑใผใทใงใณใใใณใณใใใใจใใ่ปฝ้ใง็ฌ็ซใใๅฎ่ก็ฐๅขใซใพใจใใฆใใฉใใงใๅใใใใซๅใใใใใฉใใใใฉใผใ ใงใใ
2013ๅนดใซDocker็คพ๏ผๆงdotCloud็คพ๏ผใซใใฃใฆใชใผใใณใฝใผในใจใใฆๅ
ฌ้ใใใฆไปฅๆฅใไธ็ไธญใฎใจใณใธใใขใซๆฏๆใใใฆใใพใใ
ใณใณใใใจใฏ๏ผ
ใณใณใใใจใฏใใขใใชใฑใผใทใงใณใจใใฎๅฎ่กใซๅฟ
่ฆใชใฉใคใใฉใชใไพๅญ้ขไฟใ่จญๅฎใใกใคใซใใฒใจใพใจใใซใใ่ปฝ้ใชไปฎๆณ็ฐๅขใงใใ
ๅพๆฅใฎไปฎๆณใใทใณ๏ผVM๏ผใจใฏ็ฐใชใใOSใซใผใใซใใในใใใทใณใจๅ
ฑๆใใใใใ่ตทๅใ้ๅธธใซ้ซ้ใงใใชใฝใผในๆถ่ฒปใๆๅฐ้ใซๆใใใใพใใ
2. ใชใ Docker ใๆณจ็ฎใใใใฎใ
| ใกใชใใ |
่ชฌๆ |
| ็ฐๅขใฎๅ็พๆง |
ใ่ชๅใฎPCใงใฏๅใใฎใซๆฌ็ชใงใฏๅใใชใใๅ้กใ่งฃๆถ |
| ่ปฝ้ใป้ซ้ |
VMใซๆฏในใฆใชใฝใผในๆถ่ฒปใๅฐใชใใ่ตทๅใๆฐ็ง |
| ใใผใฟใใชใใฃ |
ใฉใฎ็ฐๅข๏ผ้็บ/ใในใ/ๆฌ็ช๏ผใงใๅใใณใณใใใๅไฝใใ |
| ใใผใ ้็บใฎๅน็ๅ |
ใใผใ ๅ
จๅกใๅไธใฎ้็บ็ฐๅขใ็ฌๆใซๆง็ฏใงใใ |
| CI/CDใจใฎ่ฆชๅๆง |
่ชๅใในใใใใใญใคใฎใใคใใฉใคใณใซ็ตใฟ่พผใฟใใใ |
Docker ใ่งฃๆฑบใใ่ชฒ้ก โ “It works on my machine”
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ไผ็ตฑ็ใช้็บ็ฐๅขใฎ่ชฒ้ก โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ้็บ่
AใฎPC ้็บ่
BใฎPC ๆฌ็ชใตใผใใผ โ
โ Python 3.9 Python 3.11 Python 3.8 โ
โ Ubuntu 20.04 macOS 12 CentOS 7 โ
โ MySQL 5.7 PostgreSQL MySQL 8.0 โ
โ โ
โ โ โ โ โ
โ ใ็ฐๅขใใใฉใใฉ โ ไธๅ
ทๅใฎๆธฉๅบใ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker ๅฐๅ
ฅๅพ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ่ชฐใฎPCใงใ โ ๅใใณใณใใ็ปๅ = ๅใ็ฐๅข ๐ โ
โ โ
โ ้็บ่
A โโโ Docker Image โโโโถ ้็บ่
B โ
โ โโโโถ ๆฌ็ชใตใผใใผ โ
โ ๅ
จๅกใใๅใใ็ฐๅขใงๅไฝ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3. ใณใณใใ VS ไปฎๆณใใทใณ๏ผVM๏ผ
ใขใผใญใใฏใใฃๅณใงๆฏ่ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ใใในใ OS๏ผOSใซใผใใซๅ
ฑๆๅ๏ผใ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ใในใ ใซใผใใซ โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ โ
โ โ โผ โ โ
โ โโโโโโโโโโดโโโโโโโโโ โโโดโโโโโโโโโ โ โ
โ โ ใณใณใใ A โ โใณใณใใ B โ โ โ
โ โ (Linux) โ โ(Node.js) โ โ โ
โ โ โPython runtimeโ โโNPM โ โ โ
โ โ โLibraries โ โโLibrariesโ โ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โ
โ ใDockerใ โ โ
โ ่ปฝ้ / ้ซ้ / ใขใใชใฑใผใทใงใณๅไฝ โ โ
โ โ โ โ
โ โผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโ โ
โ โ ใVM ใขใผใญใใฏใใฃใ โ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ ใฒในใ OS-A โ โ ใฒในใ OS-B โ โ โ
โ โ โ (Ubuntu) โ โ (Windows Server) โ โ โ
โ โ โ โใซใผใใซ โ โ โใซใผใใซ โ โ โ
โ โ โ โLibraries โ โ โLibraries โ โ โ
โ โ โโโโโโโโฌโโโโโโโ โโโโโโโโโโโฌโโโโโโโโโโโ โ โ
โ โ โ โ โ โ
โ โ โโโโโโดโโโโโ โโโโโโดโโโโโ โ โ
โ โ โ VM-A โ โ VM-B โ โ โ
โ โ โโโโโโโโโโโ โโโโโโโโโโโ โ โ
โ โ โ โ
โ โ ใHypervisorใ โ ใใผใใฆใงใขใฎไปฎๆณๅๅฑค โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ้ใ / ่ตทๅใซๆ้ / OSๅไฝ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๆฏ่ผ่กจ
| ้
็ฎ |
Docker ใณใณใใ |
ไปฎๆณใใทใณ๏ผVM๏ผ |
| ใซใผใใซ |
ใในใOSใๅ
ฑๆ |
ๅVMใ็ฌ็ซใใใซใผใใซใๆใค |
| ่ตทๅๆ้ |
ๆฐ็งใใใช็ง |
ๆฐๅ |
| ใชใฝใผในๆถ่ฒป |
ๆๅฐ้๏ผMBๅไฝ๏ผ |
ๅคงใใ๏ผGBๅไฝ๏ผ |
| ** ะธะทะพะปััะธัใฌใใซ** |
ใขใใชใฑใผใทใงใณๅไฝ |
ใใผใใฆใงใข/OSๅไฝ |
| ใใกใคใซใตใคใบ |
ๆฐๅMB |
ๆฐGBใ |
| ๆง่ฝใชใผใใผใใใ |
ใปใผใชใ |
Hypervisorๅใฎใชใผใใผใใใ |
4. Docker ใฎใขใผใญใใฏใใฃ
Docker ใฎๅ
จไฝๆงๆๅณ๏ผHigh-Level Architecture๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DOCKER ARCHITECTURE โ
โ โ
โ โโโโโโโโโโโโโโ โ
โ โ Docker CLI โ โ ใฆใผใถใผใๆไฝใใใณใใณใใฉใคใณ โ
โ โ (docker) โ "docker run nginx" ใชใฉ โ
โ โโโโโโโโฌโโโโโโ โ
โ โ REST API (Unix Socket / TLS) โ
โ โผ โ
โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ dockerd โโโโโโโโโโโโโโถโ Docker API โ โ ใใใฏใจใณใ โ
โ โ (Daemon) โ โ Server โ โ
โ โ โ โโโโโโโโฌโโโโโโโ โ
โ โ โข ใณใณใใ็ฎก็ โ โ โ
โ โ โข ใคใกใผใธ็ฎก็ โ โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโ โ
โ โ โข ใใใใฏใผใฏ โ โ containerd โ โ
โ โ โข ใใชใฅใผใ โ โ (Container Runtime Mgr) โ โ
โ โ โข ็ปๅใฌใธในใ โ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ containerd-shim โ โ ใใญใปใน็ฃ่ฆ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ runc โ โ OCIใฉใณใฟใคใ โ
โ โ (ใณใณใใไฝๆๅฎ่ก) โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ Linux Kernel โ โ ใซใผใใซๆฉ่ฝ โ
โ โ โข Namespaces โ (้้ขใปๅถๅพก) โ
โ โ โข cgroups โ ใชใฝใผใน็ฎก็ โ
โ โ โข OverlayFS โ ใใกใคใซใทในใใ โ
โ โ โข Network(veth) โ ใใใใฏใผใฏ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใใไธใคใฎ่ฆ็น โ ใณใณใใผใใณใ็ธไบไฝ็จๅณ
โโโโโโโโโโโโโโโโ
ใฆใผใถใผ โโโถโ Docker CLI โ
(ใฟใผใใใซๆไฝ)โ docker xxx โ
โโโโโโโโฌโโโโโโโโ
โ REST API
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ dockerd (Daemon) โ
โ โ
โ Docker API โโ Containerd โ
โ (gRPC้ไฟกใง้ฃๆบ) โ
โ โ โ
โ โโโ Image Store โ
โ โโโ Network Manager โ
โ โโโ Volume Manager โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโ
โ containerd โ
โ (ใฉใณใฟใคใ ็ฎก็) โ
โ โ
โ containerd-shim โ runc
โ โ โ
โ โผ โผ
โ Kernel Namespace
โ cgroups OverlayFS
โโโโโโโโโโโโโโโโโโโโโโโ
5. Docker ใณใณใใผใใณใใฎ่ฉณ็ดฐ่งฃ่ชฌ
ไธป่ฆ6ใณใณใใผใใณใใฎๅฝนๅฒ
โ Docker CLI๏ผใณใใณใใฉใคใณใคใณใฟใผใใงใผใน๏ผ
- ๅฝนๅฒ: ใฆใผใถใผใDockerใๆไฝใใใใใฎใฟใผใใใซใใผใซ
- ๅไฝ: ใณใใณใใREST APIใชใฏใจในใใซๅคๆใใdockerdใซ้ไฟก
- ไพ:
docker run, docker build, docker images ใชใฉใฎใณใใณใ็พค
# ใฆใผใถใผใCLIใ้ใใฆใณใใณใใๅ
ฅๅ
$ docker run -d --name myapp nginx:latest
# โ ใใฎCLIใฏ docker ใซใชใฏใจในใใ้ใ
โก dockerd๏ผDocker Daemon / ใใใฏใจใณใใตใผใใผ๏ผ
- ๅฝนๅฒ: DockerใฎไธญๅฟใใญใปในใใในใฆใฎAPIใชใฏใจในใใๅฆ็
- ่ฉณ็ดฐๆฉ่ฝ:
- ใณใณใใใฉใคใใตใคใฏใซ็ฎก็
- ใคใกใผใธใฎใใซใใจ็ฎก็
- ใใใใฏใผใฏ่จญๅฎ
- ใใชใฅใผใ ็ฎก็
- ไปใฎใณใณใใผใใณใ๏ผcontainerdใชใฉ๏ผใธใฎๆ็คบ
- ้่ฆใชใใคใณใ: dockerใใผใขใณใฏๅธธใซใใใฏใฐใฉใฆใณใใง็จผๅใใฆใใๅฟ
่ฆใใใ
# ใใผใขใณใฎ็ถๆ
็ขบ่ช
$ systemctl status docker
# Dockerใใผใขใณใฎ่จญๅฎใใกใคใซ
/etc/docker/daemon.json
โข containerd๏ผใณใณใใใฉใณใฟใคใ ใใใผใธใฃใผ๏ผ
- ๅฝนๅฒ: ใณใณใใใฎๅฎ้ใฎใฉใคใใตใคใฏใซใ็ฎก็
- ่ฉณ็ดฐๆฉ่ฝ:
- ใคใกใผใธใฎใใซใปใใใทใฅใปไฟๅญ
- ใใกใคใซใทในใใ ในใใใใทใงใใ
- ใณใณใใใฎ่ตทๅ/ๅๆญข
- OCI Runtime Spec ใ containerd-shim ใซๆธกใ
- ๆ่ก: gRPC ใง Docker ใใผใขใณใจ้ไฟก
# containerd ใฎ็ถๆ
็ขบ่ช
$ sudo systemctl status containerd
โฃ containerd-shim๏ผใใญใปในในใผใใผใใคใถใผ๏ผ
- ๅฝนๅฒ: runc ใฎๅๅพใงใณใณใใใฎใใญใปใน็ฃ่ฆใๆ
ๅฝ
- ้่ฆใช็นๅพด:
- runc ใใใญใปในใ่ตทๅใใใexitใใใใใไปฃใใใซshimใ็ฃ่ฆ
- dockerd/containerd ใๅ่ตทๅใใฆใใshimใๅญๅจใใใฐใณใณใใใฏ็ถญๆใใใ
- ใคใชใผในใใชใผใ ๏ผใญใฐๅบๅใชใฉ๏ผใฎ็ฎก็
โค runc๏ผOCIๆจๆบใฉใณใฟใคใ ๏ผ
- ๅฝนๅฒ: ๅฎ้ใซๅฏพๅฟใซใผใใซๆฉ่ฝใไฝฟใฃใฆใณใณใใใ็ๆใใไฝใฌใใซใใผใซ
- ่ฉณ็ดฐๆฉ่ฝ:
- Namespaces ใฎไฝๆ
- cgroups ใฎๅถ้้ฉ็จ
- rootfs ใฎใใฆใณใ
- ใจใณใใชใใคใณใใฎๅฎ่ก
- ้่ฆใใคใณใ: runcใฏไธๅบฆใณใณใใใไฝใใจใใใซexitใใ๏ผ็ฃ่ฆใฏshimใๆ
ๅฝ๏ผ
# ruc่ชไฝใไฝฟใใใฆใใใใจใ็ขบ่ช๏ผcontainerdๅ
้จใง๏ผ
$ journalctl -u containerd
โฅ Linux Kernel๏ผLinuxใซใผใใซ โ ใณใขใฎ้้ขๆฉ่ฝ๏ผ
| ๆฉ่ฝ |
่ชฌๆ |
| Namespaces |
ใใญใปในใฎ้้ขใๅใณใณใใใฏ็ฌ็ซใใPIDใใใใใฏใผใฏใใใกใคใซใทในใใ ใชใฉใ่ฆใ |
| cgroups |
ใชใฝใผในๅถ้ใCPU/ใกใขใช/I/Oใฎไฝฟ็จ้ใๅถ้ใป็ฃ่ฆ |
| OverlayFS |
้ๅฑคใใกใคใซใทในใใ ใใคใกใผใธใฎใฌใคใคใ็ฉๅฑคใใฆ็ฎก็ |
| Network (veth) |
ใใผใใฃใซใคใผใตใผใใใใใขใซใใใใณใณใใ้ใฎ้ไฟกใๅฏ่ฝใซ |
Airport๏ผ็ฉบๆธฏ๏ผใขใใญใธใผ โ ่จๆถใใใใใฎใใจใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ซ Docker ใณใณใใผใใณใ vs ็ฉบๆธฏ โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ใณใณใใผ- โ ็ฉบๆธฏใงใฎ โ ๅฎ้ใฎๆๅณ โ
โ ใญใณใ โ ๅฝนๅฒ โ โ
โโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Docker CLI โ ๆ
ๅฎขใฟใผใ โ ใใใปใณใธใฃใใdocker runใโ
โ โ ๋๏ผใฟใผใ๏ผโ ใๅ
ฅๅใใ โ
โ dockerd โ ็ฉบๆธฏ็ฎก็ โ ๅ
จใฆใฎใใฉใคใ/ใฒใผใใ็ฎก โ
โ โ ใปใณใฟใผ โ ็ โ
โ containerdโ ใฐใฉใฆใณใ โ ใฉใฐ(ใคใกใผใธ)ใฎ่ชญใฟ่พผ โ
โ โ ใณใณใใญใผใซโ ใฟใๆป่ตฐ่ทฏใฎใขใตใคใณ โ
โ container- โ ใฎใฃtoff โ ใใฌใคใณใๆบๅใๅๅงๅ โ
โ d-shim โ ไฟๅก โ ใใฆใๆฉไฝใ็ถญๆ โ
โ runc โ ใใคใญใใ โ ๅฎ้ใซ้ฃ่ก(ใณใณใใๅฎ่ก) โ
โ Linux Kernel โ ่ช็ฉบ็ฎก โ ็ฉบไธญไบค้ๅถๅพก(ใชใฝใผใน้ โ
โ โ ๅถ (ATC) โ ๅถใ่ก็ช้ฒๆญข) โ
โ Container โ ๅฎ้ใฎใ โ ๆ
ๅฎขใๆญไนใใฆ้ฃใถใขใใช โ
โ โ ใฉใคใ โ ใฑใผใทใงใณ โ
โโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
6. ใคใกใผใธ vs ใณใณใใ โ ๆ นๆฌ็ใช้ใ
ใคใกใผใธ๏ผImage๏ผใจใณใณใใ๏ผContainer๏ผใฎ้ขไฟใๅณ่งฃ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ใคใกใผใธใจใณใณใใใฎ้ขไฟ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโ โ
โ โ Dockerfile โ "่จญ่จๅณใๆธใ" โ
โ โ (ใฌใทใ) โ โ
โ โโโโโโโโฌโโโโโโโ โ
โ โ docker build โ
โ โผ โ
โ โโโโโโโโโโโโโโโ ใคใกใผใธ๏ผImage๏ผ โ
โ โ ่ชญๅใๅฐ็จ โ = ๆ็ใฎใใฌใทใใ โ
โ โ ใใกใคใซ โ โ
โ โ ใทในใใ โ ใปใใผในใคใกใผใธ๏ผ้ฃๆ๏ผ โ
โ โโโโโโโโโโโโโโโ ใปRUNๅฝไปคใงใฌใคใค่ฟฝๅ โ
โ โ ๏ผ่ชฟ็ๆ้ ๏ผ โ
โ โ docker run โ
โ โผ โ
โ โโโโโโโโโโโโโโโ ใณใณใใ๏ผContainer๏ผ โ
โ โ ่ชญใฟๆธใๅฏ่ฝ โ = ใฌใทใใงไฝใฃใใๆ็ใ โ
โ โ ๅฎ่ก็ฐๅข โ โ
โ โ ๏ผWritable โ ใปๅฎๅฎ่กไฝ โ
โ โ Layer๏ผ โ ใป่ตทๅ/ๅๆญข/ๅ้ใๅฏ่ฝ โ
โ โโโโโโโโโโโโโโโ ใป่คๆฐไฝๆๅฏ่ฝ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ใคใกใผใธ๏ผ่จญ่จๅณ๏ผ 1ใค โ ใณใณใใ๏ผๅฎ่กไฝ๏ผ ่คๆฐไฝๆ โ
โ โ โ
โ โโดโ โ
โ โ โ2โ โ
โ โโฌโ โ
โ ใคใกใผใธ โโโโโโโโโโโถ [่คๆฐใฎใณใณใใ] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใคใกใผใธใจใณใณใใใฎๆฏ่ผ่กจ
| ้
็ฎ |
Docker ใคใกใผใธ๏ผImage๏ผ |
Docker ใณใณใใ๏ผContainer๏ผ |
| ๆง่ณช |
่ชญใฟๅใๅฐ็จใใณใใฌใผใ |
ๅฎ่ก็ฐๅข๏ผใคใณในใฟใณใน๏ผ |
| ๅฝนๅฒ |
ใณใณใใใไฝใ่จญ่จๅณ |
ๅฎ้ใซๅใๅฎไฝ |
| ใใจใ |
ใฌใทใ๏ผใฌใทใ๏ผ |
ใฌใทใใใไฝใฃใๆ็ |
| ไฝๆใณใใณใ |
docker build, docker pull |
docker run, docker create |
| ็ฎก็ใณใใณใ |
docker images, docker rmi |
docker ps, docker stop |
| ๅคๆด |
ไธๅฏ๏ผใคใใฅใผใฟใใซ๏ผ |
ๅฏ่ฝ๏ผๆธใ่พผใฟๅฑคใใใ๏ผ |
| ใฉใคใใตใคใฏใซ |
้็ใปไฟๅญใใใ |
่ตทๅ/ๅๆญข/ๅ่ตทๅ/็ ดๆฃ |
7. Docker ใฎๅ
้จๅไฝ โ docker run ใฎ่ฃๅด
docker run nginx ใๅฎ่กใใๆใฎๅ
จไฝใใญใผๅณ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ docker run -d -p 8080:80 nginx ใๅฎ่ก๏ผ โ
โ โ
โ [Step 1] CLI โ dockerd โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Docker CLI โ โ
โ โ "docker run ..." โโ REST API โโถ dockerd โ
โ โ (Unix Socket็ต็ฑ) โ JSONใใคใญใผใ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ [Step 2] dockerd ใฎๆค่จผ โ
โ - ใณใใณใใฎๅฆฅๅฝๆงใใงใใฏ โ
โ - ใญใผใซใซใคใกใผใธๆ็กใฎ็ขบ่ช โ
โ - ใณใณใใไฝๆใฎ่ชฟๆด โ
โ โ
โ [Step 3] ใคใกใผใธ Pull๏ผๅฟ
่ฆใชๅ ดๅ๏ผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ containerd โ โ
โ โ โข ใฌใธในใใช่ช่จผ โโโโถ Docker Hub โ
โ โ โข ใใใใงในใ่งฃๆฑบ โ "nginx" ใคใกใผใธใๅๅพ โ
โ โ โข Layer ใใฆใณใญใผใ & โ โ ใญใผใซใซImage Storeใซไฟๅญ โ
โ โ ๆค่จผ โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโโ โ
โ โ โ
โ [Step 4] ใใกใคใซใทในใใ ็ตใฟ็ซใฆ โ
โ containerd ใๆบๅ: โ
โ โข Snapshot (ใใกใคใซใทในใใ ในใใใใทใงใใ) โ
โ โข OverlayFS Upper/LowerDir ้
็ฝฎ โ
โ โข OCI Bundle๏ผใกใฟใใผใฟ/ใฉใณใฟใคใ ่จญๅฎ๏ผ โ
โ โ
โ [Step 5] ใใใใฏใผใฏ่จญๅฎ โ
โ dockerd ใ: โ
โ โข veth ใใขไฝๆ โ
โ โข Hostๅดใ docker0 ใใชใใธใซ่ฟฝๅ โ
โ โข ใณใณใใใซIPไปไธ (ไพ: 172.17.0.2) โ
โ โข iptables DNAT (ใใผใใใฉใฏใผใใฃใณใฐ: 8080โ80) โ
โ โข MASQUERADE ใซใผใซ่จญๅฎ โ
โ โ
โ [Step 6] containerd โ containerd-shim โ
โ containerd ใ: โ
โ โข shim ใ่ตทๅ โ
โ โข OCI Spec ใๅผใๆธกใ โ
โ โข ใฉใคใใตใคใฏใซ็ฎก็ใๅง่ญฒ โ
โ โ
โ [Step 7] shim โ runc โ Linux Kernel โ
โ runc ใ: โ
โ โข Namespaces ไฝๆ (PID, NET, MNT, USR, IPC, USER) โ
โ โข rootfs ใใฆใณใ โ
โ โข cgroups ๅถ้้ฉ็จ โ
โ โข ใณใณใใใจใณใใชใใคใณใๅฎ่ก โ
โ โข **runc ใฏexit๏ผ็ฃ่ฆใฏshimใๆ
ๅฝ๏ผ** โ
โ โ
โ [Step 8] ใณใณใใๅฎ่กๅฎไบ โ
โ โข shim ใใใญใปในใ็ฃ่ฆ โ
โ โข dockerd ใใญใฐในใใชใผใใณใฐ โ
โ โข ใซใผใใซใ้้ขใปใชใฝใผในๅถ้ใ้ฉ็จ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ nginx ใณใณใใใใในใใฎ8080็ชใใผใใงๅไฝ้ๅง๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใใไธใคใฎใใญใผๅณ๏ผในใใใใใคในใใใ๏ผ
docker run -d -p 8080:80 nginx
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 1: CLI โ
โ "docker run ..." โ
โโโโโโโโโฌโโโโโโโโโโโ
โ REST API (JSON)
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 2: dockerd โ
โ ใใชใใผใทใงใณ โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 3: Pull โ โ ใญใผใซใซใซใคใกใผใธใใชใใใฐ
โ ใคใกใผใธๅๅพ โ
โ (containerd) โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 4: FS Assemblyโ
โ ใใกใคใซใทในใใ โ
โ ็ตใฟ็ซใฆ โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 5: Network โ
โ ใใผใใใใใณใฐ โ
โ (8080:80) โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 6: containerdโ
โ โ containerd-shim โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 7: runc โ
โ Namespaces,cgroupsโ
โ + ใซใผใใซๅฎ่ก โ
โโโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Step 8: ๅฎ่กๅฎไบ๏ผ โ
โ ใณใณใใๅไฝ้ๅง โ
โโโโโโโโโโโโโโโโโโโโ
8. Layered Filesystem๏ผ้ๅฑคใใกใคใซใทในใใ ๏ผ
Docker ใคใกใผใธใฎใฌใคใคๆง้ ๅณ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Layered Filesystem๏ผOverlayFS๏ผ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโ โ
โ โ Container Layer โ โโ ๅใณใณใใใซใๆธใ่พผใฟใๅฑค โ
โ โ ๏ผ่ชญใฟๆธใๅฏ่ฝ๏ผ โ ใ่ชๅใง่ฟฝๅ ใใใ โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โโโโโโโโโโผโโโโโโโโโโโ โ
โ โ Layer N โ โโ RUN apt-get update โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โโโโโโโโโโผโโโโโโโโโโโ โ
โ โ Layer N-1 โ โโ COPY ./app /app โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โโโโโโโโโโผโโโโโโโโโโโ โ
โ โ ... โ โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โโโโโโโโโโผโโโโโโโโโโโ โ
โ โ Layer 2 โ โโ RUN pip install โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โโโโโโโโโโผโโโโโโโโโโโ โ
โ โ Layer 1 โ โโ FROM python:3.12 โ
โ โโโโโโโโโโฌโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๅ
ฑๆใใใใฌใคใค โ โโ ไปใฎใคใกใผใธใจLayerใๅ
ฑๆ โ
โ โโโโโโโโโโโโโโโโโโโโโ โ ใใฃในใฏ็ฏ็ด โ
โ โ
โ OverlayFS ใฎไป็ตใฟ: โ
โ โโโโโโโโโโโโโโโโ โ
โ โ MergedDir โ โโ ใณใณใใใใ่ฆใใ ะตะดะธะฝะพะต ๆไปถ็ณป็ป โ
โ โ (็ตฑๅ่กจ็คบ) โ โ
โ โโโโโโโโฌโโโโโโโโ โ
โ โโ UpperDir๏ผๅคๆด/ๆฐ่ฆใใกใคใซ๏ผ โ
โ โโ LowerDir๏ผ่ชญใฟๅใๅฐ็จใฌใคใค็พค๏ผ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ใฌใคใคใฎๅ
ทไฝ็ใชใคใกใผใธ
Dockerfile:
FROM python:3.12-slim โ Layer 0 (ใใผใน)
WORKDIR /app โ Layer 1
COPY requirements.txt . โ Layer 2
RUN pip install -r ... โ Layer 3
COPY . . โ Layer 4
Dockerfile:
FROM python:3.12-slim โ Layer 0 (ๅใ๏ผๅ
ฑๆใใใ)
WORKDIR /app โ Layer 1 (ๅใ๏ผๅ
ฑๆใใใ)
RUN apt-get update โ NEW Layer (5็ช็ฎ)
COPY . . โ NEW Layer
โ Layer 0,1 ใฏไธกๆนใฎใคใกใผใธใงๅๅฉ็จใใใ๏ผ๏ผ๏ผ
UnionFS ใฎไป็ตใฟ๏ผCoW = Copy-on-Write๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OverlayFS: Copy-on-Write ๆฆ่ฆ โ
โ โ
โ LowerDir (read-only image layers) โ
โ โโโโโโโ โโโโโโโ โโโโโโโ โ
โ โLay0 โ โLay1 โ โLay2 โ โ
โ โโโโฌโโโ โโโโฌโโโ โโโโฌโโโ โ
โ โฒ โฒ โฑ โ
โ โฒ โฒ โฑ โ ่ชญใฟๅใใฏLowerDirใใ โ
โ โฒ โฒ โฑ โ
โ โฒ โฒ โฑ โ
โ โฒ_______โฑ โ
โ โฒ โ
โ โ (ใใกใคใซๅคๆดๆใฏใณใใผ) โ
โ โ โ
โ UpperDir (writable layer for container) โ
โ โโโโโโโ โโโโโโโ โ
โ โNewFileโ โModfiedโ โ
โ โโโโโโโ โโโโโโโ โ
โ โ
โ MergedDir (ใณใณใใใซ่ฆใใ ะตะดะธะฝะพะต filesystem) โ
โ All files from Lower + Upper combined โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
9. ๅบ็ค็ฅ่ญ: Namespaces ใจ cgroups
9-1. Namespaces๏ผๅๅ็ฉบ้๏ผโ ้้ขใฎไป็ตใฟ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Linux Namespaces โ ไปฎๆณๅใใใใ่ฆ็นใ โ
โ โ
โ ใใญใปในใฏclone(CLONE_NEWNS | CLONE_NEWPID | ...) ใ โ
โ ๅผใณๅบใใใจใงใ็ฌ็ซใใใใฅใผใๅๅพใใ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ ใในใ OS ใงใฎ่ฆ็น โ โ ใณใณใใAใฎ่ฆ็น โ โ
โ โ โ โ (PID Namespace) โ โ
โ โ PID 1: dockerd โ โ PID 1: myapp โ โ
โ โ PID 2: sshd โ โ PID 2: worker โ โ
โ โ PID 3: nginx โ โ โ โ
โ โ PID 4: app โ โ "PID 1"ไปฅๅคใ โ โ
โ โ ... โ โ ่ฆใใชใ๏ผ โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ ใใใใฎไธ็ (Host)โ โ ใใใใฎไธ็ (C1) โ โ
โ โ docker0: 172.17.0.1โ โ eth0: 172.17.0.2 โ โ
โ โ lo: 127.0.0.1 โ โ lo: 127.0.0.1 โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ 6็จฎ้กใฎNamespace โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ PID โ ใใญใปในID็ฉบ้ใ้้ข โ โ
โ โ NET โ ใใใใฏใผใฏในใฟใใฏใปIPใ็ฌ็ซ โ โ
โ โ MNT โ ใใฆใณใใใคใณใ๏ผใใกใคใซใทในใใ ๏ผ โ โ
โ โ USR โ ใฆใผใถใผ/ใฐใซใผใ ID ใๅ้ข โ โ
โ โ IPC โ Inter-Process Communication ใ้้ข โ โ
โ โ UTS โ ใในใๅใปใใกใคใณๅใ็ฌ็ซ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
9-2. cgroups๏ผใณใณใใญใผใซใฐใซใผใ๏ผโ ใชใฝใผในๅถ้ใฎไป็ตใฟ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ cgroups โ CPU/ใกใขใช/I/O ๅถๅพก โ
โ โ
โ /sys/fs/cgroup/ โ
โ โโโ docker/ โ
โ โโโ container1/ โ
โ โ โโโ cpu.cfs_quota_us โ CPUๅถ้ โ
โ โ โโโ memory.limit_in_bytes โ ใกใขใชๅถ้ โ
โ โ โโโ blkio.weight โ I/Oๅชๅ
ๅบฆ โ
โ โ โโโ ... โ
โ โโโ container2/ โ
โ โโโ cpu.cfs_quota_us โ CPU 50% โ
โ โโโ memory.limit_in_bytes โ 256MB โ
โ โโโ ... โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ cgroup ใฎๅฝนๅฒ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ
โ โ โ ใชใฝใผในๅถ้ โ CPU/ใกใขใช/I/Oใฎไธ้่จญๅฎ โ โ
โ โ โก ไฝฟ็จ้่ฟฝ่ทก โ ใฉใฎใณใณใใใใฉใใ ใไฝฟ็จ โ โ
โ โ โข ใชใผใใผใณใใใ้ฒๆญข โ 1ใคใฎใณใณใใใHostใ โ โ
โ โ ๅง่ฟซใใชใใใไฟ่ญท โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ไพ: docker run --memory=512m --cpus=0.5 myapp โ
โ โ ใใใซใใฃใฆ cgroup ใซๅถ้ใ่จ้ฒใใใ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Namespaces ใจ cgroups ใๅใใใๅ
จไฝๅณ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Linux ใซใผใใซใฌใใซใฎ้้ข โ
โ โ
โ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โ
โ โ Namespace โ โ Namespace โ โ Namespace โ โ
โ โ (PID) โ โ (NET) โ โ (MNT) โ โ
โ โ "PID1=app" โ โ "eth0" โ โ "/app" โ โ
โ โโโโโโโฌโโโโโโ โโโโโโโฌโโโโโโ โโโโโโโฌโโโโโโ โ
โ โ โ โ โ
โ โโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโ โ
โ โ cgroups (ใชใฝใผในๅถๅพก) โ โ
โ โ โ โ
โ โ cpu: CPUS.limit = 0.5 โ โ
โ โ memory: limit = 512MB โ โ
โ โ blkio: weight = 500 โ โ
โ โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโผโโโโโโโโโโโ โ
โ โ ใณใณใใๅฎ่ก โ โ
โ โ (ใใญใปในๅไฝ) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โป ใในใไธใงใๅใPID/Net/MNTใ่ฆใใใ๏ผ โ
โ = ไปใฎใณใณใใใใใฏๅฎๅ
จใซ้้ข๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
10. Docker ใฎๅบๆฌ็ใชไฝฟใๆนใฎๆตใ
ๅ
จไฝใฎใฉใคใใตใคใฏใซๅณ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker ใฎๅ
จไฝใฉใคใใตใคใฏใซ โ
โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ ใคใกใผใธ โ โโโถ โ ใณใณใใ โ โโโถ โ ใณใณใใ โ โ
โ โ (Image) โ โ (Running) โ โ (Stopped) โ โ
โ โโโโโโโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ โ
โ โฒ โ โ โ
โ โ โ โผ โ
โ โ docker stop โ โ
โ โ docker rm โ
โ โ (ๅ้ค) โ
โ โ โ
โ โโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Docker Hub โ
โ โ pull / push โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ๆตใ: โ
โ 1. Dockerfile ใงใฌใทใใๆธใ โ
โ 2. docker build ใงใคใกใผใธใไฝๆ โ
โ 3. docker run ใงใณใณใใใ่ตทๅ โ
โ 4. docker stop / rm ใงๅๆญขใปๅ้ค โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅบๆฌ็ใชไฝฟใๆนใฎไพ
# Step 1: ใคใกใผใธใๅๅพ๏ผDocker Hubใใ๏ผ
$ docker pull nginx
# Step 2: ใณใณใใใ่ตทๅ
$ docker run -d -p 8080:80 --name my-web nginx
# Step 3: ๅฎ่กไธญใฎใณใณใใใ็ขบ่ช
$ docker ps
# Step 4: ใณใณใใใฎใญใฐใ่ฆใ
$ docker logs my-web
# Step 5: ใณใณใใๅ
ใงใณใใณใใๅฎ่ก
$ docker exec -it my-web /bin/bash
# Step 6: ใณใณใใใๅๆญข
$ docker stop my-web
# Step 7: ใณใณใใใๅ้ค
$ docker rm my-web
11. Dockerfile ใฎๆธใๆน
Dockerfile ใจใฏ๏ผ
Dockerfile ใฏใDocker ใคใกใผใธใใใซใใใใใใฎ่จญ่จๅณ๏ผใฌใทใ๏ผใงใใ
ใฉใฎใใผในใคใกใผใธใไฝฟใใใใฉใฎใใใชใใใฑใผใธใใคใณในใใผใซใใใใ
ใฉใฎใใใชใณใใณใใๅฎ่กใใใใชใฉใใในใฆใฎๆ้ ใ่จ่ฟฐใใพใใ
Dockerfile ใฎๅบๆฌๆงๆ
# ใใผในใคใกใผใธใฎๆๅฎ
FROM python:3.12-slim
# ใณใณใใๅ
ใฎไฝๆฅญใใฃใฌใฏใใชใ่จญๅฎ
WORKDIR /app
# ใในใใฎใใกใคใซ๏ผrequirements.txt๏ผใใณใใผ
COPY requirements.txt .
# ใใใฑใผใธใคใณในใใผใซใๅฎ่ก๏ผใฌใคใคใไฝๆใใใ๏ผ
RUN pip install --no-cache-dir -r requirements.txt
# ใขใใชใฑใผใทใงใณๆฌไฝใใณใใผ
COPY . .
# ใณใณใใใ listen ใใใใผใใๅฎฃ่จ
EXPOSE 5000
# ใณใณใใ่ตทๅๆใซๅฎ่กใใใใใฉใซใใณใใณใ
CMD ["python", "app.py"]
Dockerfile ใฎไธป่ฆๅฝไปค๏ผInstruction๏ผไธ่ฆง
| ๅฝไปค |
ๆๅณ |
ไพ |
FROM |
ใใผในใจใชใใคใกใผใธใๆๅฎ |
FROM python:3.12-slim |
RUN |
ใคใกใผใธใใซใๆใซใณใใณใใๅฎ่ก |
RUN apt-get update |
CMD |
ใณใณใใ่ตทๅๆใฎใใใฉใซใใณใใณใ |
CMD ["python", "app.py"] |
COPY |
ใในใใฎใใกใคใซใใณใณใใใซใณใใผ |
COPY . /app |
ENTRYPOINT |
ใณใณใใ่ตทๅๆใซๅฎ่กใไธๆธใไธๅฏ |
ENTRYPOINT ["/run.sh"] |
WORKDIR |
ไฝๆฅญใใฃใฌใฏใใชใๆๅฎ |
WORKDIR /app |
EXPOSE |
ใใผใใๅฎฃ่จ๏ผๅฎ้ใซใฏ้ใใชใ๏ผ |
EXPOSE 8080 |
ENV |
็ฐๅขๅคๆฐใ่จญๅฎ |
ENV NODE_ENV=production |
ADD |
URLใใฆใณใญใผใใชใฉ COPY ใฎไธไฝไบๆ |
ADD https://... . |
ARG |
ใใซใๆใซๆธกใๅคๆฐ |
ARG VERSION=1.0 |
VOLUME |
ใใชใฅใผใ ใใใฆใณใ |
VOLUME /data |
USER |
ๅฎ่กใฆใผใถใผใๆๅฎ๏ผใปใญใฅใชใใฃๅไธ๏ผ |
USER appuser |
Dockerfile ใไฝฟใฃใใคใกใผใธใฎใใซใใจใณใณใใ่ตทๅ
# ใคใกใผใธใใใซใ๏ผDockerfileใใ๏ผ
$ docker build -t my-python-app .
# ใใซใใใใคใกใผใธใใใณใณใใใ่ตทๅ
$ docker run -d -p 5000:5000 --name myapp my-python-app
# ใใฉใฆใถใง็ขบ่ช
# http://localhost:5000
Dockerfile ใฎใในใใใฉใฏใใฃใน
# โ ใในใใใฉใฏใใฃในใซๅใใไพ
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3
COPY app.py /app.py
CMD ["python", "/app.py"]
# โ
ใในใใใฉใฏใใฃในใซๅพใฃใไพ๏ผ่ปฝ้ใงใปใญใฅใข๏ผ
FROM python:3.12-slim # slimใใผใธใงใณใงใตใคใบๅๆธ
WORKDIR /app # ไฝๆฅญใใฃใฌใฏใใช่จญๅฎ
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt # ใญใฃใใทใฅๅ้คใงใตใคใบๅๆธ
COPY . . # ใขใใชใณใผใใใณใใผ๏ผRUNใจๅ้ขใใฆใญใฃใใทใฅๆดป็จ๏ผ
EXPOSE 5000 # ใใผใๅฎฃ่จ
USER appuser # rootใงใฏใชใไธ่ฌใฆใผใถใผใงๅฎ่ก๏ผใปใญใฅใชใใฃ๏ผ
CMD ["python", "app.py"]
Dockerfile ใฎใในใใใฉใฏใใฃในใพใจใ
| โ
ใใในใใใจ |
โ ใใใชใในใใใจ |
-slim ใพใใฏ -alpine ใไฝฟใ |
ๅทจๅคงใชใใผในใคใกใผใธ |
RUN ใฏ && ใงใคใชใ |
1่ก=1 RUN ๅฝไปค๏ผใฌใคใคๅข๏ผ |
| ใญใฃใใทใฅใๆ่ญ๏ผๅคๆด้ ปๅบฆใฎไฝใใใฎใๅ
ใซ๏ผ |
ๅ
จ้จใๆๅพใซCOPY |
.dockerignore ใไฝฟใ |
.git ใ node_modules ใๅซใใ |
USER ใงไธ่ฌใฆใผใถใผใซๅใๆฟใ |
Rootใงๅฎ่ก |
12. Docker Compose ๅ
ฅ้
Docker Compose ใจใฏ๏ผ
Docker Compose ใฏใ่คๆฐใฎใณใณใใใงๆงๆใใใใขใใชใฑใผใทใงใณใๅฎ็พฉใป็ฎก็ใใใใใฎใใผใซใงใใ
YAMLๅฝขๅผใฎ่จญๅฎใใกใคใซ๏ผdocker-compose.yml๏ผใซๆงๆใ่จ่ฟฐใใ1ใคใฎใณใใณใใงๅ
จใณใณใใใๆไฝใงใใพใใ
ใชใ Docker Compose ใๅฟ
่ฆใชใฎใ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅไธใณใณใใ vs ่คๆฐใณใณใใ๏ผDocker Compose๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๅไธใณใณใใ: โ
โ $ docker run -d -p 8080:80 nginx โ
โ $ docker run -d -e MYSQL_ROOT_PASS=root mysql โ
โ $ docker run -d --link ... myapp โ
โ โ ใณใณใใใใจใซใณใใณใ๏ผ โ
โ โ
โ Docker Compose: โ
โ $ docker compose up -d โ
โ โ 1ใคใฎใณใใณใใงๅ
จใตใผใในไธๆ่ตทๅ๏ผ โ
โ โ
โ ๐ Web + DB + Cache ใฎ่คๅ็ฐๅขใไธ็ฌใงๅฎๆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
docker-compose.yml ใฎๅบๆฌๆง้
# docker-compose.yml
version: '3.8'
services: # ๅใตใผใใน๏ผใณใณใใ๏ผใฎๅฎ็พฉ
web: # Webใตใผใใผ๏ผNginx๏ผ
image: nginx:latest # ใคใกใผใธใๆๅฎ
ports: # ใใผใใใใใณใฐ
- "8080:80" # ใในใ:8080 โ ใณใณใใ:80
volumes: # ใใชใฅใผใ ๏ผใใกใคใซๅ
ฑๆ๏ผ
- ./html:/usr/share/nginx/html
depends_on: # ่ตทๅ้ ๅบใฎๅถๅพก
- app
app: # ใขใใชใฑใผใทใงใณ
build: . # ใซใฌใณใใใฃใฌใฏใใชใฎDockerfileใใใใซใ
ports: # ใใผใๅ
ฌ้
- "5000:5000"
depends_on: # DBใ่ตทๅใใฆใใ้ๅง
- db
environment: # ็ฐๅขๅคๆฐ
- FLASK_ENV=development
db: # ใใผใฟใใผใน
image: mysql:8.0 # MySQL 8.0 ใคใกใผใธ
environment: # ็ฐๅขๅคๆฐใงๅๆ่จญๅฎ
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
volumes: # ใใชใฅใผใ ใงใใผใฟใๆฐธ็ถๅ
- db-data:/var/lib/mysql
volumes: # ๆฐธ็ถในใใฌใผใธใฎๅฎ็พฉ
db-data: # dbใตใผใในใฎใใผใฟใไฟๅญ
Docker Compose ใฎๅบๆฌใณใใณใ
| ใณใใณใ |
็จ้ |
ไพ |
docker compose up -d |
ๅ
จใตใผใในใใใใฏใฐใฉใฆใณใใง่ตทๅ |
ๆใๅบๆฌ็ใชไฝฟใๆน |
docker compose down |
ๅ
จใตใผใในใๅๆญขใปๅ้ค |
|
docker compose logs |
ๅ
จใตใผใในใฎใญใฐใ็ขบ่ช |
|
docker compose ps |
ใตใผใในใฎ็จผๅ็ถๆณใ็ขบ่ช |
|
docker compose exec web bash |
็นๅฎใฎใตใผใในใซใทใงใซใงใขใฏใปใน |
|
docker compose build |
ใคใกใผใธใๅใใซใ |
|
docker compose restart |
ๅ
จใตใผใในใๅ่ตทๅ |
|
Docker Compose ใฎไธป่ฆ่จญๅฎ้
็ฎ
| ใใฃใผใซใ |
็จ้ |
ไพ |
image |
ๆขๅญใคใกใผใธใไฝฟ็จ |
redis:7-alpine |
build |
Dockerfileใใใใซใ |
build: ./backend |
ports |
ใใผใใใใใณใฐ |
- "3000:3000" |
volumes |
ใใผใฟใฎๆฐธ็ถๅ/ๅ
ฑๆ |
- ./data:/data |
environment |
็ฐๅขๅคๆฐ |
- DEBUG=true |
depends_on |
่ตทๅ้ ๅบๅถๅพก |
depends_on: [db] |
13. Docker ใใใใฏใผใฏใจใใชใฅใผใ
13-1. Docker ใใใใฏใผใฏ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker ใใใใฏใผใฏใฎๆง้ โ
โ โ
โ ใในใ (Docker Host) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ docker0 (ใใชใใธใใใใฏใผใฏ) โ โ
โ โ IP: 172.17.0.1/16 โ โ
โ โ โ โ
โ โ โโโโโ โโโโโโโโ โโโโโโโโโโโโ โ โ
โ โ โC1 โ โ C2 โ โ C3 โ โ โ
โ โ โeth0โ โeth0 โ โ eth0 โ โ โ
โ โ โ172.โ โ172. โ โ 172. โ โ โ
โ โ โ .0. โ โ .0. โ โ .0. โ โ โ
โ โ โโโโโ โโโโโโโโ โโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโ โ
โ โ veth pairs (ไปฎๆณใคใผใตใผใใใ) โ
โ โผ โ
โ ใในใOSใฎ็ฉ็ NIC โ
โ โ
โ ใใใใฏใผใฏใฟใคใ: โ
โ โข bridge โ ๅใ
ใณใณใใ้ใฎใใชใใธ โ
โ โข host โ ใในใใฎใใใใฏใผใฏใ็ดๆฅไฝฟ็จ โ
โ โข overlay โ ใใซใใใ ็ฐๅข๏ผDocker Swarm, K8s) โ
โ โข none โ ใใใใฏใผใฏใชใ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
13-2. Docker ใใชใฅใผใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker ใใชใฅใผใ ๏ผๆฐธ็ถในใใฌใผใธ๏ผ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ใณใณใใA โ โ ใณใณใใใๅๆญข/ๅ้คใใฆใ... โ
โ โ โโโโโโโโโโโโโโโโโโโ โ ใใผใฟใฏไฟใใใ๏ผ โ
โ โ โ /app/data (tmp) โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโ โ โ ไธๆนใ้ๅธธใใกใคใซใฏๅ้คใใใ โ
โ โ โ โ
โ โ โ ้ๅธธใใกใคใซ = ใณใณใใๅ้คๆๆถๅป โ
โ โ โ
ใใชใฅใผใ = ๆฐธ็ถๅใใ โ
โ โโโโโโโโโโโโโฌโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ใในใไธใฎใใชใฅใผใ โ โ ๅฎ้ใซใใผใฟใไฟๅญใใใๅ ดๆ โ
โ โ /var/lib/docker/v/ โ โ
โ โ my-data/_data/ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ ใใชใฅใผใ ใฎใกใชใใ: โ
โ โข ใณใณใใใๅ่ตทๅใใฆใใใผใฟใไฟๆ โ
โ โข ใใผใฟใใผในใชใฉใซ้ฉใใๆฐธ็ถในใใฌใผใธ โ
โ โข ใในใใจใฎๅ
ฑๆ๏ผdocker run -v /host:/container๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
14. ใใไฝฟใ Docker ใณใใณใไธ่ฆง
ใชในในใกใฎใณใใณใใชใใกใฌใณใน้
ใคใกใผใธๆไฝ
| ใณใใณใ |
็จ้ |
docker images |
ใญใผใซใซใซใใใคใกใผใธใฎไธ่ฆงใ่กจ็คบ |
docker pull nginx |
ใคใกใผใธใDocker Hubใใๅๅพ |
docker build -t myapp . |
Dockerfileใใใคใกใผใธใใใซใ |
docker rmi nginx |
ใคใกใผใธใๅ้ค |
docker tag myapp:latest user/myapp:v1.0 |
ใคใกใผใธใซใฟใฐ๏ผๅๅ๏ผใใคใใ |
docker push user/myapp:v1.0 |
ใคใกใผใธใDocker Hubใซๅ
ฌ้ |
ใณใณใใๆไฝ
| ใณใใณใ |
็จ้ |
docker run -d -p 8080:80 nginx |
ใคใกใผใธใใใณใณใใใไฝๆใใฆ่ตทๅ |
docker ps |
ๅฎ่กไธญใฎใณใณใใไธ่ฆงใ่กจ็คบ |
docker ps -a |
ๅ
จใณใณใใ๏ผๅๆญขๅซใ๏ผไธ่ฆง |
docker stop mycontainer |
ใณใณใใใๅๆญข |
docker start mycontainer |
ๅๆญขใใใณใณใใใ้ๅง |
docker restart mycontainer |
ใณใณใใใๅ่ตทๅ |
docker rm mycontainer |
ใณใณใใใๅ้ค |
docker exec -it mycontainer bash |
ใณใณใใๅ
ใงใณใใณใใๅฎ่ก |
ใญใฐใปๆ
ๅ ฑ
| ใณใใณใ |
็จ้ |
docker logs mycontainer |
ใณใณใใใฎใญใฐใ่กจ็คบ |
docker logs -f mycontainer |
ใชใขใซใฟใคใ ใงใญใฐใใใฉใญใผ |
docker inspect mycontainer |
่ฉณ็ดฐๆ
ๅ ฑใJSONๅฝขๅผใง่กจ็คบ |
docker top mycontainer |
ใณใณใใใฎใใญใปในไธ่ฆง |
Docker Compose
| ใณใใณใ |
็จ้ |
docker compose up -d |
ๅ
จใตใผใใน่ตทๅ๏ผใใใฏใฐใฉใฆใณใ๏ผ |
docker compose down |
ๅ
จใตใผใในใๅๆญขใปๅ้ค |
docker compose logs |
ๅ
จใตใผใในใฎใญใฐ |
docker compose ps |
ใตใผใในใฎ็จผๅ็ถๆณ |
docker compose exec web bash |
็นๅฎใฎใตใผใในใซใขใฏใปใน |
docker compose build |
ใคใกใผใธใๅใใซใ |
15. Docker ใฎๆดป็จๆณใปๆดป็จใทใผใณ
Dockerใใใไฝฟใใใไธป่ฆ5ใคใฎใทใใชใช
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Dockerใฎไปฃ่กจ็ใชๆดป็จๆณ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ใทใผใณ โ : ใญใผใซใซ้็บ็ฐๅขใฎ็ตฑไธ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข ใใผใ ๅ
จๅกใๅใ้็บ็ฐๅขใๅ
ฑๆ โ
โ โข OSใป่จ่ชใใผใธใงใณใปใใใซใฆใงใขใฎ้ใใซใใใใฐใ80%ๅๆธ |
โ โ
โ ใทใผใณโก: CI/CDใใคใใฉใคใณ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข GitHub Actions / Jenkins ใจ็ตใฟๅใใ โ
โ โข ใณใผใใฎใใใทใฅโ่ชๅใในใโใใซใโใใใญใค โ
โ โข ใในใ็ฐๅขใใณใณใใใงๅ็พ โ
โ โ
โ ใทใผใณโข: ใใคใฏใญใฐใตใผใในใขใผใญใใฏใใฃ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข ๅคงใใชใขใใชใๅฐใใช็ฌ็ซใตใผใในใซๅๅฒ โ
โ โข ๅใตใผใในใๅๅฅใฎใณใณใใใจใใฆ้็จ โ
โ โข ็ฌ็ซใใใญใคใปในใฑใผใชใณใฐใๅฏ่ฝ โ
โ โ
โ ใทใผใณโฃ: ใใผใฟใใผในใในใ็ฐๅขๆง็ฏ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข MySQL / PostgreSQL / MongoDB ใ็ฌๆใซ่ตทๅ โ
โ โข ใในใ็ตไบๅพใใใซ็ ดๆฃ โ
โ โข ๆฌ็ชใใผใฟใๆฑใๅฟ้
ใชใ โ
โ โ
โ ใทใผใณโค: ใฌใฌใทใผใทในใใ ใฎใขใใใคใผใผใทใงใณ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โข ๅคใ็ฐๅขใใณใณใใๅ
ใซๅ็พ โ
โ โข ใในใOSใซไพๅญใใชใใใไฟๅฎใๆฅฝ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
16. ใคใพใใใใคใณใใจ่งฃๆฑบ็ญ
ใใใใใจใฉใผใจๅฏพๅฆๆณ
ใจใฉใผ โ : Permission Denied๏ผๆจฉ้ใจใฉใผ๏ผ
# ็็ถ: "permission denied" ใๅบใ
# ๅๅ : ใฆใผใถใผใ docker ใฐใซใผใใซๅ
ฅใฃใฆใใชใ
# ่งฃๆฑบ็ญ:
$ sudo usermod -aG docker $USER
# โ ๅใญใฐใคใณ
ใจใฉใผ โก: ใใผใ็ซถๅ๏ผPort Already in Use๏ผ
# ็็ถ: "port is already allocated"
# ๅๅ : ๆๅฎใใใใผใใๆขใซไฝฟ็จไธญ
# ่งฃๆฑบ็ญ:
# ๅฅใฎใใผใใๅฒใๅฝใฆใ
$ docker run -p 8081:80 nginx
# ใพใใฏ็ซถๅใใฆใใใใญใปในใๅๆญข
ใจใฉใผ โข: ใณใณใใๅณ็ตไบ
# ็็ถ: ใณใณใใใ็ซใกไธใใใจใใใซExit
# ๅๅ : ใใฉใขใฐใฉใฆใณใใงๅฎ่กใใใใญใปในใๅญๅจใใชใ
# ่งฃๆฑบ็ญ:
$ docker logs mycontainer # ใจใฉใผใญใฐใ็ขบ่ช
$ docker exec -it mycontainer bash # ไธญ่บซใ็ขบ่ช
ใจใฉใผ โฃ: ใใฃในใฏๅฎน้ใฎไธ่ถณ
# ็็ถ: "no space left on device"
# ่งฃๆฑบ็ญ: ไธ่ฆใชใชใฝใผในใไธๆฌๅ้ค
$ docker system prune -a
# ๅ่: Docker้ข้ฃใตใคใบใฎ็ขบ่ช
$ docker system df
17. ใพใจใ
Docker ๅ
จไฝใๆฏใ่ฟใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Docker ใฎๅ
จไฝใพใจใ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Docker ใณใณใใใจใณใทในใใ โ โ
โ โ โ โ
โ โ Docker Hub / Registry โ โ
โ โ โ โ ใคใกใผใธใฎใใๅใ โ โ
โ โ โผ โ โ
โ โ Dockerfile โ ใคใกใผใธ๏ผ่จญ่จๅณ/ใใซใๆธใฟ๏ผ โ โ
โ โ โ โ โ
โ โ docker run โ โ
โ โ โ โ โ
โ โ ใณใณใใ๏ผๅฎ้ใฎๅไฝ็ฐๅข: ใขใใช+ใฉใณใฟใคใ +ใฉใคใใฉใช๏ผ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โ
Docker ใฎใใคใณใ: โ
โ โข ใคใกใผใธใฏใ่จญ่จๅณใใใณใณใใใฏใๅฎ่กไฝใ โ
โ โข ใในใOSใซใผใใซใๅ
ฑๆ โ ่ปฝ้ใป้ซ้ โ
โ โข Namespaces ใจ cgroups ใ้้ขใจใชใฝใผในๅถๅพกใๅฎ็พ โ
โ โข Dockerfile ใงใคใกใผใธใไฝๆใCompose ใง่คๆฐ็ฎก็ โ
โ โข CI/CDใปใใคใฏใญใตใผใในใปใในใ็ฐๅขใชใฉๅคๆงใชๆดป็จ โ
โ โ
โ ๐ ๆฌกใฎในใใใ: โ
โ 1. Dockerใฎๅบๆฌๆไฝใใใณใบใชใณใง็ทด็ฟ โ
โ 2. Dockerfile ใฎ่ชไฝ โ
โ 3. Docker Compose ใง่คๆฐใณใณใใ โ
โ 4. Kubernetes / AWS ECS ใธ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅ่URL:
– Docker Fundamentals (Medium)
– Docker internals deep dive (DEV Community)
– Docker Architecture Overview (Spacelift)
– Docker ใใฅใผใใชใขใซๅฎๅ
จใฌใคใ (ITcross)
– Dockerใฎๅบๆฌ็จ่ช่งฃ่ชฌ (docker.lock-life.com)
– Docker Tutorial 2025 (QuashBugs)
– How Docker Containers Actually Work (Atmosly)
– Docker Image vs Container (CircleCI)
– ๅๅญฆ่
ๅใ docker ๅบ็ค (Qiita)
– Dockerใฎๅบๆฌ็จ่ช่งฃ่ชฌ (Qiita)
ใณใกใณใ