ãã®æçš¿ã¯ããã¹ãã§çŽæ¥Docker Engine(Community Edition)ãå®è¡ããŠããLinuxãŠãŒã¶ãŒã察象ãšããŠããŸããDocker Desktop ãŠãŒã¶ãŒã¯äœãããå¿ èŠã¯ãããŸãã â ãšã³ãžã³ã®æŽæ°ã¯ãå°æ¥ã®ãã¹ã¯ããã ãªãªãŒã¹ã«èªåçã«å«ãŸããŸãã
Docker Engine v29 ã¯ãDocker ãã©ãããã©ãŒã ã®å°æ¥ã®æºåãæŽããåºç€ãªãªãŒã¹ã§ããæŽŸæãªæ°æ©èœã¯ä»å±ããŠããªããããããŸããããã¢ãŒããã¯ãã£ãç°¡çŽ åãããšã³ã·ã¹ãã ã®æŽåæ§ãæ¹åããããã€ãã®éèŠãªå éšå€æŽãå°å ¥ãããŠããŸãã
- æå° API ããŒãžã§ã³ã®æŽæ°
- Containerd ã€ã¡ãŒãžã¹ãã¢ãæ°èŠã€ã³ã¹ããŒã«ã®ããã©ã«ãã«ãªããŸããã
- Go ã¢ãžã¥ãŒã«ãžã®ç§»è¡
- NFTablesã®å®éšçãµããŒã
ãããã®å€æŽã«ãããã³ã³ãããšã³ã·ã¹ãã å šäœã®ä¿å®æ§ãéçºè ãšã¯ã¹ããªãšã³ã¹ãçžäºéçšæ§ãåäžããŸãã
æå° API ããŒãžã§ã³ã®æŽæ°
v25ããå€ã Docker ããŒãžã§ã³ã¯ãµããŒããçµäºãããããæå° API ããŒãžã§ã³ã1ã«å¢ãããŸããã44 (Moby v25)ãÂ
次ã®ãšã©ãŒã衚瀺ãããå Žåã¯ãæ°ããã¯ã©ã€ã¢ã³ãã«æŽæ°ãããã軜æžçã®æé ã«åŸã£ãŠæå°ããŒãžã§ã³ããªãŒããŒã©ã€ãããå¿ èŠããããŸãã
Error response from daemon: client version 1.43 is too old.
Minimum supported API version is 1.44, please upgrade your client to a newer version
æå° API ããŒãžã§ã³ãäžæžããã
ããäœãæå° API ããŒãžã§ã³ã§ dockerd ãèµ·åããã«ã¯ 2 ã€ã®æ¹æ³ããããŸããè¿œå æ å ±ã¯ãdocs.docker.com ã«ãããŸãã
dockerd ã®èµ·åæã«ãã©ã°ã䜿çšãã
DOCKER_MIN_API_VERSIONãåã®å€ã«èšå®ããŠdockerdãèµ·åããŸããäŸãã°ïŒ
DOCKER_MIN_API_VERSION=1.24 dockerd
JSON æ§æãã¡ã€ã«ã®äœ¿çš â daemon.json
daemon.jsonãã¡ã€ã«ã§min-api-versionãèšå®ããŸãã
{
  "min-api-version": "1.24"
}
containerd ã€ã¡ãŒãžã¹ãã¢ãããã©ã«ãã«ãªããŸã
ãã®å€æŽãè¡ã£ãçç±
Containerd ã©ã³ã¿ã€ã 㯠Docker Engine ã®ã³ã¢ ã³ã³ããŒãã³ããšããŠå§ãŸããåŸã«åå²ãããCloud Native Computing Foundation (CNCF) ã«å¯ä»ãããŸãããçŸåšã§ã¯ãæ¥çæšæºã®ã³ã³ããã©ã³ã¿ã€ã ãšããŠæ©èœããKubernetesãä»ã®å€ãã®ãã©ãããã©ãŒã ã匷åããŠããŸãã
Docker ã¯æ°å¹Žåã«ã³ã³ããå®è¡çšã« containerd ãå°å ¥ããŸããããã€ã¡ãŒãž ã¬ã€ã€ãŒã®ç®¡çã«ã¯ ã°ã©ã ãã©ã€ã㌠ã¹ãã¬ãŒãž ããã¯ãšã³ã ãåŒãç¶ã䜿çšããŸãããäžæ¹ãcontainerd ã¯ãã¢ãžã¥ãŒã«æ§ãããã©ãŒãã³ã¹ããšã³ã·ã¹ãã ã®èª¿æŽã®ããã«èšèšãããç¬èªã®ã€ã¡ãŒãžã³ã³ãã³ãã¹ãã¢ãšã¹ãããã·ã§ãããã¬ãŒã ã¯ãŒã¯ãé²åãããŸããã
å®å®æ§ã確ä¿ããããã«ãDocker ã¯æéã®çµéãšãšãã«ã³ã³ãã㌠ã€ã¡ãŒãž ã¹ãã¢ã« åŸã ã«ç§»è¡ ããŠããŸãããDocker Desktop ã¯ãæšå¹Žã®ã»ãšãã©ã®æéããã§ã« containerd ã€ã¡ãŒãž ã¹ãã¢ã ããã©ã«ã ãšããŠäœ¿çšããŠããŸããDocker Engine v29ã§ã¯ããã®ç§»è¡ã¯ Mobyãšã³ãžã³ã®ããã©ã«ãã«ãªãããšã§æ¬¡ã®ã¹ãããã«é²ã¿ãŸãã
ããã¯äœã§ãã
- Docker Engine v29以éã ã³ã³ããåãããã€ã¡ãŒãžã¹ãã¢ ã æ°èŠã€ã³ã¹ããŒã«ã®ã€ã¡ãŒãžã¬ã€ã€ãŒããã³ã³ã³ãã³ã管çã®ããã©ã«ããšãªããŸãã
- ã¬ã¬ã·ã°ã©ããã©ã€ããŒã¯åŒãç¶ã䜿çšã§ããŸãããçŸåšã¯éæšå¥šã§ããæ°èŠã€ã³ã¹ããŒã«ã¯ãåé¡ãçºçããå Žåã§ã Containerd ã€ã¡ãŒãžã¹ãã¢ããªããã¢ãŠãã§ããŸãã
ãªããããéèŠãªã®ã
- ç°¡çŽ åãããã¢ãŒããã¯ãã£: å®è¡ãšã¹ãã¬ãŒãžã®äž¡æ¹ã containerd ã䜿çšããããã«ãªããéè€ãšå éšã®è€éãã軜æžãããŸã
- 次ã®ãããªæ°æ©èœã®å¯èœæ§ãè§£ãæŸã¡ãŸãã
- ã¹ãããã·ã§ããã®ã€ãããŒã·ã§ã³
- ç»åã³ã³ãã³ãã®é å»¶ãã«
- ãªã¢ãŒãã³ã³ãã³ãã¹ãã¢
- ãã¢ããŒãã¢é åž
- ãšã³ã·ã¹ãã ã®é£æº: Docker Engine ã Kubernetes ãªã©ã®ã³ã³ããããŒã¹ã®ãã©ãããã©ãŒã ãšåæãããçžäºéçšæ§ãåäžãããŸãã
- å°æ¥æ§:ç»åã¬ã€ã€ãŒã®åŠçãšã©ã³ã¿ã€ã åäœã«ãããè¿ éãªã€ãããŒã·ã§ã³ãå¯èœã«ããŸã
Containerd ã€ã¡ãŒãžã¹ãã¢ã¯ãæ¢åã®ã¹ãã¬ãŒãžãã©ã€ããŒãšæ¯èŒããŠã³ã³ãã³ããšã¬ã€ã€ãŒã®ç®¡çã«å¯ŸããŠç°ãªãã¢ãããŒãããšã£ãŠããããããã®å€æŽã«ããæ··ä¹±ãçããå¯èœæ§ãããããšãçè§£ããŠããŸãã
ãããããã®å€åã¯ååããªãã®ã§ããããã«ãããããäžè²«æ§ããããã¢ãžã¥ãŒã«åãããäºæž¬å¯èœãªã³ã³ãã ãšã¯ã¹ããªãšã³ã¹ãå¯èœã«ãªããŸãã
ç§»è¡ãã¹
æç¢ºã«ããŠãããŸããããããã®å€æŽã¯æ°èŠã€ã³ã¹ããŒã«ã«ã®ã¿åœ±é¿ããŸããæ¢åã®ãŠãŒã¶ãŒã¯ containerd ã«åŒ·å¶ãããŸããããã ããä»ããç§»è¡ãéå§ã㊠ãªããã€ã³ããããšã¯ã§ããŸãã
ç§ãã¡ã¯ãããŒã ãæ¢åã®ã³ã³ãã³ãã containerd ã€ã¡ãŒãžã¹ãã¢ã«ç§»è¡ããŠç§»åããã®ã«åœ¹ç«ã€ç§»è¡ã¬ã€ãã«åãçµãã§ããŸãã
次ã®ã¹ããã
- ã°ã©ã ãã©ã€ã㌠ããã¯ãšã³ãã¯ãå°æ¥ã®ãªãªãŒã¹ã§åé€ãããäºå®ã§ãã
- Docker ã¯ãcontainerd ã®ãšã³ã·ã¹ãã ã®å šæ©èœã掻çšããŠãã€ã¡ãŒãž ã¹ã㢠ãšã¯ã¹ããªãšã³ã¹ãé²åããç¶ããŸãã
- å°æ¥çã«ã¯ãã³ã³ãã³ã管çã®åŒ·åããã«ãã¹ãããã·ã§ããã®ãµããŒãããã«/ããã·ã¥ ã¯ãŒã¯ãããŒã®é«éåãæåŸ ãããŸãã
MobyãGoã¢ãžã¥ãŒã«ã«ç§»è¡
ãã®å€æŽãè¡ã£ãçç±
Goã¢ãžã¥ãŒã«ã¯ 2019幎ããã³ãã¥ããã£æšæºã§ãããããããŸã§Mobyãããžã§ã¯ãã¯ã¬ã¬ã·ãŒãã³ããŒã·ã¹ãã ã䜿çšããŠããŸãããGoã¢ãžã¥ãŒã«ãåé¿ããããšã§ã以äžãäœæãããŸããã
- å·¥å ·ã®åæãåé¿ããããã®çµ¶ãéãªãã¡ã³ããã³ã¹ã®è§£çŽ
- ã³ã³ããªãã¥ãŒã¿ãŒã®ã¯ãŒã¯ãããŒãæ··ä¹±ããã
- æ°ãã Go ããŒã«ããã³ãšã³ã·ã¹ãã ã®å®è·µãšã®äºææ§ã®åé¡
ç°¡åã«èšãã°ãGo ã¢ãžã¥ãŒã«ã«æµæãç¶ããããšã¯ããã¹ãŠã®äººã®ç掻ãå°é£ã«ããŠããŸããã
ããã¯äœã§ãã
- Mobyã³ãŒãããŒã¹ã¯ãgo.modã䜿çšããŠå®å šã«ã¢ãžã¥ãŒã«ã«å¯Ÿå¿ããŸããã
- ããã¯ãããã¯ãªãŒã³ãªäŸåé¢ä¿ç®¡çãšãããŒã«ãšã³ã³ããªãã¥ãŒã¿ãŒã®çžäºéçšæ§ã®åäžãæå³ããŸãã
- å€éšã¯ã©ã€ã¢ã³ããAPI ã©ã€ãã©ãªãSDK ã¯ãMoby ã³ãŒãããŒã¹ã®äœ¿çšãšçµ±åã容æã§ããããšãããããŸãã
ããã§ãªããã®
- ããã¯ãŠãŒã¶ãŒåãã®æ©èœã§ã¯ãªããUI ãã³ãã³ãã®å€æŽã¯è¡šç€ºãããŸããã
- ãã ããDocker ã® Go API ã䜿çšããéçºè ã«ã¯åœ±é¿ããŸãã
Go éçºè ã«ãšã£ãŠéèŠ
ç¬èªã® Go ãããžã§ã¯ãã§ Docker ã¯ã©ã€ã¢ã³ããŸã㯠API ããã±ãŒãžã䜿çšããŠããå Žå:
- å€ãã¢ãžã¥ãŒã«ãã¹ github.com/docker/dockerã¯æŽæ°ãåä¿¡ããªããªããŸãã
- Docker Engine ãªãªãŒã¹ãææ°ã®ç¶æ ã«ä¿ã€ã«ã¯ãgithub.com/moby/moby ããã®ã€ã³ããŒãã«åãæ¿ããå¿ èŠããããŸãã
nftablesã®å®éšçãµããŒã
ãã®å€æŽãè¡ã£ãçç±
Linux äžã®ããªããžããã³ãªãŒããŒã¬ã€ãããã¯ãŒã¯ã®å ŽåãDocker Engine ã¯çŸåšããiptablesãããã³ãip6tablesãã䜿çšããŠãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ãäœæããŸãã
ã»ãšãã©ã®å Žåããããã®ã³ãã³ãã¯ãiptables-nftãããã³ãip6tables-nftãã«ãªã³ã¯ãããŠããŸãããã®ãããDocker ã®ã«ãŒã«ã¯èå°è£ã§ nftables ã«å€æãããŸãã
ãã ããOS ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ iptables ã®ãµããŒãã廿¢ããå§ããŠããŸããDocker Engineãç¬èªã®nftablesã«ãŒã«ãçŽæ¥äœæããææã¯éããŸããã
ããã¯äœã§ãã
iptables ã®ä»£ããã« nftables ã«ãŒã«ãäœæããããã®ãªããã€ã³ãµããŒãã
ã«ãŒã«ã¯æ©èœçã«ã¯åçã§ãããç¹ã«iptablesã§ãDOCKER-USERããã§ãŒã³ã䜿çšããå Žåã¯ã泚æãã¹ãéããããã€ããããŸãã
ãfirewalldãã䜿çšãããã¹ãã§ã¯ãiptables ã«ãŒã«ã¯ firewalld ã®éæšå¥šã®ãçŽæ¥ãã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠäœæãããŸããã«ãŒã«ã¯åå¥ã®ããŒãã«ã«ç·šæããããããããç¬èªã®ããŒã¹ãã§ãŒã³ãæã€ãããnftablesã§ã¯å¿ èŠãããŸãããDocker ã¯åŒãç¶ãããã€ã¹ã« firewalld ãŸãŒã³ãšããªã·ãŒãèšå®ããŸãããfirewalld ã®ãªããã¹ãã®å Žåãšåæ§ã«ãnftables ã«ãŒã«ãçŽæ¥äœæããŸãã
ããã§ãªããã®
ãã®åæããŒãžã§ã³ã§ã¯ãnftables ã®ãµããŒãã¯ãå®éšçãã§ããæ¬çªç°å¢ã§ã®ãããã€ã«ã¯æ³šæãå¿ èŠã§ãã
Swarm ã®ãµããŒãã¯ãå°æ¥ã®ãªãªãŒã¹ã§èšç»ãããŠããŸããçŸæç¹ã§ã¯ãSwarmãæå¹ã«ãªã£ãŠããããŒãã§Docker Engineã®nftablesãµããŒããæå¹ã«ããããšã¯ã§ããŸããã
å°æ¥ã®ãªãªãŒã¹ã§ã¯ãnftables ãããã©ã«ãã®ãã¡ã€ã¢ãŠã©ãŒã«ããã¯ãšã³ãã«ãªããiptables ã®ãµããŒãã¯éæšå¥šã«ãªããŸãã
ä»åŸã®ä»äº
èšç»ãããŠãã Swarm ãµããŒãã®è¿œå ã«å ããŠãå¹çåäžã®äœå°ããããŸãã
ããšãã°ãã«ãŒã«èªäœã¯ãnftables æ©èœãç¹ã«ããŒãã®ã»ãããããå€ãå©çšããããšãã§ããŸãã
ãããã®å€æŽã¯ãåãåã£ããã£ãŒãããã¯ã«åºã¥ããŠåªå é äœãä»ããããŸããè²¢ç®ãããå Žåã¯ããç¥ãããã ããã
詊ããŠã¿ãã
ãªãã·ã§ã³ --firewall-backend=nftables ã䜿çšã㊠dockerd ãéå§ããnftables ãµããŒããæå¹ã«ããŸãã
åèµ·ååŸããã¹ãã§IP転éãæå¹ã«ããå¿
èŠãããå ŽåããããŸãããDOCKER-USERãiptablesãã§ãŒã³ã䜿çšããŠããå Žåã¯ãç§»è¡ããå¿
èŠããããŸãã詳现ã«ã€ããŠã¯ããhttps://docs.docker.com/engine/network/firewall-nftablesããåç
§ããŠãã ããã
ãã£ãŒãããã¯ãåéããŠããŸããåé¡ãèŠã€ãã£ãå Žåã¯ã https://github.com/moby/moby/issues ãŸã§ãç¥ãããã ããã
Engine v29 ã®äœ¿çšéå§
åè¿°ã®ããã«ããã®æçš¿ã¯ããã¹ãã§çŽæ¥Docker Engine(Community Edition)ãå®è¡ããŠããLinuxãŠãŒã¶ãŒåãã§ããDocker Desktop ãŠãŒã¶ãŒã¯äœãããå¿ èŠã¯ãããŸãã â ãšã³ãžã³ã®æŽæ°ã¯ãä»åŸã® Desktop ãªãªãŒã¹ã«èªåçã«å«ãŸããŸãã
ãã¹ãã« Docker Engine ãã€ã³ã¹ããŒã«ããããæ¢åã®ã€ã³ã¹ããŒã«ãæŽæ°ãããããã«ã¯ãç¹å®ã® OS ã® ã¬ã€ãã«åŸã£ãŠ ãã ããã
ãã®ãªãªãŒã¹ã®è©³çްã«ã€ããŠã¯ã以äžãåç §ããŠãã ããã