Articles

Pași Post-instalare Pentru Linux

timp estimat de citire: 15 minute

această secțiune conține proceduri opționale pentru configurarea gazdelor Linux pentru a lucra mai bine cu Docker.

gestionați Docker ca utilizator non-root

demonul Docker se leagă la un soclu Unix în loc de un port TCP. Implicit, soclul Unix este deținut de utilizator rootși alți utilizatori îl pot accesa doarutilizândsudo. Demonul Docker rulează întotdeauna ca utilizatorroot.

dacă nu doriți să prefațați comandadocker cusudo, creați un grup Unix numitdocker și adăugați utilizatori la acesta. Când demonul Docker pornește, acestacreează un soclu Unix accesibil membrilor grupului docker.

avertisment

docker grupul acordă privilegii echivalente curootutilizator. Pentru detalii cu privire la modul în care acest impact de securitate în sistemul dvs., seeDocker Daemon Attack Surface.

notă:

pentru a rula Docker fără privilegii de root, seeRun demonul Docker ca un utilizator non-root (modul Rootless).

pentru a crea grupuldocker și adăugați utilizatorul:

  1. creați grupuldocker.

    $ sudo groupadd docker
  2. adăugați utilizatorul ladocker grup.

    $ sudo usermod -aG docker $USER
  3. Deconectați-vă și conectați-vă din nou, astfel încât membrii grupului dvs. să fie reevaluați.

    dacă testați pe o mașină virtuală, poate fi necesar să reporniți mașina virtuală pentru ca modificările să aibă efect.

    pe un mediu desktop Linux, cum ar fi X Windows, deconectați-vă complet de la sesiune și apoi conectați-vă din nou.

    pe Linux, puteți rula, de asemenea, următoarea comandă pentru a activa modificările la grupuri:

    $ newgrp docker 

  4. verificați dacă puteți rula dockercomenzi fără sudo.

    $ docker run hello-world

    această comandă descarcă o imagine de test și o rulează într-un container. Când rulează containerul, acesta imprimă un mesaj informativ și iese.

    dacă ați rulat inițial comenzi Docker CLI folosind sudo înainte de a adăuga utilizatorul dvs. la grupul docker, este posibil să vedeți următoarea eroare,ceea ce indică faptul că directorul ~/.docker/ a fost creat cu permisiuni incorecte datorităsudo comenzi.

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

    pentru a remedia această problemă, fie eliminați directorul ~/.docker/ (este recreat automat, dar orice setări personalizatesunt pierdute), fie schimbați proprietatea și permisiunile utilizând următoarele comenzi:

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

configurați Docker pentru a porni la pornire

cele mai actuale distribuții Linux (RHEL, CentOS, Fedora, Debian, Ubuntu 16.04 andhigher) utilizați systemd pentru a gestiona ce servicii încep când sistemulboots. Pe Debian și Ubuntu, serviciul Docker este configurat să pornească la bootîn mod implicit. Pentru a porni automat Docker și Containerd la boot pentru altedistros, utilizați comenzile de mai jos:

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

pentru a dezactiva acest comportament, utilizați disable în schimb.

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

dacă trebuie să adăugați un Proxy HTTP, setați un alt director sau partiție pentru fișierele runtime de blocare sau faceți alte personalizări, vedețipersonalizați opțiunile daemonului systemd Docker.

utilizați un alt motor de stocare

pentru informații despre diferitele motoare de stocare, consultați driverele de stocare.Motorul de stocare implicit și lista motoarelor de stocare acceptate depind dedistribuția Linux a gazdei dvs. și driverele de kernel disponibile.

configurează driverul de logare implicit

Docker oferă capacitatea de a colecta și vizualiza datele de jurnal din toate containerele care rulează pe o gazdă printr-o serie de drivere de logare. Driverul de logare implicit, json-file, scrie datele de logfișiere formatate JSON pe sistemul de fișiere gazdă. În timp, aceste fișiere jurnal se extindîn dimensiune, ceea ce duce la epuizarea potențială a resurselor de disc.

pentru a atenua astfel de probleme, fie configurațijson-file driverul de logare pentru a activa rotația jurnalului, utilizați driverul de logare analternativ, cum ar fi driverul de logare „local” care efectuează rotația jurnalului în mod implicit, fie utilizați un driver de logare care trimite jurnalele către un agregator de logare la distanță.

configurați unde demonul Docker ascultă conexiunile

în mod implicit, demonul Docker ascultă conexiunile pe un soclu UNIX pentru a acceptacereri de la clienți locali. Este posibil să se permită Docker să accepte requestsfrom gazde la distanță prin configurarea-l pentru a asculta pe o adresă IP și port, precum și socket UNIX. Pentru informații mai detaliate despre această opțiune de configurareaveți o privire la secțiunea” legați Docker la o altă gazdă / port sau un soclu unix” dinarticolul de referință Docker CLI.

asigurați-vă conexiunea

înainte de a configura Docker să accepte conexiuni de la gazde la distanță, este extrem de important să înțelegeți implicațiile de securitate ale deschiderii docker în rețea. Dacă nu se iau măsuri pentru a asigura conexiunea, este posibil ca utilizatorii non-root de la distanță să obțină acces root pe gazdă. Pentru mai multe informații despre cum să utilizați certificatele TLS pentru a securiza această conexiune, consultați acest articol despre cum să protejați soclul daemon Docker.

Configurarea Docker pentru a accepta conexiuni la distanță se poate face cu docker.servicefișier unitate systemd pentru distribuții Linux folosind systemd, cum ar fi versiunile recente de RedHat, CentOS, Ubuntu și SLES, sau cu daemon.json fișier care esterecomandat Pentru Linux distribuții care nu utilizează systemd.

systemd vs daemon.JSON

Configurarea Docker pentru a asculta conexiuni folosind atâtsystemd fișier unitate șidaemon.json fișier provoacă un conflict care împiedică Docker de pornire.

Configurarea accesului la distanță cu fișierul unității systemd

  1. utilizați comandasudo systemctl edit docker.service pentru a deschide un fișier de suprascriere pentrudocker.service într-un editor de text.

  2. adăugați sau modificați următoarele linii, înlocuind propriile valori.

    ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
  3. salvați fișierul.

  4. Reîncărcați configurația systemctl.

     $ sudo systemctl daemon-reload
  5. Restart Docker.

    $ sudo systemctl restart docker.service

  6. verificați dacă modificarea a fost onorată prin revizuirea ieșirii netstatpentru a confirma dockerd ascultă pe portul configurat.

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

Configurarea accesului la distanță cu daemon.JSON

  1. setați hosts matrice în /etc/docker/daemon.json pentru a conecta la socket UNIX și o adresă IP, după cum urmează:

    { "hosts": }
  2. reporniți Docker.

  3. verificați dacă modificarea a fost onorată prin revizuirea ieșirii netstatpentru a confirma dockerd ascultă pe portul configurat.

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

activați IPv6 pe demonul Docker

pentru a activa IPv6 pe demonul Docker, consultați suport IPv6 activat.

depanarea

Compatibilitatea nucleului

Docker nu poate rula corect dacă nucleul dvs. este mai vechi decât versiunea 3.10 sau dacă lipsesc unele module. Pentru a verifica compatibilitatea kernel-ului, puteți descărca șirulați scriptul check-config.sh.

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

scriptul funcționează numai pe Linux, nu pe macOS.

nu se poate conecta la demonul Docker

Dacă vedeți o eroare, cum ar fi următoarele, Clientul Docker poate fi configuratpentru a se conecta la un demon Docker pe o altă gazdă, și că gazda nu poate fi accesibil.

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

pentru a vedea la ce gazdă este configurat clientul dvs. să se conecteze, verificați valoarea variabilei DOCKER_HOST din mediul dvs.

$ env | grep DOCKER_HOST

dacă această comandă returnează o valoare, Clientul Docker este setat să se conecteze la daemonul aDocker care rulează pe acea gazdă. Dacă este dezactivat, Clientul Docker este setat laconectați-vă la demonul Docker care rulează pe gazda locală. Dacă este setat în eroare,utilizați următoarea comandă pentru a dezactiva:

$ unset DOCKER_HOST

poate fi necesar să editați mediul în fișiere precum ~/.bashrc sau~/.profile pentru a preveni DOCKER_HOST variabilă de la a fi seterroneously.

dacăDOCKER_HOST este setat conform destinației, verificați dacă demonul Docker rulează pe gazda de la distanță și dacă un firewall sau o întrerupere a rețelei nu vă împiedică să vă conectați.

probleme de redirecționare IP

dacă configurați manual rețeaua utilizândsystemd-network cusystemdversiunea 219 sau o versiune ulterioară, este posibil ca containerele Docker să nu vă poată accesa rețeaua.Începând cu systemd versiunea 220, setarea de redirecționare pentru o anumită rețea(net.ipv4.conf.<interface>.forwarding) este implicit dezactivată. Această setareprevine redirecționarea IP. De asemenea, intră în conflict cu comportamentul lui Docker de a activa setarea net.ipv4.conf.all.forwarding în containere.

pentru a rezolva acest lucru pe RHEL, CentOS sau Fedora, editați fișierul <interface>.networkîn /usr/lib/systemd/network/ pe gazda Docker(ex: /usr/lib/systemd/network/80-container-host0.network) și adăugați blocul următor în secțiune.

...IPForward=kernel# ORIPForward=true

această configurație permite redirecționarea IP din container conform așteptărilor.

resolver DNS găsit în resolv.conf și containerele nu o pot folosi

sistemele Linux care utilizează o interfață grafică au adesea un manager de rețea care rulează, care utilizează o instanțădnsmasq care rulează pe o adresă de loopback, cum ar fi 127.0.0.1 sau127.0.1.1 pentru a cache cererile DNS și adaugă această intrare/etc/resolv.conf. Serviciuldnsmasq accelerează căutările upDNS și oferă, de asemenea, servicii DHCP. Această configurație nu funcționează într-un container Docker care are propriul spațiu de nume de rețea, deoarece containerul Docker rezolvă adrese de loopback, cum ar fi 127.0.0.1 și este foarte puțin probabil să ruleze un server DNS pe cont propriuadresa loopback.

dacă Docker detectează că niciun server DNS la care se face referire în/etc/resolv.conf nu este un server DNS complet funcțional, apare următorul avertisment și Docker folosește serverele publicDNS furnizate de Google la8.8.8.8 și8.8.4.4 pentru rezoluția DNS.

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

dacă vedeți acest avertisment, verificați mai întâi dacă utilizați dnsmasq:

$ ps aux |grep dnsmasq

dacă containerul dvs. trebuie să rezolve gazdele care sunt rețea, serverele de nume publice nu sunt adecvate. Aveți două opțiuni:

  • puteți specifica un server DNS pentru Docker de utilizat sau
  • puteți dezactiva dnsmasq în NetworkManager. Dacă faceți acest lucru, NetworkManageradds adevărat DNS nameserver la /etc/resolv.conf, dar pierzi theposibile beneficii ale dnsmasq.

trebuie doar să utilizați una dintre aceste metode.

specificați serverele DNS pentru Docker

locația implicită a fișierului de configurare este/etc/docker/daemon.json. Youpoate schimba locația fișierului de configurare folosind--config-filePavilion daemon. Documentația de mai jos presupune că fișierul de configurare este localizatla /etc/docker/daemon.json.

  1. creați sau editați fișierul de configurare Docker daemon, care implicit la/etc/docker/daemon.json fișier, care controlează Docker daemonconfiguration.

    $ sudo nano /etc/docker/daemon.json
  2. adăugați odns cheie cu una sau mai multe adrese IP ca valori. Dacă fișierul areconținutul existent, trebuie doar să adăugați sau să editați linia dns.

    { "dns": }

    dacă serverul DNS intern nu poate rezolva adresele IP publice, includeți cel puțin un server DNS care poate, astfel încât să vă puteți conecta la Docker Hub și astfel containerele dvs. pot rezolva numele de domenii internet.

    Salvați și închideți fișierul.

  3. reporniți demonul Docker.

    $ sudo service docker restart
  4. verificați dacă Docker poate rezolva adrese IP externe prin încercarea de a trage animage:

    $ docker pull hello-world
  5. dacă este necesar, verificați dacă containerele Docker pot rezolva un nume de gazdă intern prin 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

Disable dnsmasq

Ubuntu

dacă preferați să nu modificați configurația daemonului Docker pentru a utiliza o anumită adresă IP, urmați aceste instrucțiuni pentru a dezactiva dnsmasq în NetworkManager.

  1. editați fișierul/etc/NetworkManager/NetworkManager.conf.

  2. comentați linia dns=dnsmasqadăugând un caracter # la începutul liniei.

    # dns=dnsmasq

    Salvați și închideți fișierul.

  3. reporniți atât NetworkManager, cât și Docker. Ca alternativă, puteți repornisistemul dvs.

    $ sudo restart network-manager$ sudo restart docker

RHEL, CentOS, sau Fedora

pentru a dezactiva dnsmasq pe RHEL, CentOS, sau Fedora:

  1. dezactiva dnsmasq serviciu:

    $ sudo service dnsmasq stop$ sudo systemctl disable dnsmasq
  2. configurați serverele DNS manual utilizând documentația de înregistrare.

permiteți accesul la API-ul de la distanță printr-un firewall

dacă rulați un firewall pe aceeași gazdă pe care o executați Docker și doriți să accesați API-ul de la distanță Docker de la o altă gazdă și accesul de la distanță este activat, aveți nevoiepentru a configura firewall-ul pentru a permite conexiunile primite pe portul Docker,care implicit este 2376 dacă transportul criptat TLS este activat sau 2375în caz contrar.

două daemon firewall comune suntufw (Firewall necomplicat) (adeseori folosit pentru sistemele Ubuntu) și firewalld (adesea folosit pentru sistemele bazate pe RPM). Consultați documentația pentru sistemul de operare și paravanul de protecție, darurmătoarele informații vă pot ajuta să începeți. Aceste opțiuni sunt fairlypermissive și poate doriți să utilizați o configurație diferită care blochează yoursystem jos mai mult.

  • UFW: setațiDEFAULT_FORWARD_POLICY="ACCEPT" în configurația dvs.

  • firewalld: adăugați reguli similare cu următoarele la politica dvs. (una pentru cererile primite și una pentru cererile trimise). Asigurați-vă că numele interfeței și numele lanțului sunt corecte.

    <direct> </direct>

nucleul dvs. nu acceptă capacitățile limită de swap cgroup

pe gazdele Ubuntu sau Debian, este posibil să vedeți mesaje similare cu următoarele când lucrați cu o imagine.

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

acest avertisment nu apare pe sistemele bazate pe RPM, care permit implicit aceste capacități.

dacă nu aveți nevoie de aceste capacități, puteți ignora avertismentul. Puteți activa aceste capabilități pe Ubuntu sau Debian urmând aceste instrucțiuni. Memoryand swap accounting suportă o regie de aproximativ 1% din totalul memoriei disponibile și o degradare generală a performanței de 10%, chiar dacă Docker nu rulează.

  1. Conectați-vă la gazda Ubuntu sau Debian ca utilizator cusudo privilegii.

  2. editați fișierul /etc/default/grub. Adăugați sau editați linia GRUB_CMDLINE_LINUX pentru a adăuga următoarele două perechi cheie-valoare:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

    Salvați și închideți fișierul.

  3. actualizare GRUB.

    $ sudo update-grub

    Dacă fișierul de configurare GRUB are o sintaxă incorectă, o eroare occurs.In în acest caz, repetați pașii 2 și 3.

    modificările intră în vigoare atunci când sistemul este repornit.

  • aruncați o privire la modulele de instruire Get started pentru a afla cum să construiți o imagine și să o rulați ca aplicație containerizată.
  • examinați subiectele din dezvoltarea cu Docker pentru a afla cum să construiți noi aplicații folosind Docker.

Docker, Docker documentație, cerințe, apt, instalare, ubuntu, instala, dezinstala, upgrade, actualizare