๐Ÿณ DockerๅฎŒๅ…จใ‚ฌใ‚คใƒ‰๏ผšๅ›ณ่งฃไป˜ใใง่ฉณใ—ใๅญฆใถ

๐Ÿณ Docker ๅฎŒๅ…จใ‚ฌใ‚คใƒ‰ โ€” ๅ›ณ่งฃไป˜ใใง่ฉณใ—ใๅญฆใถ

ๅ‡บๅ…ธ: Medium, DEV Community, Spacelift, ITcross, Qiita, Zenn, CircleCI ใชใฉใฎ่ค‡ๆ•ฐใฎๆŠ€่ก“่จ˜ไบ‹ใ‚’็ทๅˆ
ไฝœๆˆๆ—ฅ: 2026ๅนด4ๆœˆ25ๆ—ฅ


  1. ็›ฎๆฌก
  2. 1. Docker ใจใฏไฝ•ใ‹
    1. ใ‚ณใƒณใƒ†ใƒŠใจใฏ๏ผŸ
  3. 2. ใชใœ Docker ใŒๆณจ็›ฎใ•ใ‚Œใ‚‹ใฎใ‹
    1. Docker ใŒ่งฃๆฑบใ™ใ‚‹่ชฒ้กŒ โ€” “It works on my machine”
  4. 3. ใ‚ณใƒณใƒ†ใƒŠ VS ไปฎๆƒณใƒžใ‚ทใƒณ๏ผˆVM๏ผ‰
    1. ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃๅ›ณใงๆฏ”่ผƒ
    2. ๆฏ”่ผƒ่กจ
  5. 4. Docker ใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃ
    1. Docker ใฎๅ…จไฝ“ๆง‹ๆˆๅ›ณ๏ผˆHigh-Level Architecture๏ผ‰
    2. ใ‚‚ใ†ไธ€ใคใฎ่ฆ–็‚น โ€” ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆ็›ธไบ’ไฝœ็”จๅ›ณ
  6. 5. Docker ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฎ่ฉณ็ดฐ่งฃ่ชฌ
    1. ไธป่ฆ6ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฎๅฝนๅ‰ฒ
      1. โ‘  Docker CLI๏ผˆใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใƒผใ‚น๏ผ‰
      2. โ‘ก dockerd๏ผˆDocker Daemon / ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใ‚ตใƒผใƒใƒผ๏ผ‰
      3. โ‘ข containerd๏ผˆใ‚ณใƒณใƒ†ใƒŠใƒฉใƒณใ‚ฟใ‚คใƒ ใƒžใƒใƒผใ‚ธใƒฃใƒผ๏ผ‰
      4. โ‘ฃ containerd-shim๏ผˆใƒ—ใƒญใ‚ปใ‚นใ‚นใƒผใƒ‘ใƒผใƒใ‚คใ‚ถใƒผ๏ผ‰
      5. โ‘ค runc๏ผˆOCIๆจ™ๆบ–ใƒฉใƒณใ‚ฟใ‚คใƒ ๏ผ‰
      6. โ‘ฅ Linux Kernel๏ผˆLinuxใ‚ซใƒผใƒใƒซ โ€” ใ‚ณใ‚ขใฎ้š”้›ขๆฉŸ่ƒฝ๏ผ‰
    2. Airport๏ผˆ็ฉบๆธฏ๏ผ‰ใ‚ขใƒŠใƒญใ‚ธใƒผ โ€” ่จ˜ๆ†ถใ™ใ‚‹ใŸใ‚ใฎใŸใจใˆ
  7. 6. ใ‚คใƒกใƒผใ‚ธ vs ใ‚ณใƒณใƒ†ใƒŠ โ€” ๆ นๆœฌ็š„ใช้•ใ„
    1. ใ‚คใƒกใƒผใ‚ธ๏ผˆImage๏ผ‰ใจใ‚ณใƒณใƒ†ใƒŠ๏ผˆContainer๏ผ‰ใฎ้–ขไฟ‚ใ‚’ๅ›ณ่งฃ
    2. ใ‚คใƒกใƒผใ‚ธใจใ‚ณใƒณใƒ†ใƒŠใฎๆฏ”่ผƒ่กจ
  8. 7. Docker ใฎๅ†…้ƒจๅ‹•ไฝœ โ€” docker run ใฎ่ฃๅด
    1. docker run nginx ใ‚’ๅฎŸ่กŒใ—ใŸๆ™‚ใฎๅ…จไฝ“ใƒ•ใƒญใƒผๅ›ณ
    2. ใ‚‚ใ†ไธ€ใคใฎใƒ•ใƒญใƒผๅ›ณ๏ผˆใ‚นใƒ†ใƒƒใƒ—ใƒใ‚คใ‚นใƒ†ใƒƒใƒ—๏ผ‰
  9. 8. Layered Filesystem๏ผˆ้šŽๅฑคใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ๏ผ‰
    1. Docker ใ‚คใƒกใƒผใ‚ธใฎใƒฌใ‚คใƒคๆง‹้€ ๅ›ณ
    2. ใƒฌใ‚คใƒคใฎๅ…ทไฝ“็š„ใชใ‚คใƒกใƒผใ‚ธ
    3. UnionFS ใฎไป•็ต„ใฟ๏ผˆCoW = Copy-on-Write๏ผ‰
  10. 9. ๅŸบ็คŽ็Ÿฅ่ญ˜: Namespaces ใจ cgroups
    1. 9-1. Namespaces๏ผˆๅๅ‰็ฉบ้–“๏ผ‰โ€” ้š”้›ขใฎไป•็ต„ใฟ
    2. 9-2. cgroups๏ผˆใ‚ณใƒณใƒˆใƒญใƒผใƒซใ‚ฐใƒซใƒผใƒ—๏ผ‰โ€” ใƒชใ‚ฝใƒผใ‚นๅˆถ้™ใฎไป•็ต„ใฟ
    3. Namespaces ใจ cgroups ใ‚’ๅˆใ‚ใ›ใŸๅ…จไฝ“ๅ›ณ
  11. 10. Docker ใฎๅŸบๆœฌ็š„ใชไฝฟใ„ๆ–นใฎๆตใ‚Œ
    1. ๅ…จไฝ“ใฎใƒฉใ‚คใƒ•ใ‚ตใ‚คใ‚ฏใƒซๅ›ณ
    2. ๅŸบๆœฌ็š„ใชไฝฟใ„ๆ–นใฎไพ‹
  12. 11. Dockerfile ใฎๆ›ธใๆ–น
    1. Dockerfile ใจใฏ๏ผŸ
    2. Dockerfile ใฎๅŸบๆœฌๆง‹ๆ–‡
    3. Dockerfile ใฎไธป่ฆๅ‘ฝไปค๏ผˆInstruction๏ผ‰ไธ€่ฆง
    4. Dockerfile ใ‚’ไฝฟใฃใŸใ‚คใƒกใƒผใ‚ธใฎใƒ“ใƒซใƒ‰ใจใ‚ณใƒณใƒ†ใƒŠ่ตทๅ‹•
    5. Dockerfile ใฎใƒ™ใ‚นใƒˆใƒ—ใƒฉใ‚ฏใƒ†ใ‚ฃใ‚น
    6. Dockerfile ใฎใƒ™ใ‚นใƒˆใƒ—ใƒฉใ‚ฏใƒ†ใ‚ฃใ‚นใพใจใ‚
  13. 12. Docker Compose ๅ…ฅ้–€
    1. Docker Compose ใจใฏ๏ผŸ
    2. ใชใœ Docker Compose ใŒๅฟ…่ฆใชใฎใ‹๏ผŸ
    3. docker-compose.yml ใฎๅŸบๆœฌๆง‹้€ 
    4. Docker Compose ใฎๅŸบๆœฌใ‚ณใƒžใƒณใƒ‰
    5. Docker Compose ใฎไธป่ฆ่จญๅฎš้ …็›ฎ
  14. 13. Docker ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใจใƒœใƒชใƒฅใƒผใƒ 
    1. 13-1. Docker ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏ
    2. 13-2. Docker ใƒœใƒชใƒฅใƒผใƒ 
  15. 14. ใ‚ˆใไฝฟใ† Docker ใ‚ณใƒžใƒณใƒ‰ไธ€่ฆง
    1. ใ‚ชใ‚นใ‚นใƒกใฎใ‚ณใƒžใƒณใƒ‰ใƒชใƒ•ใ‚กใƒฌใƒณใ‚น้›†
      1. ใ‚คใƒกใƒผใ‚ธๆ“ไฝœ
      2. ใ‚ณใƒณใƒ†ใƒŠๆ“ไฝœ
      3. ใƒญใ‚ฐใƒปๆƒ…ๅ ฑ
      4. Docker Compose
  16. 15. Docker ใฎๆดป็”จๆณ•ใƒปๆดป็”จใ‚ทใƒผใƒณ
    1. DockerใŒใ‚ˆใไฝฟใ‚ใ‚Œใ‚‹ไธป่ฆ5ใคใฎใ‚ทใƒŠใƒชใ‚ช
  17. 16. ใคใพใšใใƒใ‚คใƒณใƒˆใจ่งฃๆฑบ็ญ–
    1. ใ‚ˆใใ‚ใ‚‹ใ‚จใƒฉใƒผใจๅฏพๅ‡ฆๆณ•
      1. ใ‚จใƒฉใƒผ โ‘ : Permission Denied๏ผˆๆจฉ้™ใ‚จใƒฉใƒผ๏ผ‰
      2. ใ‚จใƒฉใƒผ โ‘ก: ใƒใƒผใƒˆ็ซถๅˆ๏ผˆPort Already in Use๏ผ‰
      3. ใ‚จใƒฉใƒผ โ‘ข: ใ‚ณใƒณใƒ†ใƒŠๅณ็ต‚ไบ†
      4. ใ‚จใƒฉใƒผ โ‘ฃ: ใƒ‡ใ‚ฃใ‚นใ‚ฏๅฎน้‡ใฎไธ่ถณ
  18. 17. ใพใจใ‚
    1. Docker ๅ…จไฝ“ใ‚’ๆŒฏใ‚Š่ฟ”ใ‚‹

็›ฎๆฌก

  1. Docker ใจใฏไฝ•ใ‹
  2. ใชใœ Docker ใŒๆณจ็›ฎใ•ใ‚Œใ‚‹ใฎใ‹
  3. ใ‚ณใƒณใƒ†ใƒŠ VS ไปฎๆƒณใƒžใ‚ทใƒณ (VM)
  4. Docker ใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃ๏ผˆๆง‹้€ ๅ›ณ๏ผ‰
  5. Docker ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆใฎ่ฉณ็ดฐ่งฃ่ชฌ
  6. ใ‚คใƒกใƒผใ‚ธ vs ใ‚ณใƒณใƒ†ใƒŠ โ€” ๆ นๆœฌ็š„ใช้•ใ„
  7. Docker ใฎๅ†…้ƒจๅ‹•ไฝœ โ€” docker run ใฎ่ฃๅด
  8. Layered Filesystem๏ผˆ้šŽๅฑคใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ๏ผ‰
  9. ๅŸบ็คŽ็Ÿฅ่ญ˜: Namespaces ใจ cgroups
  10. Docker ใฎๅŸบๆœฌ็š„ใชไฝฟใ„ๆ–นใฎๆตใ‚Œ
  11. Dockerfile ใฎๆ›ธใๆ–น
  12. Docker Compose ๅ…ฅ้–€
  13. Docker ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใจใƒœใƒชใƒฅใƒผใƒ 
  14. ใ‚ˆใไฝฟใ† Docker ใ‚ณใƒžใƒณใƒ‰ไธ€่ฆง
  15. Docker ใฎๆดป็”จๆณ•ใƒปๆดป็”จใ‚ทใƒผใƒณ
  16. ใคใพใšใใƒใ‚คใƒณใƒˆใจ่งฃๆฑบ็ญ–
  17. ใพใจใ‚

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)

ใ‚ณใƒกใƒณใƒˆ

ใ‚ฟใ‚คใƒˆใƒซใจURLใ‚’ใ‚ณใƒ”ใƒผใ—ใพใ—ใŸ