Docker

Open-source software pro správu softwarových kontejnerů

Docker je nástroj pro virtualizaci na úrovni operačního systému tvořený sadou produktů umožňujících automatizované nasazování softwarových aplikací v odlehčených kontejnerech, které lze konzistentně spouštět na různých výpočetních platformách. Byl vydán v roce 2013 a je stále vyvíjen společností Docker, Inc. Platforma obsahuje volné i placené verze.

Docker
Logo
Ukázka příkazů Docker Engine
Ukázka příkazů Docker Engine
VývojářDocker, Inc.
První vydání20. března 2013; před 4901 dny[1]
Aktuální verze29.7.2 (6. srpna 2026)
Operační systémLinux, Windows, MacOS
Platformax86_64
architektura ARM
IBM S/390
Vyvíjeno vGo[2]
Typ softwaruVirtualizace na úrovni operačního systému
LicenceLicence Apache 2.0
Webwww.docker.com
Repozitář github.com/moby/moby
Některá data mohou pocházet z datové položky.

Jádro softwaru, které umožňuje běh a správu těchto kontejnerů, se nazývá Docker Engine.

Struktura

editovat
Docker může používat různá rozhraní pro přístup k virtualizačním vlastnostem linuxového jádra.[3]

Kontejner obsahuje pouze požadované aplikace a pro ně specifické soubory, ale neobsahuje (virtualizovaný) operační systém. Tím je výrazně snížena režie na rozdíl od klasických virtuálních strojů. Výhodou Dockeru je proto mnohem menší velikost, větší flexibilita a tím nižší náklady na provoz. Nevýhodou je naopak svázanost s hostujícím operačním systémem, který je přímo využíván pro běh aplikací v kontejnerech.

Docker implementuje vysokoúrovňové API, které poskytuje odlehčené kontejnery pro izolované spouštění procesů.[4] Kontejnery jsou navzájem izolované a obsahují vlastní software spolu s knihovnami a konfiguračními soubory. Vzájemně mohou komunikovat pouze dobře definovanými kanály.[5] Protože veškeré kontejnery sdílejí služby jednoho jádra operačního systému, používají méně prostředků než virtuální stroje.[6]

Docker umožňuje zabalit aplikace a jejich závislosti do virtuálního kontejneru, které v principu může běžet na libovolném počítači s Linuxem, Microsoft Windows nebo MacOS. Díky tomu mohou aplikace běžet na různých místech – lokálně ve firmě, ve veřejném cloudu (decentralizované zpracování, distribuované výpočty, a cloud computing) nebo v soukromém cloudu.[7] Při běhu na Linuxu Docker využívá vlastnosti izolace prostředků linuxového jádra (cgroups a jmenné prostory jádra) a sjednocující souborové systémy (např. OverlayFS),[8] aby bylo možné spuštět kontejnery na jednom linuxovém systému pro snížení režie při vytváření a udržování virtuálních strojů. Na macOSu Docker používá pro běh kontejnerů linuxový virtuální stroj.[9]

Protože Docker kontejnery jsou odlehčené, může na jediném serveru nebo virtuálním stroji běžet několik kontejnerů současně.[10] Podle analýzy z roku 2018 je při typickém použití Dockeru spuštěno v průměru osm kontejnerů na jednom serveru, a čtvrtina dotazovaných organizací provozuje 18 nebo více kontejnerů na jednom serveru.[11] Docker může být provozován dokonce na jednodeskových počítačích, jako je Raspberry Pi.[12]

Podpora jmenných prostorů v linuxovém jádře zajišťuje z větší části[13] izolaci aplikace od pracovního prostředí, včetně stromu procesů, sítě, uživatelských identifikátorů a systémů souborů, zatímco vlastnost jádra cgroups poskytuje nástroje pro nastavení limitů používané paměti a procesoru.[14] Od verze 0.9 obsahuje Docker vlastní komponentu (nazývanou libcontainer), která vedle používání abstraktního virtualizačního rozhraní libvirt, LXC a systemd-nspawn umožňuje používat virtualizační prostředky poskytované přímo linuxovým jádrem.[15][3][7][16]

Komponenty

editovat

Docker jako nástroj pro nabízení služeb sestává ze tří složek:

Software
docker démon dockerd je persistentní proces, který spravuje dockerové kontejnery a zpracovává kontejner objekty. Démon naslouchá požadavky, které jsou posílaný přes Docker Engine API.[17][18] docker klient program, nazývaný docker, poskytuje programy pro prostředí příkazového řádku (CLI) to umožňuje uživatelé to interagují s Docker démoni.[17][19]
Objekty
Docker objekty jsou různé entity používané pro assemble aplikace v Docker. Hlavní třídy of Docker objekty jsou obrazy, kontejnery, a služby.[17]
  • Dockerový kontejner je standardizované zapouzdřené prostředí pro běh aplikací.[20] Kontejner lze spravovat pomocí Docker API nebo z příkazového řádku.[17]
  • Dockerová image je pouze pro čtení šablona používané vytvořit kontejnery. Obrázky se používají pro uložit a ship aplikace.[17]
  • Docker služba umožňuje škálování kontejnerů na více Docker démonů. Výsledkem je takzvaný swarm, sada spolupracujících démonů, kteří komunikují přes Docker API.[17]
Registry
Dockerové registry je repozitář Dockerových imagí. Docker klienti se připojují na registry, aby si stáhly (“pull“) obrazy pro své použití nebo aby uploadovali (“push“) obrazy, které vytvořily. Registry mohou být veřejné nebo soukromé. Hlavním veřejným registrem je Docker Hub, který je mplicitním registrem, na němž Docker vyhledává obrazy.[17][21] Docker registry umožňují také vytváření notifikací upozorňujících na události.[22]

Dockerfile je textový soubor, který obvykle definuje různé aspekty Docker obrazu: linuxovou distribuci, příkazy pro instalaci běhového prostředí programovacího jazyka a zdrojový kód aplikace.

Příklad Dockerfile:[23]

ARG CODE_VERSION=latest
FROM ubuntu:${CODE_VERSION}
COPY ./examplefile.txt /examplefile.txt
ENV MY_ENV_VARIABLE="example_value"
RUN apt-get update

# Mount a directory from the Docker volume
# Note: This is usually specified in the 'docker run' command.
VOLUME ["/myvolume"]

# Expose a port (22 for SSH)
EXPOSE 22

Docker Compose je nástroj pro definování a spouštění dockerových aplikace s více kontejnery.[24] Pro popis konfigurace služeb aplikace používá YAML soubory a vytvoření a start všech kontejnerů provádí jediným příkazem. Příkazem docker compose je možné aplikovat příkazy současně na několik kontejnerů; například sestavovat obrazy, škálovat kontejnery, spouštět zastavené kontejnery, apod.[25] Příkazy související s manipulací s obrazy nebo interaktivní možnosti pro uživatele nejsou v Docker Compose relevantní, protože se vztahují pouze na jeden kontejner.[26] Soubor docker-compose.yml slouží k definování služeb aplikace a obsahuje různé konfigurační volby. Například volba build definuje konfigurační volby, jako je např. cesta k souboru Dockerfile, volba command umožňuje zadat příkazy, které mají přednost před implicitními příkazy Dockeru, atd.[27] První veřejná beta verze Docker Compose 0.0.1 byla vydána 21. prosince 2013.[28] První verze zralá pro produkční nasazení (1.0) byla vydána 16. října 2014.[29]

Docker Swarm poskytuje nativní funkčnost pro vytváření clusterů dockerových kontejnerů, díky nimž se skupina dockerových strojů stane jedinou virtuální Docker Engine.[30] V Dockeru od verze 1.12 je Swarm režim zabudován do Docker Engine.[31] Příkaz docker swarm[32] umožňuje uživatelům spouštět Swarm kontejnery, vytvářet tokeny pro vyhledávání, vypisovat uzly v clusteru, atd.[33] Příkaz docker node umožňuje uživateli spouštět různé příkazy pro řízení uzlů ve swarmu, například zobrazit uzly ve swarmu, aktualizovat uzly nebo odstranit uzly ze swarmu.[34] Docker spravuje swarmy pomocí konsenzuálního algoritmu Raft. Podle algoritmu Raft je pro provedení aktualizace nutné, aby s ní souhlasila většina uzlů ve swarmu.[35][36] Vedle příkazu docker swarm existuje příkaz docker stack pro flexibilnější řízení služeb swarmu. Může používat konfigurační soubor velmi podobný docker-compose.yml, s několika drobnými rozdíly. Použití docker stack místo docker compose nabízí několik výhod, jako je například možnost spravovat swarm cluster na několika strojích nebo schopnost pracovat s docker secret v kombinaci s docker context, což je funkce umožňující provádět příkazy Dockeru na vzdáleném hostiteli a tím umožňující vzdálenou správu kontejnerů.

Docker Volume zajišťuje nezávislou persistenci dat tím, že umožňuje, aby data zůstala zachována i po smazání nebo znovuvytvoření kontejneru.[37]

Historie

editovat

Projekt Docker zahájil Solomon Hykes ve Francii jako interní projekt společnosti dotCloud Inc. poskytující služby „Platform as a service“ (platforma jako služba, PaaS).[38] Společnost dotCloud Inc. založil Kamel Founadi, Solomon Hykes a Sebastien Pahl[39] v roce 2010 během letního inkubátoru Y Combinator pro startupy. Společnost zahájila činnost v roce 2011, a v roce 2013 se přejmenovala na Docker Inc.[40]

Veřejnosti byl Docker představen na konferenci PyCon v Santa Claře v roce 2013[41] a v březnu 2013 byly zveřejněny jeho zdrojové texty.[4] V té době používal jako výchozí spouštěcí prostředí LXC. O rok později, s vydáním verze 0.9, bylo LXC nahrazeno vlastní komponentou libcontainer napsanou v jazyce Go.[15][42]

V roce 2017 Docker spustil projekt Moby pro otevřený výzkum a vývoj.[43] V březnu 2026 se Docker objevil na titulní stránce časopisu Communications of the ACM v retrospektivním článku věnovaném uplynulému desetiletí.[44]

Docker je v informatice název pro otevřený software (open source projekt), jehož cílem je poskytnout jednotné rozhraní pro izolaci aplikací do kontejnerů v prostředí macOS, Linuxu i Windows („odlehčená virtualizace“).

Přijetí

editovat
  • 19. září 2013: Red Hat a Docker oznámily spolupráci okolo Fedora, Red Hat Enterprise Linux (RHEL) a OpenShift.[45]
  • 15. října 2014: Microsoft oznámil integraci Docker Engine do Windows Serveru, a nativní podporu pro roli Docker klienta ve Windows.[46][47]
  • listopad 2014: ohlášeny kontejnerové služby Docker pro Amazon Elastic Compute Cloud (EC2).[48]
  • 10. listopadu 2014: Docker oznámil partnerství s Stratoscale.[49]
  • 4. prosince 2014: společnost IBM oznámil strategické partnerství s Dockerem, která umožňuje Docker integrovat lépe do IBM Cloudu.[50]
  • 22. června 2015: Docker a několik dalších společností oznámilo, že pracují na novém standard pro softwarové kontejnery nezávislém na výrobci a operačním systému.[51][52]
  • prosinec 2015: Oracle Cloud po získání startupu StackEngine oznámil podporu Docker kontejnerů.[53]
  • Březen 2016: vydána beta verze Dockeru pro Mac a Windows.[54][55]
  • Duben 2016: nezávislý dodavatel softwaru Windocks uvolnil port Dockeru s otevřeným zdrojovým textem projekt pro Windows podporující Windows Server 2012 R2 a Server 2016, se všemi edicemi SQL Serveru od verze 2008.[56]
  • Květen 2016: byla publikována analýza, podle které jsou hlavními přispivateli do Dockeru následující organizace: Docker team, Cisco Systems, Google, Huawei, IBM, Microsoft a Red Hat.[57]
  • 8. června 2016: Microsoft oznámil, že Docker lze nativně používat na Windows 10.[58]
  • Leden 2017: Analýza profilu LinkedIn uvádí, že přítomnost Dockeru během roku 2016 vzrostla o 160 %.[59]
  • 6. května 2019: Microsoft oznámil druhou verzi Windows Subsystem for Linux (WSL). Docker, Inc. oznámil, že zahájil práci na verzi Dockeru pro Windows, která poběží ve WSL 2.[60] To znamenalo, že Docker bude možné provozovat na Windows 10 Home (do té doby jej bylo možné provozovat na Windows Pro a Enterprise, protože používal Hyper-V).
  • Srpen 2020: Microsoft oznámil backport WSL2 na Windows 10 verze 1903 a 1909 (dříve byl WSL2 dostupný pouze na verzi 2004)[61] a vývojáři Dockeru oznámili jeho dostupnost na těchto platformách.[62]
  • Srpen 2021: Docker ukončil volný Docker Desktop pro Windows a MacOS pro větší firemní zákazníky a nahradil svůj Free Plan za Personal Plan. Dostupnost Docker Engine na Linuxu zůstává nezměněna.[63]
  • Prosinec 2023: Docker získal AtomicJar za rozšíření svých testovacích funkcionalit.[64]

Model licencování

editovat
  • Docker Engine má licenci Apache Licence 2.0. Docker Desktop distribuuje některé komponenty, které jsou licencovány pod GNU General Public License. Docker Desktop není volně použitelný pro velké společnosti.[65]
  • Soubory dockerfile je možné licencovat pod licencemi s otevřeným zdrojovým textem. Takové licence platí pouze na Dockerfile, ale ne na obraz kontejneru.[66]

Reference

editovat

V tomto článku byl použit překlad textu z článku Docker (software) na anglické Wikipedii.

  1. BARBIER, Julien. It's Here: Docker 1.0 [online]. Docker, Inc., 2014-06-09 [cit. 2019-09-30]. Dostupné online.
  2. Docker source code [online]. Docker, Inc., 2015-10-12 [cit. 2015-10-24]. Dostupné online.
  3. 1 2 Docker 0.9: Introducing execution drivers and libcontainer [online]. Docker, Inc., 2014-03-10 [cit. 2015-01-20]. Dostupné online.
  4. 1 2 AVRAM, Abel. Docker: Automated and Consistent Software Deployments [online]. 2013-03-27 [cit. 2013-08-09]. Dostupné online.
  5. Use containers to Build, Share and Run your applications [online]. Dostupné online.
  6. What is a Container? [online]. Docker, Inc. [cit. 2019-05-13]. Dostupné online.
  7. 1 2 NOYES, Katherine. Docker: A 'Shipping Container' for Linux Code [online]. 2013-08-01 [cit. 2013-08-09]. Dostupné v archivu pořízeném dne 2013-08-08.
  8. Select a storage driver documentation [online]. [cit. 2026-07-19]. Dostupné online.
  9. Get started with Docker for Mac [online]. Docker, Inc. [cit. 2018-09-27]. Dostupné online.
  10. K., Chris. Lightweight Windows containers: Using Docker process isolation in Windows 10 [online]. 2019-01-14 [cit. 2019-08-02]. „odlehčenější“ skutečné kontejnery (prostřednictvím tzv. izolace procesů), kde kontejnerizované procesy běží přímo na hostitelském systému – všechny procesy na hostiteli i v kontejnerech sdílejí stejné jádro systému Windows. Funguje to podobně jako kontejnery v systému Linux.. Dostupné online.
  11. 8 surprising facts about real Docker adoption [online]. June 2018 [cit. 2019-09-04]. Dostupné online.
  12. GUPTA, Devender. How to Install Docker on Raspberry Pi [online]. 2022-10-13 [cit. 2022-10-15]. Dostupné v archivu pořízeném z originálu dne 2025-02-14. (anglicky)
  13. WALSH, Dan. Yet Another Reason Containers Don't Contain: Kernel Keyrings [online]. 2014-09-15 [cit. 2015-04-13]. Dostupné online.
  14. Limit a container's resources [online]. [cit. 2018-03-07]. Dostupné online.
  15. 1 2 VAUGHAN-NICHOLS, Steven J. Docker libcontainer unifies Linux container powers [online]. 2014-06-11 [cit. 2014-07-30]. Dostupné online.
  16. libcontainer – reference implementation for containers [online]. Docker, Inc. [cit. 2014-07-30]. Dostupné online.
  17. 1 2 3 4 5 6 7 Docker overview [online]. Docker, Inc. [cit. 2018-02-26]. Dostupné online.
  18. dockerd [online]. Docker, Inc. [cit. 2018-02-26]. Dostupné online.
  19. Use the Docker command line [online]. Docker, Inc. [cit. 2018-02-26]. Dostupné online.
  20. The Docker Ecosystem: An Introduction to Common Components [online]. [cit. 2018-02-26]. Dostupné online.
  21. About Registry [online]. Docker, Inc. [cit. 2018-02-26]. Dostupné online.
  22. Work with notifications [online]. 2019-03-02. Dostupné online.
  23. Dockerfile reference [online]. 2023-11-14 [cit. 2023-11-30]. Dostupné online. (anglicky)
  24. Overview of Docker Compose [online]. Docker, Inc. [cit. 2017-07-06]. Dostupné online.
  25. Compose command-line reference [online]. Docker, Inc. [cit. 2018-02-28]. Dostupné online.
  26. Orchestrate Containers for Development with Docker Compose. blog.codeship.com. 2015-05-27. Dostupné online [cit. 2018-02-28].
  27. Compose file version 3 reference [online]. Docker, Inc. [cit. 2018-02-28]. Dostupné online.
  28. FIRSHMAN, Ben. Release 0.0.1 [online]. Docker, Inc., 2013-12-21. Dostupné online.
  29. PRASAD, Aanand. Release 1.0.0 [online]. Docker, Inc., 2014-10-16. Dostupné online.
  30. 8 Container Orchestration Tools to Know [online]. 2017-04-12 [cit. 2017-07-06]. Dostupné online.
  31. Docker Swarm [online]. Docker, Inc. [cit. 2017-07-06]. Dostupné online.
  32. Docker swarm [online]. 2021-06-04. Dostupné online.
  33. Swarm command-line reference [online]. Docker, Inc. [cit. 2018-02-28]. Dostupné online.
  34. docker node [online]. [cit. 2018-02-28]. Dostupné online.
  35. Docker Swarm 101 [online]. [cit. 2018-02-28]. Dostupné online.
  36. Raft Consensus Algorithm [online]. [cit. 2018-02-28]. Dostupné online.
  37. Docker Desktop & Docker Guides [online]. 2021-04-25 [cit. 2021-04-25]. Dostupné v archivu pořízeném dne 2021-04-25. (anglicky)
  38. One home for all your apps [online]. [cit. 2014-05-08]. Dostupné v archivu pořízeném dne 2014-05-17.
  39. HYKES, Solomon. Au Revoir [online]. 2018-03-28 [cit. 2021-01-23]. Dostupné online.
  40. About the dotCloud Platform [online]. [cit. 2019-06-23]. Dostupné v archivu pořízeném dne 2014-07-02.
  41. The future of Linux Containers [online]. 2013-03-21 [cit. 2018-07-13]. Dostupné online.
  42. SWAN, Chris. Docker drops LXC as default execution environment [online]. 2014-03-13 [cit. 2015-01-20]. Dostupné online.
  43. Demystifying the Relationship Between Moby & Docker – Welcome to Collabnix [online]. 2017-05-06. Dostupné online.
  44. MADHAVAPEDDY, Anil; SCOTT, David J.; CORMACK, Justin. A Decade of Docker Containers. Communications of the ACM. 2026-03-01, roč. 69, čís. 3, s. 56–65. Dostupné online. ISSN 0001-0782. doi:10.1145/3761803. (anglicky)
  45. DotCloud Pivots And Wins Big With Docker, The Cloud Service Now Part Of Red Hat OpenShift [online]. 2013-09-19 [cit. 2014-01-20]. Dostupné online.
  46. FOLEY, Mary Jo. Docker container support coming to Microsoft's next Windows Server release [online]. 2014-10-15 [cit. 2014-10-16]. Dostupné online.
  47. GUTHRIE, Scott. Docker and Microsoft: Integrating Docker with Windows Server and Microsoft Azure [online]. Microsoft, 2014-10-15 [cit. 2015-01-12]. Dostupné online.
  48. BARR, Jeff. Amazon EC2 Container Service (ECS) – Container Management for the AWS Cloud [online]. 2014-11-13 [cit. 2017-04-29]. Dostupné online.
  49. RATH, John. Stratoscale Raises $32M to Build Docker-Supporting OpenStack Clouds on Commodity Servers [online]. 2014-11-10 [cit. 2016-01-03]. Dostupné online.
  50. IBM and Docker Announce Strategic Partnership to Deliver Enterprise Applications in the Cloud and On Prem [online]. IBM, 2014-12-04 [cit. 2015-04-20]. Dostupné v archivu pořízeném dne 2015-01-10.
  51. LARDINOIS, Frederic. Docker, CoreOS, Google, Microsoft, Amazon And Others Come Together To Develop Common Container Standard [online]. 2015-06-22 [cit. 2015-08-08]. Dostupné online.
  52. SILUK, Shirley. Docker, Tech Giants Team on Open Container Project [online]. 2015-06-22 [cit. 2015-08-08]. Dostupné v archivu pořízeném dne 2015-09-23.
  53. MCLAUGHLIN, Kevin. Oracle Acquires Docker Container Startup StackEngine, Plans Austin-Based Cloud Computing Center [online]. 2015-12-22 [cit. 2022-01-13]. Dostupné online.
  54. Docker for Mac and Windows Beta: the simplest way to use Docker on your laptop. blog.docker.com. 2016-03-24. Dostupné v archivu pořízeném z originálu dne 2016-03-24. (anglicky)
  55. MADHAVAPEDDY, Anil; SCOTT, David J.; FERRIS, Patrick; GIBB, Ryan T.; GAZAGNAIRE, Thomas. Functional Networking for Millions of Docker Desktops (Experience Report). Proceedings of the ACM on Programming Languages. 2025-08-05, roč. 9, čís. ICFP, s. 597–615. Dostupné online. ISSN 2475-1421. doi:10.1145/3747525. (anglicky)
  56. YEGULALP, Serdar. Windocks does what Docker and Microsoft can't do [online]. 2016-04-04 [cit. 2018-10-27]. Dostupné online.
  57. Docker – Updated project statistics [online]. [cit. 2016-08-22]. Dostupné online.
  58. SARKAR, Dona. Announcing Windows 10 Insider Preview Build 14361 [online]. Microsoft, 2016-06-08 [cit. 2016-06-19]. Dostupné online.
  59. MULLANY, Michael. Docker Momentum Analysis 2016 [online]. [cit. 2017-01-05]. Dostupné online.
  60. VAUGHAN-NICHOLS, Steven. Docker embraces Windows Subsystem for Linux 2 [online]. CBS Interactive, 2019-06-18. Dostupné online.
  61. WSL 2 Support is coming to Windows 10 Versions 1903 and 1909 [online]. 2020-08-20 [cit. 2020-08-21]. Dostupné online. (anglicky)
  62. Docker Desktop & WSL 2 - Backport Update [online]. 2020-08-20 [cit. 2020-08-21]. Dostupné online. (anglicky)
  63. CAREY, Scott. Docker Desktop is no longer free for enterprise users [online]. 2021-08-31 [cit. 2021-10-18]. Dostupné online. (anglicky)
  64. MILLER, Ron. Docker acquires AtomicJar, a testing startup that raised $25M in January [online]. 2023-12-11 [cit. 2023-12-13]. Dostupné online. (anglicky)
  65. Get Docker [online]. 2024-09-11. Dostupné online.
  66. Docker containers: What are the open source licensing considerations? [online]. [cit. 2026-07-03]. Dostupné online. (anglicky)

Související články

editovat

Externí odkazy

editovat