Oprettelse af Docker-billeder. Docker container management: grundlæggende funktioner

Hjælp med Docker-image- og containerstyringskommandoer.

Betingelser

Billede er en statisk build baseret på et specifikt OS.

Beholder- dette er en kørende billedforekomst.

Tilladelser til at køre docker

For at køre Docker-containere under din bruger (uden sudo), skal du føjes til den relevante gruppe:

Sudo usermod -aG docker YOU_USER

Docker service

Docker service management:

Sudo service docker start|stop|genstart|status sudo genstart docker # alias

Billeder

Liste over tilgængelige billeder:

Docker billeder

Download billedet (eller hele lageret) fra det officielle register (billedlager):

Docker pull ubuntu:14.04

Se billedoplysninger:

Docker inspicerer ubuntu

Slet billede:

Docker commit CONTAINER_ID IMAGE_NAME

Containere

Opmærksomhed!

Efter start af Docker-containeren vil tjenester/dæmoner (såsom SSH, Supervisor og andre) ikke starte automatisk! Jeg brugte flere timer på at fejlfinde fejlen: " ssh_exchange_identification: læs: Forbindelse nulstillet af peer", når du forsøger at oprette forbindelse til containeren via SSH. Men det viste sig, at sshd-dæmonen ikke startede. Du bliver nødt til manuelt at starte de nødvendige dæmoner eller supervisor, efter at containeren er startet:

Docker exec CONTAINER_ID bash -c "service ssh start"

Liste over alle containere (kører og stoppede):

Docker ps -a

Fjern container(e):

Docker rm CONTAINER_ID CONTAINER_ID

Slet alle containere:

Docker rm $(docker ps -aq)

Opret og kør en Docker-container med Ubuntu 14.04 i interaktiv tilstand (åbn skallen på denne container):

Docker run -it ubuntu bash docker run [indstillinger] billede [kommando] -i Interaktiv tilstand, hold STDIN åben -t Tildel/opretter en pseudo-TTY, der vedhæfter stdin og stdout --name Containernavn i stedet for ID -w Angiv arbejdsmappe ( --workdir) -e Indstil en miljøvariabel i containeren -u Bruger:gruppe, under hvilken containeren skal køres -v Monter en fil eller mappe for værtssystemet i containeren -p Videresend porten(e) af container -<порт хост-системы>:<порт контейнера>(--publish=) --entrypoint Erstat standardkommandoen fra ENTRYPOINT Dockerfilen

Bemærk

Tryk på Ctr + P + Ctrl + Q for at frakoble TTY uden at stoppe beholderen.

Opret og kør en Docker-container i dæmontilstand med SSH-portvideresendelse:

Docker run -itd -p 127.0.0.1:221:22 ubuntu

Opret og kør en container, og slet derefter denne container efter stop (nyttigt til fejlretning):

Docker run -i -t --rm ubuntu bash

Start en stoppet container interaktivt:

Docker start -i CONTAINER_ID

Opret forbindelse til den dæmoniserede container:

Docker vedhæft CONTAINER_ID

Docker-kommandoer

Anvendelse: docker COMMAND docker daemon [ --help | ... ] docker [ --hjælp | -v | --version ] En selvforsynende køretid for containere. Indstillinger: --config=~/.docker Placering af klientkonfigurationsfiler -D, --debug=false Aktiver fejlretningstilstand --disable-legacy-registry=false Kontakt ikke ældre registre -H, --host= Daemon socket( s) for at oprette forbindelse til -h, --help=false Udskriftsbrug -l, --log-level=info Indstil logningsniveauet --tls=false Brug TLS; underforstået af --tlsverify --tlscacert=~/.docker/ca.pem Tillidscertifikater, der kun er underskrevet af denne CA --tlscert=~/.docker/cert.pem Sti til TLS-certifikatfil --tlskey=~/.docker/ key.pem Sti til TLS-nøglefil --tlsverify=false Brug TLS og bekræft fjernbetjeningen -v, --version=false Udskriv versionsoplysninger og afslut Kommandoer: vedhæft Vedhæft til en kørende container build Byg et billede fra en Dockerfile commit Opret en nyt billede fra en containers ændringer cp Kopier filer/mapper mellem en container og det lokale filsystem opret Opret en ny container diff Undersøg ændringer på en containers filsystemhændelser Få realtidshændelser fra serveren exec Kør en kommando i en kørende container eksport Eksporter en containers filsystem som en tar-arkivhistorik Vis historikken for et billede billeder Import af listebilleder Importer indholdet fra en tarball for at oprette et filsystem billedinfo Vis systemdækkende information inspicér Returner lavniveauoplysninger på en container eller et billede dræb Dræb en kørende containerindlæsning Indlæs et billede fra et tar-arkiv eller STDIN-login Registrer eller log ind på et Docker-registreringslogout Log ud fra en Docker-registreringslogs Hent logfilerne for et containernetværk Administrer Docker-netværk pause Sæt alle processer i en containerport på pause Listeporttilknytninger eller en specifik mapping for CONTAINEREN ps Listecontainere pull Træk et billede eller et lager fra et registreringsdatabase-push Skub et billede eller et lager til et registreringsdatabase omdøb Omdøb en container genstart Genstart en container rm Fjern en eller flere containere rmi Fjern en eller flere billeder køres Kør en kommando i en ny container gem Gem et eller flere billeder i et tar-arkiv søgning Søg i Docker Hub efter billeder start Start en eller flere stoppede containerstatistik Vis en live stream af container(e) ressourceforbrugsstatistik stop Stop et kørende containermærke Tag et billede ind i et lager øverst Vis de kørende processer for en container. Genoptag Genoptag alle processer i en containervolumen Administrer Docker-volumener vent Bloker indtil en container stopper, og udskriv derefter dens exitkode Kør "docker COMMAND --help" for mere information om en kommando.

Docker er et populært værktøj, der gennem brug af containere giver alt, hvad du behøver for at køre applikationer. Ved at bruge Docker-containere kan du være sikker på, at din applikation kører det samme på enhver maskine, du kører den på.

I denne vejledning lærer du om forholdet mellem containere og Docker-billeder, og hvordan du installerer, starter, stopper og fjerner containere.

Anmeldelse

Docker billede kan opfattes som en skabelon, der bruges til at oprette containere. Billeder starter typisk med et rodfilsystem, som derefter er lagdelt med forskellige ændringer og deres tilsvarende startparametre. I modsætning til typiske Linux-distributioner indeholder et Docker-image normalt kun de dele, der er nødvendige for at køre applikationen. Billeder har ingen status og ændres ikke. Det ville være mere præcist at sige, at de er udgangspunktet, grundlaget for Docker-containere.

Billederne kommer til live i det øjeblik, du udsteder docker run-kommandoen - den opretter straks en container ved at tilføje et nyt læs-skrive-lag oven på billedet. Denne kombination af skrivebeskyttede lag (med et læse-skrive-lag tilføjet på toppen) er også kendt som UnionFS, et filsystem, der kaskaderer union-mounts af filsystemer. Når der foretages en ændring af en eksisterende fil i en kørende container, kopieres filen fra det skrivebeskyttede lag til det læse-skrive-lag, hvor ændringerne anvendes. Og nu er den originale fil skjult af læse-skriveversionen, men den er ikke slettet. Sådanne ændringer i skrive- og læseniveauer findes kun inden for en given individuel beholder. Når en container slettes, går alle ændringer også tabt (medmindre de blev gemt).

Arbejde med containere

Hver gang du bruger kommandoen docker run, oprettes en ny container ud fra det billede, du angiver. Mere specifikke eksempler vil blive diskuteret nedenfor.

Trin 1: Opret to containere

Docker run-kommandoen nedenfor opretter en ny container, der vil bruge Ubuntu-billedet som sin base. -t switchen vil give terminalen, og -i vil give muligheden for at interagere med den. For at komme ind i containeren kan du bruge standard bash-kommandoen. Det vil sige, du kan indtaste:

$ docker run -ti ubuntu

$ docker køre -i -t ubuntu:14.04 /bin/bash

(i det andet tilfælde vil du køre kommandoen /bin/bash inde i containeren, og du vil automatisk være inde i containeren)

Kommandolinjen vil bekræfte, at du er inde i containeren som superbruger. Efter @-tegnet vil du se ID'et for den container, du er i:

Root@11cc47339ee1:/#

Foretag nu ændringer i /tmp-mappen ved hjælp af echo-kommandoen, og kontroller derefter, at ændringerne er skrevet ved hjælp af kat-kommandoen:

Ekko "Eksempel1" > /tmp/Eksempel1.txt kat /tmp/Eksempel1.txt

På skærmen skal du se:

Forlad nu beholderen:

Når denne kommando er blevet udført, og du afslutter kommandolinjen, holder Docker-beholderen op med at fungere. Du kan se dette, hvis du bruger docker ps kommandoen:

Blandt de kørende containere vil du ikke se den, der er brugt ovenfor:

KONTAINER-ID BILLEDEKOMMANDO OPRETTET STATUSPORTNAVNE

Du kan dog tilføje -a-kontakten for at se alle containere - både kørende og stoppede - og så vil den container, du arbejdede i, blive fremhævet:

$ docker ps -a CONTAINER ID BILLEDEKOMMANDO OPRETTET STATUS PORTE NAVNE 11cc47339ee1 ubuntu "/bin/bash" 9 minutter siden Afsluttet (127) 10 sekunder siden small_sinoussi

Når en container oprettes, har den et ID og et automatisk genereret navn. I dette tilfælde er 11cc47339ee1 containerens identifikationsnummer (ID), og small_sinoussi er det genererede navn. Kommandoen ps -a viser disse data, såvel som det billede, som containeren blev oprettet fra (i dette tilfælde ubuntu), hvornår containeren blev oprettet (for 9 minutter siden), og hvilken kommando der blev kørt i den ("/bin/ bash"). Du kan også se status for containeren (den forlod for 10 sekunder siden). I tilfælde af at containeren stadig kørte, vil du se status "Op" og den tid, den har kørt.

Nu kan du indtaste kommandoen igen for at oprette beholderen:

$ docker run -ti ubuntu

Selvom kommandoen ser ud som sidst, vil den skabe en helt ny container - den vil have et andet ID-nummer, og hvis du prøver at se på indholdet af den Eksempel1-fil, du redigerede tidligere, finder du den ikke .

Root@6e4341887b69:/# kat /tmp/Eksempel1

Outputtet vil være:

Kat: /tmp/Eksempel1: Ingen sådan fil eller mappe

Det kan virke for dig, at dataene er forsvundet, men det er selvfølgelig ikke tilfældet. Afslut den anden container for at sikre, at begge containere (inklusive den første med den ønskede fil) findes på systemet.

Root@6e4341887b69:/# exit $ docker ps -a

Outputtet vil være:

CONTAINER ID BILLEDEKOMMANDO OPRETTET STATUS PORTE NAVNE 6e4341887b69 ubuntu "/bin/bash" For cirka et minut siden Afsluttet (1) 6 sekunder siden kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 15 minutter siden smalle 6si minutter siden smalle 6si.

Trin 2: Genstart den første beholder

For at genstarte en allerede oprettet container, skal du bruge startkommandoen med to -ai-switche. Til sidst skal du skrive identifikationsnummeret på den container, du vil arbejde med, eller dens navn. Som et resultat vil din kommando se sådan ud:

Docker start -ai 11cc47339ee1

Nu er du tilbage i bash-skallen inde i beholderen, og du kan bekræfte, at den fil, du oprettede i begyndelsen af ​​artiklen, stadig er her:

Cat /tmp/Example1.txt

Du vil se på skærmen:

Nu kan du forlade beholderen:

På denne måde gemmes alle ændringer inde i containeren, selvom du stopper og derefter genstarter containeren. Data slettes kun, når selve containeren slettes. Eksemplet ovenfor viser også, at ændringerne påvirker én individuel container (og ikke alle containere på én gang).

Trin 3: Fjern begge beholdere

Det sidste trin er at slette de to containere, du har oprettet ved at følge denne vejledning. For at gøre dette skal du bruge kommandoen docker rm. Det påvirker dog kun stoppede containere. Efter kommandoen skal du angive identifikationsnummeret eller navnet på en eller flere containere. For at slette containere, der er oprettet tidligere, skal du indtaste kommandoen:

Docker rm 6e4341887b69 small_sinoussi

Skærmen vil vise:

6e4341887b69 small_sinoussi

Nu er begge containere blevet slettet.

Konklusion

I denne tutorial lærte du om de grundlæggende kommandoer til at arbejde i Docker og lærte, hvordan du opretter, stopper, genstarter og sletter containere.

Docker er det mest almindelige containeriseringssystem, der giver dig mulighed for at køre den software, der er nødvendig til udvikling i containere uden at installere den på dit lokale system. I dette materiale vil vi analysere Docker containerhåndtering.

Docker består af flere komponenter:
  1. Billede— et sæt software konfigureret af udviklere, som downloades fra det officielle websted
  2. Beholder— implementering af billedet — en enhed på serveren, der er oprettet fra det, containeren behøver ikke at være en nøjagtig kopi og kan justeres ved hjælp af Dockerfile
  3. Bind— det område på disken, som containeren bruger, og hvor data gemmes. Efter sletning af containeren er der ingen software tilbage, men dataene kan bruges i fremtiden

Et netværk er bygget over hele strukturen på en særlig måde, som giver dig mulighed for at videresende porte på den ønskede måde og gøre containeren tilgængelig udefra (som standard kører den på en lokal IP-adresse) gennem en virtuel bro. I dette tilfælde kan containeren være tilgængelig både for verden og til én adresse.

Docker container management: grundlæggende funktioner

Lad os installere Docker på en Ubuntu- eller Debian-server, hvis den ikke allerede er installeret i henhold til instruktionerne. Det er bedre at køre kommandoer som en uprivilegeret bruger via sudo

At køre den enkleste container vil vise, at alt fungerer

Grundlæggende kommandoer til håndtering af containere

Du kan vise alle aktive beholdere på denne måde:

Med -a-kontakten vil alle beholdere blive vist, inklusive inaktive

Dicker tildeler navne til containere tilfældigt, om nødvendigt kan du angive navnet direkte

docker run --navn hello-world

Vi lancerer en container ved navn my-linux-container baseret på ubuntu-billedet og går til containerkonsollen ved hjælp af bash-skallen

docker run -it —navn my-linux-container ubuntu bash

For at forlade containeren og vende tilbage til værtssystemet skal du udføre

Alle billeder, som containere oprettes på grundlag af, downloades automatisk fra hub.docker.com, når containeren først oprettes; dem, der allerede findes lokalt, kan ses ved at køre docker-billeder

Oprettelse af en container fra et allerede downloadet billede vil være meget hurtigere (næsten øjeblikkeligt)

Når du forlader containeren med udgang, stopper den, så dette ikke sker, du kan afslutte ved hjælp af en tastaturgenvej CTRL + A + P

Du kan fjerne alle beholdere, der ikke er aktive

docker rm $(docker ps -a -f status=exited -q)

Eller slet dem én efter én

I stedet for en identifikator i den sidste kommando, kan du angive et navn

I docker administreres containere ved hjælp af et lille antal intuitive kommandoer:

docker container start ID

docker container stop ID

docker container genstart ID

docker container inspektions-id

Sidstnævnte er især nyttigt; det viser alle oplysninger om containeren, konfigurationsfiler og brugte diskpartitioner. Hele listen over kommandoer kan nemt findes i hjælpen eller på den officielle Docker-websted

Oprettelse af dit eget Docker-billede og brug af Dockerfilen

Billeder oprettes normalt ud fra eksisterende billeder ved at bruge yderligere indstillinger specificeret i Dockerfilen

FRA ubuntu
CMD ekko "hello world"

Nu laves et nyt billede baseret på standardbilledet ubuntu

Vi bygger billedet ved at give det et navn (prikken i slutningen af ​​kommandoen betyder, at den aktuelle mappe bruges, og derfor Dockerfilen i den)

docker build -t my-ubuntu .

docker billeder nu vil det nyoprettede my-ubuntu billede også blive vist

Du kan køre det, og det vises i konsollen: Hej Verden og dette er den eneste forskel fra standardbilledet

Normalt har vi brug for mere komplekse regler, for eksempel skal vi inkludere python3 i billedet - lad os gå til en ny mappe og oprette en Dockerfile

FRA ubuntu
CMD apt-get update && apt-get install python3

Alle instruktioner er skrevet på én linje

docker build -t my-ubuntu-with-python3 .

Vi lancerer containeren ved at gå indenfor

docker run -it my-ubuntu-with-python3 bash

Indenfor, som root, skal du løbe dpkg -l | grep python3, vil kommandoen vise, at pakken er til stede i systemet, hvilket betyder succes

Vi har berørt emnet mere end én gang og overvejet mange systemer til at bygge dem. I dag vil vi introducere endnu et fantastisk system, Docker-containere.

Lad os starte med at beskrive den grundlæggende funktionalitet, der vil være nyttig i yderligere artikler i serien, og kort huske Docker-arkitekturen. Docker bruger en klient-server-arkitektur og består af en klient - docker-værktøjet, som tilgår serveren vha. RESTful API, og en dæmon i Linux-operativsystemet (se fig. 1). Selvom Docker kører på ikke-Linux-operativsystemer, er de ikke dækket af denne artikel.

Hovedkomponenter i Docker:
    • Containere– brugermiljøer, hvor applikationer udføres, isoleret ved hjælp af operativsystemteknologier. Den nemmeste måde at definere en Docker-container på er som et program, der kører fra et billede. Det er i øvrigt netop det, der ideologisk adskiller Docker fra for eksempel LXC ( Linux containere), selvom de bruger de samme Linux-kerneteknologier. Udviklerne af Docker-projektet følger princippet: én container er lig med én applikation.
    • Billeder– skrivebeskyttede ansøgningsskabeloner. Nye lag kan tilføjes oven på eksisterende billeder, der tilsammen repræsenterer filsystemet, ved at ændre eller udvide det forrige lag. Typisk oprettes et nyt billede enten ved at gemme en allerede kørende container i et nyt billede oven på det eksisterende, eller ved at bruge specielle instruktioner til værktøjet. For at adskille forskellige containerniveauer på filsystemniveau kan bruges AUFS, btrfs, vfs og Device Mapper. Hvis du planlægger at bruge Docker i forbindelse med SELinux, så er det påkrævet Device Mapper.
    • Registre indeholdende depoter ( depot) billeder, – netværkslagring af billeder. De kan enten være private eller offentlige. Det mest berømte register er .

For at isolere containere i GNU/Linux-operativsystemer bruges standard Linux-kerneteknologier, såsom:
  • navnerum ( Linux navnerum).
  • Kontrolgrupper ( C-grupper).
  • Privilege Management Tools ( Linux-funktioner).
  • Yderligere, obligatoriske sikkerhedssystemer, som f.eks AppArmor eller SELinux.

Lad os se på de nævnte teknologier lidt mere detaljeret.

Kontrolgruppemekanisme (C-grupper) giver et værktøj til finmasket kontrol over allokering, prioritering og styring af systemressourcer. Kontrolgrupper er implementeret i Linux-kernen. I moderne distributioner styres kontrolgrupper igennem systemd, men det er fortsat muligt at styre ved hjælp af biblioteket libcgruppe og forsyningsselskaber cgconfig. De vigtigste hierarkier af cgroups (også kaldet controllere) er anført nedenfor:

  • blkio– sætter grænser for I/O-operationer og adgang til at blokere enheder;
  • CPU– ved at bruge procesplanlæggeren, fordeler processortid mellem opgaver;
  • cpuacct– opretter automatiske rapporter om brugen af ​​CPU-ressourcer. Fungerer sammen med controlleren CPU, beskrevet ovenfor;
  • cpuset– tildeler specifikke processorer og hukommelsesknuder til opgaver;
  • enheder– regulerer opgavers adgang til visse enheder;
  • fryser– pauser eller genoptager opgaver;
  • hukommelse– sætter grænser og genererer rapporter om hukommelsesforbrug ved kontrolgruppeopgaver;
  • net_cls– mærker netværkspakker med en klasse-id ( klassid). Dette gør det muligt for trafiklederen ( tc team) og firewall ( iptables) tage disse tags i betragtning ved behandling af trafik;
  • perf_event– giver dig mulighed for at overvåge kontrolgrupper ved hjælp af hjælpeprogrammet perf;
  • hugetlb– giver dig mulighed for at bruge store virtuelle hukommelsessider og anvende begrænsninger på dem.

Navneområder til gengæld kontrollerer de ikke fordelingen af ​​ressourcer, men adgangen til kernedatastrukturer. Faktisk betyder det, at man isolerer processer fra hinanden og har mulighed for at have parallelle "identiske", men ikke krydsende hierarkier af processer, brugere og netværksgrænseflader. Hvis det ønskes, kan forskellige tjenester endda have deres egne loopback-grænseflader.

Eksempler på navnerum brugt af Docker:
  • PID, proces-id– isolering af proceshierarkiet.
  • NET, netværk– isolering af netværksgrænseflader.
  • PC, InterProcess Communication– styring af interaktion mellem processer.
  • MNT, Mount– styring af monteringspunkter.
  • UTS, Unix tidsdelingssystem– isolering af kerne- og versionsidentifikatorer.

En mekanisme kaldet Evner giver dig mulighed for at opdele root-brugerens privilegier i små grupper af privilegier og tildele dem individuelt. Denne funktionalitet dukkede op i GNU/Linux startende med version kerne 2.2. I første omgang lanceres containere med et begrænset sæt privilegier.

Ved at bruge docker-kommandoindstillingerne kan du aktivere eller deaktivere:
  • monteringsoperationer;
  • socket adgang;
  • Udførelse af nogle filsystemhandlinger, såsom ændring af filattributter eller ejerskab.

Du kan lære mere om privilegier ved at bruge man-siden FUNKTIONER(7).

Installation af Docker

Lad os se på installation af Docker ved hjælp af CentOS som eksempel. Når du kører CentOS, har du et valg: brug den nyeste version fra u pstream eller versionen kompileret af CentOS-projektet med Red Hat-tilføjelser. En beskrivelse af ændringerne findes på siden.

Dette er hovedsageligt en backport af rettelser fra nye upstream-versioner og ændringer foreslået af Red Hat-udviklere, men endnu ikke overtaget i hovedkoden. Den mest bemærkelsesværdige forskel i skrivende stund var, at i nye versioner var docker-tjenesten opdelt i tre dele: dæmonen docker, containerd og runc. Red Hat mener endnu ikke, at denne ændring er stabil og sender den monolitiske eksekverbare version 1.10.

Lagringsindstillinger til installation upstream-versioner, samt instruktioner til installation i andre distributioner og operativsystemer, findes i installationsvejledningen på den officielle hjemmeside. Specifikt indstillingerne for CentOS 7-lageret:

# kat /etc/yum.repos.d/docker.repo name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey=https://yum .dockerproject.org/gpg

# kat /etc/yum.repos.d/docker.repo

navn = Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7

aktiveret = 1

gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg

Installer de nødvendige pakker på og start og aktiver tjenesten:

# yum install -y docker-engine # systemctl start docker.service # systemctl aktiver docker.service

# yum installer -y docker-motor

# systemctl start docker.service

# systemctl aktiver docker.service

Kontrol af servicestatus:

# systemctl status docker.service

# systemctl status docker.service

Du kan også se systemoplysninger om Docker og miljøet:

# docker info

Hvis du kører den samme kommando og installerer Docker fra CentOS-lagrene, vil du se mindre forskelle på grund af brug af en ældre version af softwaren. Fra udgangen docker info vi kan finde ud af, at den bruges som driver til lagring af data Device Mapper, og som lager – en fil i /var/lib/docker/:

# ls -lh /var/lib/docker/devicemapper/devicemapper/data -rw-------. 1 rodrod 100G 27. december 12:00 /var/lib/docker/devicemapper/devicemapper/data

# ls -lh /var/lib/docker/devicemapper/devicemapper/data

Rw -- -- -- - . 1 rodrod 100G 27. december 12:00 /var/lib//devicemapper/devicemapper/data

Indstillinger for at starte dæmonen, som det er typisk på CentOS, er gemt i /etc/sysconfig/. I dette tilfælde er filnavnet docker. Tilsvarende linje /etc/sysconfig/docker, der beskriver mulighederne:

OPTIONS="--selinux-enabled --log-driver=journald"

Hvis du skulle køre docker-kommandoen som en ikke-rootbruger eller en bruger, der ikke er medlem af docker-gruppen, vil du se en fejl som denne:

$ docker søg mysql

$ søg mysql

Advarsel: Det lykkedes ikke at hente fra dæmonen (Kan ikke oprette forbindelse til Docker-dæmonen. Kører docker-dæmonen på denne vært?). Brug af systemstandard: https://index. docker.io/v1/

Kan ikke oprette forbindelse til Docker-dæmonen. Kører docker-dæmonen på denne vært?

Bemærk, at tilføjelse af en bruger til docker-gruppen er det samme som at tilføje den pågældende bruger til rodgruppen.

RHEL/CentOS-udviklerne har en lidt anden tilgang til Docker-dæmonsikkerhed end opstrømsudviklerne af Docker selv. Læs mere om Red Hats tilgang i en artikel af RHEL distributionsudvikler Dan Walsh.

Hvis du vil have Dockers "standard"-adfærd installeret fra CentOS-lagrene (dvs. beskrevet i den officielle dokumentation), skal du oprette en docker-gruppe og føje til indstillingerne for dæmonstart:

OPTIONS="--selinux-enabled --log-driver=journald ↵ --group=docker"

MULIGHEDER = "--selinux-aktiveret --log-driver=journalført ↵ --group=docker"

Derefter genstarter vi tjenesten og kontrollerer, at docker-socket-filen tilhører docker-gruppen og ikke root:

# ls -l /var/run/docker.sock

Docker billedsøgning og tags

Lad os prøve at finde en container på Docker Hub.

$ docker søge haproxy

$search haproxy


I dette output modtog vi en liste over en række HA Proxy-billeder. Det øverste punkt på listen er HA Proxy fra det officielle lager. Sådanne billeder er kendetegnet ved, at navnet ikke indeholder symbolet «/» , adskiller navnet på brugerens lager fra navnet på selve containeren. Det officielle eksempel viser to haproxybilleder fra offentlige brugerlagre eeacms og million12.

Du kan selv oprette billeder som de to nedenfor ved at registrere dig på Docker Hub. De officielle er støttet af et særligt hold sponsoreret af Docker, Inc. Funktioner i det officielle lager:

  • Disse er anbefalede billeder til brug baseret på bedste praksis og retningslinjer.
  • De giver grundlæggende billeder, der kan tjene som udgangspunkt for mere finjustering. For eksempel basisbilleder af Ubuntu, CentOS eller biblioteker og udviklingsmiljøer.
  • Indeholder de seneste versioner af software med rettet sårbarheder.
  • Dette er den officielle produktdistributionskanal. For kun at søge i officielle billeder, kan du bruge muligheden –filter "is-officiel=sand" hold docker-søgning.

Antal stjerner i kommandoudgang docker-søgning svarer til billedets popularitet. Dette ligner en knap Synes godt om på sociale netværk eller bogmærker for andre brugere. Automatiseret betyder, at billedet bygges automatisk ud fra et særligt script ved hjælp af Docker Hub. Typisk bør du give fortrinsret til automatisk indsamlede billeder på grund af det faktum, at dets indhold kan verificeres ved at gøre kendskab til de tilsvarende .

Download det officielle HA Proxy-billede:

$ docker pull haproxy Brug af standard tag: nyeste

Det fulde billednavn kan se sådan ud:

[brugernavn]billedenavn[:tag]

Du kan se listen over downloadede billeder med kommandoen docker billeder:

Kørende containere

For at køre en container er det ikke nødvendigt først at downloade billedet. Hvis den er tilgængelig, downloades den automatisk. Lad os prøve at køre en container med Ubuntu. Vi vil ikke angive et lager og vil downloade det seneste officielle billede, der understøttes af Canonical.

$ docker run -it ubuntu root@d7402d1f7c54:/#

$ køre - det ubuntu

root @d7402d1f7c54 : / #

Udover holdet løb, vi specificerede to muligheder: -jeg– beholderen skal starte i interaktiv tilstand og -t– der skal tildeles en pseudoterminal. Som du kan se fra outputtet, har vi root-privilegier i containeren, og container-id'et vises som værtsnavnet. Sidstnævnte er muligvis ikke sandt for alle containere og afhænger af containerudvikleren. Lad os kontrollere, at dette virkelig er et Ubuntu-miljø:

root@d7402d1f7c54:/# kat /etc/*release | grep DISTRIB_DESCRIPTION DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

root @d7402d1f7c54 : / # kat /etc/*release | grep DISTRIB_DESCRIPTION

DISTRIB_DESCRIPTION = "Ubuntu 16.04.1 LTS"

uname kommando -en Den kan ikke bruges til sådanne formål, da containeren arbejder med værtskernen.

En mulighed ville være at angive et unikt containernavn, der kan henvises til for nemheds skyld ud over Container-id. Det er givet som -navn<имя>. Hvis indstillingen udelades, genereres navnet automatisk.

Automatisk genererede containernavne bærer ikke nogen semantisk belastning, men som et interessant faktum kan det bemærkes, at navnene er tilfældigt genereret fra et adjektiv og navnet på en berømt videnskabsmand, opfinder eller hacker. I generatorkoden for hvert navn kan du finde en kort beskrivelse af, hvad den givne figur er kendt for.

Du kan se listen over kørende containere med kommandoen. For at gøre dette skal du åbne en anden terminal:

Men hvis vi udsteder kommandoen, vil vi ikke finde den container, der er oprettet fra mysql-billedet. Lad os bruge muligheden -en, som viser alle containere, ikke kun kørende:

Det er klart, at de nødvendige parametre ikke blev angivet, da containeren blev startet. For en beskrivelse af de miljøvariabler, der kræves for at køre en container, kan du finde det officielle MySQL-billede på Docker Hub. Lad os prøve igen ved at bruge indstillingen -e, som indstiller miljøvariablerne i containeren:

$ docker run --name mysql-test ↵ -e MYSQL_ROOT_PASSWORD=docker -d mysql

Den sidste parameter er den kommando, som vi ønsker at udføre inde i containeren. I dette tilfælde er det kommandofortolkeren Bash. Muligheder -det lignende formål med dem, der blev brugt tidligere i kommandoen docker-løb.

Faktisk efter at have kørt denne kommando ind i containeren mysql-test en anden proces tilføjes - bash. Dette kan tydeligt ses ved hjælp af pstree-kommandoen. Forkortet output til en kommando docker exec: