Articles

Post-instalační kroky pro Linux

Odhadovaná doba čtení: 15 minut

Tato část obsahuje volitelné postupy pro konfiguraci Linux hostitelé workbetter s Docker.

Správa Docker jako non-root uživatele

Docker daemon váže na Unix socket, místo portu TCP. Podle defaultže unix socket je vlastněn uživatelem root a ostatní uživatelé k němu mají přístup pouze pomocí sudo. Démon Docker vždy běží jako uživatel root.

Pokud nechcete, aby předmluvě docker příkaz sudo vytvořit Unixgroup nazývá docker přidat uživatele na to. Když se spustí démon Docker, vytvoří soket Unix přístupný členům skupiny docker.

Upozornění

docker skupina uděluje oprávnění ekvivalent rootuživatel. Podrobnosti o tom, jak to ovlivňuje zabezpečení ve vašem systému, Seedocker Daemon Attack Surface.

Poznámka:

spustit Docker bez oprávnění uživatele root, seeRun Docker daemon jako non-root uživatel (Rootless režimu).

vytvořit docker skupiny a přidat své uživatele:

  1. Vytvořit docker skupina.

    $ sudo groupadd docker
  2. přidejte uživatele do skupiny docker.

    $ sudo usermod -aG docker $USER
  3. odhlaste se a přihlaste se zpět, aby bylo členství ve skupině přehodnoceno.

    při testování na virtuálním počítači může být nutné restartovat virtuální stroj, aby se změny projevily.

    v desktopovém prostředí Linuxu, jako je X Windows, se zcela odhlaste a poté se znovu přihlaste.

    v systému Linux můžete také spustit následující příkaz k aktivaci změn skupin:

    $ newgrp docker 
  4. Ověřte, že můžete spustit docker příkazy bez sudo.

    $ docker run hello-world

    Tento příkaz stáhne testovací obraz a spustí jej v kontejneru. Po spuštění kontejneru vytiskne informační zprávu a ukončí.

    Pokud jste původně běžel Docker CLI příkazy pomocí sudo před addingyour uživatele do docker skupiny, může se zobrazit následující chybová zpráva,která označuje, že ~/.docker/ adresář byl vytvořen withincorrect oprávnění v důsledku sudo příkazy.

    WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied

    tento problém vyřešit, odeberte ~/.docker/ adresář(to je znovu automaticky, ale žádné vlastní settingsare ztratil), nebo změnit jeho oprávnění a vlastnictví pomocí následujících příkazů:

    $ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R

Konfigurovat Docker start na boot

Většina současných distribucí Linuxu (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) používání systemd spravovat služby, které se spustí při systemboots. V Debianu a Ubuntu je služba Docker nakonfigurována tak, aby se spouštěla ve výchozím nastavení. Automaticky spustit Docker a Containerd na startu pro otherdistros, použijte příkazy níže:

$ sudo systemctl enable docker.service$ sudo systemctl enable containerd.service

zakázat toto chování, použijte disable místo.

$ sudo systemctl disable docker.service$ sudo systemctl disable containerd.service

Pokud potřebujete přidat HTTP Proxy, nastavit jiný adresář nebo oddíl pro theDocker runtime soubory, nebo provést jiné úpravy, seecustomize vaše systemd Docker daemon možnosti.

použijte jiný úložný motor

Pro informace o různých úložných motorech, ovladačích seeStorage.Výchozí modul úložiště a seznam podporovaných modulů úložiště závisí na distribuci Linuxu vašeho hostitele a dostupných ovladačích jádra.

Konfigurovat protokolování výchozí ovladač

Docker poskytuje možnost shromažďovat a zobrazení dat protokolu z všechny kontejnery běží na hostiteli prostřednictvím řady oflogging ovladače. Výchozí ovladač protokolování, json-file, zapíše soubory protokolu ve formátu tojson do hostitelského souborového systému. Postupem času se tyto soubory protokolu rozšiřujíve velikosti, což vede k potenciálnímu vyčerpání diskových prostředků.

Ke zmírnění těchto problémů, a to buď nakonfigurovat json-file přihlášení řidiče toenable log rotace, použijte alternativní přihlášení driversuch jako „místní“ přihlášení ovladač, který provádí rotace log ve výchozím nastavení, nebo použijte přihlášení řidiče, který sendslogs do vzdáleného protokolování agregátor.

nakonfigurujte, kde démon Docker poslouchá připojení

ve výchozím nastavení démon Docker poslouchá připojení na Unixovém soketu, aby přijal dotazy od místních klientů. Je možné povolit Docker přijímat requestsfrom vzdálených hostitelů konfigurací poslouchat na IP adresu a port stejně jako unix socket. Podrobnější informace o této možnosti konfiguracepodívejte se na sekci „Bind Docker to another host/port or a unix socket“ referenčního článku Docker CLI.

Zabezpečené připojení

Před konfigurací Docker, aby bylo možné přijímat připojení od vzdálených hostitelů je kriticky důležité, aby youunderstand bezpečnostní důsledky otevření docker k síti. Pokud nebudou podniknuty kroky k zabezpečení připojení, je možné pro dálkové non-root uživatelům získat root přístup na hostitele. Další informace o tom, jak používat certifikáty TLS k zabezpečení tohoto připojení, naleznete v tomto článku o ochraně soketu démona Dockeru.

Konfigurace Docker přijímat vzdálená připojení může být provedeno s docker.servicesystemd unit soubor pro Linux distribucí pomocí systemd, jako je poslední verze RedHat, CentOS, Ubuntu a SLES, nebo s daemon.json soubor, který isrecommended pro Linux distribucí, které nemají používat systemd.

systemd vs daemon.json

Konfigurace Docker poslouchat připojení jak pomocí systemd soubor, jednotka a daemon.json soubor příčin konfliktu, který zabraňuje Docker od spuštění.

Konfigurace vzdáleného přístupu s systemd unit souboru

  1. Použijte příkaz sudo systemctl edit docker.service otevřít přepsat soubor docker.service v textovém editoru.

  2. přidejte nebo upravte následující řádky nahrazením vlastních hodnot.

    ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
  3. uložte soubor.

  4. znovu načtěte konfiguraci systemctl.

     $ sudo systemctl daemon-reload
  5. restartujte Docker.

    $ sudo systemctl restart docker.service
  6. Zkontrolujte, zda tato změna byla poctěn tím, že přezkoumání výstup netstat potvrdit dockerd naslouchá na nastaveném portu.

    $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

konfigurace vzdáleného přístupu pomocí démona.json

  1. Nastavte hosts pole /etc/docker/daemon.json připojení k UNIX socketu a IP adresu, a to následovně:

    { "hosts": }
  2. Restartujte Docker.

  3. Zkontrolujte, zda tato změna byla poctěn tím, že přezkoumání výstup netstat potvrdit dockerd naslouchá na nastaveném portu.

    $ sudo netstat -lntp | grep dockerdtcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd

Povolit IPv6 na Docker daemon

povolit IPv6 na Docker daemon, seeEnable podporou IPv6.

odstraňování problémů

Kompatibilita jádra

Docker nelze spustit správně, pokud je jádro starší než verze 3.10 nebo pokud chybí některé moduly. Chcete-li zkontrolovat kompatibilitu jádra, můžete si stáhnout aspusťte skript check-config.sh.

$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh$ bash ./check-config.sh

skript funguje pouze na Linuxu, nikoli na macOS.

Nelze se připojit k Docker daemon

Pokud uvidíte chybu, jako je například následující, vaše Docker klienta může být configuredto připojení k Docker daemon na jiném hostiteli, a že host nemusí bereachable.

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

zjistit, které host váš klient je nakonfigurován tak, aby připojit, zkontrolujte hodnotu z DOCKER_HOST proměnné ve vašem prostředí.

$ env | grep DOCKER_HOST

Pokud tento příkaz vrátí hodnotu, Docker klienta je nastavena pro připojení k aDocker daemon běží na tomto hostiteli. Pokud není nastaven, je klient Docker nastavenpřipojte se k démonovi Docker běžícímu na místním hostiteli. Pokud je nastavena na chyby,použijte následující příkaz k odstavení:

$ unset DOCKER_HOST

možná Budete muset upravit své prostředí v souborech, např. ~/.bashrc nebo~/.profile, aby se zabránilo DOCKER_HOST proměnná z je seterroneously.

Pokud DOCKER_HOST je nastaveno jak má, ověřte, že Docker daemon je runningon vzdáleného hostitele, a že brána firewall nebo výpadku sítě není prevence od připojení.

IP forwarding problémy

Pokud jste ručně nastavit síť pomocí systemd-networksystemdverze 219 nebo vyšší, Docker kontejnery nemusí být schopen získat přístup do vaší sítě.Začínající systemd verze 220, nastavení přesměrování pro danou síť(net.ipv4.conf.<interface>.forwarding) výchozí nastavení na vypnuto. Toto nastavenízabraňuje předávání IP. Je také v rozporu s dockerovým chováním enablingthe net.ipv4.conf.all.forwarding nastavení v kontejnerech.

Chcete-li vyřešit tento na RHEL, CentOS nebo Fedora, upravit <interface>.networksoubor /usr/lib/systemd/network/ na Docker hostitele(např.: /usr/lib/systemd/network/80-container-host0.network) a přidejte následující blok v oddíl.

...IPForward=kernel# ORIPForward=true

tato konfigurace umožňuje předávání IP z kontejneru podle očekávání.

DNS resolver nalezen v resolv.conf a kontejnery nemůžu použít

Linuxové systémy, které používají GUI mají často network manager systémem, který používádnsmasq instance běží na adresu zpětné smyčky, například 127.0.0.1 nebo127.0.1.1 do mezipaměti DNS žádosti, a přidá tuto položku do/etc/resolv.conf. Služba dnsmasq urychluje vyhledávání upDNS a také poskytuje služby DHCP. Tato konfigurace nefunguje v kontejneru Docker, který má vlastní jmenný prostor sítě, protože kontejner Docker řeší adresy zpětné smyčky, jako je 127.0.0.1 a je velmi nepravděpodobné, že by server DNS provozoval na své vlastní adrese loopback.

Pokud se Docker zjistí, že žádný server DNS uvedené v /etc/resolv.conf je fullyfunctional DNS server, následující varování se vyskytuje, a Docker používá publicDNS servery poskytované společností Google v 8.8.8.88.8.4.4 pro rozlišení DNS.

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containerscan't use it. Using default external servers : 

Pokud vidíte toto varování, nejprve zkontrolujte, zda používáte dnsmasq:

$ ps aux |grep dnsmasq

Pokud váš kontejner se musí vyřešit hostitelů, které jsou uvnitř vaší sítě, veřejnou nameservery jsou adekvátní. Máte dvě možnosti:

  • můžete zadat DNS server pro Docker k použití, nebo
  • můžete zakázat dnsmasq v Networkmanageru. Pokud to uděláte, NetworkManageradds vaše pravda DNS nameserver /etc/resolv.conf, ale ztratíte to, aby případné výhody dnsmasq.

stačí použít jednu z těchto metod.

Zadejte DNS servery pro Docker

výchozí umístění konfiguračního souboru je /etc/docker/daemon.json. Můžete změnit umístění konfiguračního souboru pomocí příznaku démona --config-file. Níže uvedená dokumentace předpokládá, že konfigurační soubor je lokalizovánat /etc/docker/daemon.json.

  1. Vytvořte nebo upravte Docker daemon configuration file, které výchozí hodnota je/etc/docker/daemon.json soubor, který řídí Docker daemonconfiguration.

    $ sudo nano /etc/docker/daemon.json
  2. přidejte klíč dns s jednou nebo více IP adresami jako hodnotami. Pokud soubor máexistující obsah, stačí přidat nebo upravit řádek dns.

    { "dns": }

    Pokud vaše vnitřní DNS server nemůže vyřešit veřejnou IP adresy, obsahovat alespoň jeden server DNS, který může, takže se můžete připojit k Docker Hub a aby vaše kontejnery lze vyřešit internetových doménových jmen.

    Uložte a zavřete soubor.

  3. restartujte démona Dockeru.

    $ sudo service docker restart
  4. ověřte, že Docker dokáže vyřešit externí IP adresy pokusem vytáhnout animage:

    $ docker pull hello-world
  5. Pokud je to nutné, ověřte, že Docker kontejnery lze vyřešit vnitřní hostnameby ping.

    $ docker run --rm -it alpine ping -c4 <my_internal_host>PING google.com (192.168.1.2): 56 data bytes64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms

Zakázat dnsmasq

Ubuntu

Pokud nechcete změnit Docker daemon konfiguraci použít specificIP adresu, postupujte podle pokynů zakázat dnsmasq v Networkmanageru.

  1. upravte soubor /etc/NetworkManager/NetworkManager.conf.

  2. Komentář dns=dnsmasq řádek po přidání # znak počátkem line.

    # dns=dnsmasq

    Uložte a zavřete soubor.

  3. restartujte NetworkManager i Docker. Jako alternativu můžete restartovat počítačváš systém.

    $ sudo restart network-manager$ sudo restart docker
RHEL, CentOS nebo Fedora

zakázat dnsmasq na RHEL, CentOS nebo Fedora:

  1. Zakázat dnsmasq služby:

    $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
  2. nakonfigurujte servery DNS ručně pomocí dokumentace Hat.

Povolit přístup ke vzdálené API prostřednictvím brány firewall

Pokud spustíte firewall na stejném hostiteli, jak si spustit Docker a chcete accessthe Docker Remote API od jiného hostitele a vzdálený přístup je povolen, budete potřebovat nakonfigurovat firewall povolit příchozí připojení na Docker port,které výchozí hodnota je 2376 pokud TLS šifrované dopravy je povoleno nebo 2375jinak.

dva běžné démony firewallu jsouufw (nekomplikovaný Firewall) (často používaný pro systémy Ubuntu) a firewalld (často používaný pro systémy založené na RPM). Nahlédněte do dokumentace operačního systému a brány firewall, alenásledující informace vám mohou pomoci začít. Tyto možnosti jsou fairlypermissive a možná budete chtít použít jinou konfiguraci, která uzamkne yoursystem dolů více.

  • UFW: nastavte DEFAULT_FORWARD_POLICY="ACCEPT" ve vaší konfiguraci.

  • firewalld: přidejte do svých zásad pravidla podobná následujícím (jedno pro příchozí požadavky a jedno pro odchozí požadavky). Ujistěte se, že názvy rozhranía názvy řetězců jsou správné.

    <direct> </direct>

Vaše jádro nepodporuje cgroup swap omezení schopnosti

Na Ubuntu nebo Debian hostitelů, můžete vidět zprávy podobné následující whenworking s obrazem.

WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

toto varování se nevyskytuje v systémech založených na RPM, které ve výchozím nastavení umožňují tyto možnosti.

pokud tyto funkce nepotřebujete, můžete varování ignorovat. Tyto funkce Můžete povolit v Ubuntu nebo Debianu podle těchto pokynů. Paměť a swap účetnictví účtuje režijní asi 1% z celkového počtu k dispozici paměť 10% snížení celkového výkonu, i když Docker není spuštěna.

  1. přihlaste se do hostitele Ubuntu nebo Debianu jako uživatel s oprávněními sudo.

  2. upravte soubor /etc/default/grub. Přidat nebo upravit GRUB_CMDLINE_LINUX lineto přidat následující dva páry klíč-hodnota:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

    Uložte a zavřete soubor.

  3. aktualizovat GRUB.

    $ sudo update-grub

    Pokud vaše GRUB konfigurační soubor má nesprávné syntaxe, dojde k chybě.V tomto případě, opakujte kroky 2 a 3.

    změny se projeví po restartování systému.

  • podívejte se na začínáme vzdělávacích modulů se naučit, jak vybudovat image a spustit to jako kontejnerové aplikace.
  • Přečtěte si témata v Develop with Docker a naučte se, jak vytvářet nové aplikace pomocí Docker.

Docker, Docker dokumentace, požadavky, apt, instalace, ubuntu, instalace, odinstalovat, upgrade, aktualizace