- Praktický úvod do Docker a kontejnerů (1) – od instalace po první kontejnery
- Praktický úvod do Docker a kontejnerů (2) – propojování
- Praktický úvod do Docker a kontejnerů (3) – víc najednou aneb něco užitečného s Docker Compose
- Praktický úvod do Docker a kontejnerů (4) – jak z nich získat maximum
- Praktický úvod do Docker a kontejnerů (5) – Docker Machine
- Praktický úvod do Docker a kontejnerů (6) – cluster hostitelů s Docker Swarm
- Praktický úvod do Docker a kontejnerů (7) – scheduler v Docker Swarm
- Praktický úvod do Docker a kontejnerů (8) – váš vlastní registr obrazů
- Praktický úvod do Docker a kontejnerů (9) – multi-host networking
- Praktický úvod do Docker a kontejnerů (10) – Windows kontejnery s Docker API
- Praktický úvod do Docker a kontejnerů (11) – Windows kontejnery s PowerShell
- Praktický úvod do Docker a kontejnerů (12) – Windows Hyper-V kontejner
- Praktický úvod do Docker a kontejnerů (13) – Swarm mode, service, balancing, scaling (v1.12)
V předchozích dílech jsme si sami vytvořili VM, která fungovala jako náš Docker host systém. Dnes si to zjednodušíme a použijeme Docker Machine pro vytváření a instalaci Docker systémů.
Docker Machine
Nebyl by problém vytvářet si VM s Docker hosty ručně. Stačí vytvořit nějaký diskový obraz a ten používat. Nicméně skákat pokaždé přímo do SSH konzole jednotlivých VM a tam provádět docker operace není zrovna přehledné, takže byste možná chtěli překopírovat bezpečnostní klíče a třeba na svém notebooku si držet přístupové údaje. Díky tomu byste mohli používat docker klienta (tedy docker příkazy tak jak jste je zkoušeli v předchozích částech) z jednoho místa vůči vzdálenému Docker Host. Navíc v image budete mít konkrétní verzi Docker, která bude zastarávat (s tím je vhodné se vypořádat třeba přes Packer, tedy nasadit automatizovanou tvorbu imagů pro různá prostředí). To už je ale docela dost práce – vytvářet VM, aktualizovat diskový obraz, opisovat si IP adresy, kopírovat klíče a vést si to někde v souboru, který musíte udržovat aktuální. Místo toho elegantně použijeme Docker Machine.
Ještě než opravdu začneme, řekněme si co Docker Machine není! Není to správa vašich Docker hostů jako celek, jako cluster. Rozhodně to není “OpenStack pro Docker”, ale ani “vCenter pro Docker”. Pokud se chceme chovat k množině Docker hostů jako ke cluster kontejnerových zdrojů, potřebujeme Docker Swarn, Kubernetes, Mesos nebo ještě lépe kompletní PaaS jako je Cloud Foundry. O těch někdy jindy.
Drivery
Hezkou vlastností Docker Machine je princip driverů. Tedy způsob, jakým tento nástroj alokuje zdroje, tedy vytváří Docker host servery (ať už virtuální VM či fyzické stroje), je řešen driverem. V naší dnešní ukázce se zaměříme na VirtualBox (otevřená virtualizační technologie ideální na notebook) ve Windows prostředí. Stejně tak ale existují drivery pro public cloud providery jako jsou Amazon, Microsoft Azure, Rack space nebo Digital Ocean. Můžete použít ovladače pro VMware vSphere nebo Microsfot Hyper-V. My se na cloudsvět (v dalších článcích mimo tento seriál) zaměříme ještě na dvě zajímavé možnosti. Tou první bude driver pro OpenStack, kdy přímo z Docker Machine můžete vytvářet Docker hosty včetně přidělení SSH klíčů a dalších příjemných vlastností. Tou druhou je driver pro OneView. Díky němu dokážete přes Docker Machine zajišťovat provisioning fyzických (bare metal) Docker hostů. OneView profil nastaví fyzickému serveru parametry dle vaší volby (například do jaké sítě má být připojen) a HPE ICsp (případně Image Streamer v HPE Synergy) nainstaluje základní OS, do kterého Docker Machine dotáhne vše potřebné.
Instalace
Fajn, chceme Docker Machine, co pro to uděláme? Výhodou celého Dockeru je, že je napsaný v moderním programovacím jazyce Go, který je jednoduchý, velmi svižný a kompilovaný, takže pokud už máte v Linux nainstalovaný Docker, je dohrání docker-machine jen záležitost nakopírování další binárky. My se ale zaměříme na prostředí Windows.
Nejprve doporučuji nainstalovat ručně VirtualBox (otevřenou virtualizační platformu, velmi vhodnou pro notebook a často využívanou s nástroji jako je Docker nebo Vagrant) z virtualbox.org. V posledních verzích přichází tato platforma s NDIS6 drivery pro síťařinu a na nekterých Windows 8.1 a Windows 10 to zatím nefunguje nejlépe. Mě se osvědčilo spustit instalaci s definicí staršího typu driverů, které fungují bezvadně.
VirtualBox-5.0.12-104815-Win.exe -msiparams NETWORKTYPE=NDIS5
Teď si nainstalujeme Docker Toolbox pro Windows, tedy vše potřebné k tomu, abyste mohli používat Docker a jeho nástroje z Windows. Stáhněte si z https://www.docker.com/docker-toolbox
V tomto labu budeme pracovat z příkazové řádky. Klidně to může být cmd, ale pokud netrváte na tom, že co bolí, to sílí, použijte nějakou lepší konzoli (já mám nejraději moc pěknou a otevřenou https://conemu.github.io/).
Provisioning nového Docker stroje
Pokud nám vyhovují výchozí nastavení, stačí jednoduše proces zahájit. Ve výchozím stavu si každá VM vezme 1 GB paměti (což asi pro vás nebude problém) a vytvoří lokální host-only adaptér s rozsahem 192.168.99.1/24 (pokud je to v konfliktu s něčím jiným, musíte si změnit). VM bude naté používat NAT interface pro připojení k Internetu (které je nutné, takže mějte svůj notebook připojen třeba na WiFi).
docker-machine create -d virtualbox mujDocker Running pre-create checks... Creating machine... (mujDocker) Creating VirtualBox VM... (mujDocker) Creating SSH key... (mujDocker) Starting VM... Waiting for machine to be running, this may take a few minutes... Machine is running, waiting for SSH to be available... Detecting operating system of created instance... Detecting the provisioner... Provisioning with boot2docker... Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon... Checking connection to Docker... Docker is up and running! To see how to connect Docker to this machine, run: docker-machine env mujDocker
Pokud chcete, podívejte se do GUI VirtualBox – najdete tam novou spuštěnou VM.
Operaci můžete opakovat kolikrát chcete a vytvořit si třeba dva další Docker host.
Ovládání hostiletů
Docker client umožňuje nejen ovládat lokální systém (tak jak jsme to dělali uvnitř Linux VM), ale i vzdálený (a to klidně i z Windows). Docker Machine vám umožňuje například vypsat proměnné prostředí vhodné právě pro načtení informací o připojení do konkrétního hostitele.
docker-machine env mujDocker export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH="C:\Users\kubicat\.docker\machine\machines\mujDocker" export DOCKER_MACHINE_NAME="mujDocker" # Run this command to configure your shell: # eval "$(docker-machine env mujDocker)"
Jak vidíte, je to pro Linux a stačí jednoduše načíst a používáte docker příkazy. Stejně tak můžete například využít SSH přímo do systému a tak podobně.
V případě Windows musíme příkazy poupravit pro tuto platformu.
set DOCKER_HOST=tcp://192.168.99.101:2376 set DOCKER_CERT_PATH=C:\Users\kubicat\.docker\machine\machines\mujDocker
Teď už můžeme používat docker příkazy tak, jak v minulých příkladech. Díky načteným proměnným se ovšem provádí na Linuxovém nodu mujDocker. Zkuste třeba spustit kontejner a vypsat jejich seznam.
docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b901d36b6f2f: Pull complete 601 B/601 BB 0a6ba66e537a: Pull complete 32 B/32 BB Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 Status: Downloaded newer image for hello-world:latest Hello from Docker. This message shows that your installation appears to be working correctly. ... To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash ... docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 75ac0088fdc6 hello-world "/hello" 35 seconds ago Exited (0) 34 seconds ago cranky_dubinsky
Pokud máte hostitelů víc, načtěte si proměnné pro druhý a ovládáte ten.
Na závěr pojďme hostitele zlikvidovat. Nejprve ho můžeme korektně zastavit.
docker-machine stop mujDocker (mujDocker) Stopping VM...
A pak smazat.
docker-machine rm mujDocker Do you really want to remove "mujDocker"? (y/n): y Successfully removed mujDocker