Docker fra bakken Arbeid med containere, del 2

Dette er del to i en todelt serie om å jobbe med Docker-beholdere. I del ett fokuserte vi på de mange måtene og alternativene for å kjøre et bilde, og hvordan verten kan samhandle med en Docker-beholder. 

I denne delen vil vi dekke oppføringen, starte, stoppe og starte på nytt beholdere, samt å utføre kommandoer på kjørende containere. Spesielt lærer du forskjellen mellom kjører og stoppet (avsluttet) containere, og hvordan du kontrollerer nøyaktig informasjonen og visningen når du lister beholderne ved å filtrere og formatering. 

Deretter får du praktisk erfaring som stopper, starter, starter på nytt og festes til dine containere. Til slutt vil du kjøre engangskommandoer, samt få interaktiv skal tilgang til en løpende container. 

Før vi starter, må du kontrollere at Docker er installert riktig i ditt miljø. Avhengig av hvordan det er installert og brukeren din, må du kanskje kjøre den som sudo. Jeg hopper over sudo. 

Oppføring av containere

Når du arbeider med containere, vil du ofte liste, se og filtrere beholderne. De docker ps kommandoen er nøkkelen, og den har flere interessante alternativer.

Running Containers

Den mest grunnleggende kommandoen er vanlig docker ps uten argumenter, som viser alle de kjørende beholderne.

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAVN 2f542e1cb88b nginx "nginx -g 'daemon ..." 12 timer siden Opp 12 timer 443 / tcp, 0.0.0.0:9000->80/tcp nginx 

Du får mye informasjon på hver container, inkludert container ID, bildet, kommandoen, når den ble opprettet, dens nåværende status, dens porter og navnene. Det er litt vanskelig å analysere på grunn av innpakningen. Vi ser senere hvordan du filtrerer og formaterer utdataene. Merk at kommandoen er avkortet (i tillegg til container-ID). For å vise full kommando, legg til --no-AVKORT:

$ docker ps - no-trunc IMAGE COMMAND nginx "nginx-g 'daemon off;'" 

Nå er den fulle kommandoen synlig: nginx-g 'daemon off;'

Alle containere

Som du husker, holder Docker stoppet containere rundt (med mindre du kjørte dem med --rm). legge -en viser alle beholdere:

$ docker ps -a CONTAINER ID BILDE STATUS NAVN cc797c61dc21 busybox Utløpt busybox 67f3cb5a9647 busybox Utgått ecstatic_jones 898fb562e535 hello-world Utløpt hopeful_spence 6dd210fda2d8 hello-world Opprettet infallible_curie 2f542e1cb88b nginx Opp 12 timer nginx

formatering

Utgangen av docker ps kan være for ordentlig og viser ofte mange felt som ikke er interessante. Du kan bruke Go-template formatering for å vise bare feltene du er interessert i. Her vises bare navnet og kommandoen:

$ docker ps - no-trunc -format '.Names \ t . Command' nginx "nginx -g 'demonen;'" 

Det fungerer, men for å presentere det med feltnavnene, legg til "tabell" til begynnelsen av formatstrengen:

$ docker ps -a -no-trunc -format 'tabell .Names \ t . Command' NAMES COMMAND busybox "cat /data/1.txt" ecstatic_jones "cat / data / 1. txt "hopeful_spence" / hei "infallible_curie" ls -la "nginx" nginx -g 'daemon off;' " 

Formatet navn for container ID (ikke valgt her) er .Id- (alle caps).

filtrering

De docker ps kommandoen støtter mange filtre. De er ganske enkle å bruke. Syntaxen er -f "=". Støttede filtre er id, etikett, navn, avsluttet, status, forfedre, før, siden, isolasjon, nettverk og helse.

Her filtreres etter containernavn og viser bare opptaksboksbeholderen:

$ docker ps -a -f "name = busybox" \ --format tabell .ID \ t . Status \ t .navn 'CONTAINER ID STATUS NAMES cc797c61dc21 Utgått 11 minutter siden busybox

The -q Flagg

Hvis alt du vil ha er container ID, bruk -q flagg (stille flagg). Det er enklere enn --format 'tabell .ID'. Dette er ofte nødvendig når du vil utføre operasjoner på flere beholdere (du vil se et eksempel senere).

$ docker ps -aq cc797c61dc21 67f3cb5a9647 898fb562e535 6dd210fda2d8 2f542e1cb88b 

Stopp, start og omstart av containere

Du kan slutte å kjøre containere og starte en stoppet beholder. Det er flere forskjeller mellom å starte en stoppet beholder og å kjøre en ny forekomst av det samme bildet:

  • Du bruker de samme miljøvariablene, volumene, porter og andre argumenter i den opprinnelige kjørekommandoen.
  • Du trenger ikke å opprette enda en container.
  • Hvis den stoppede instansen endret filsystemet, vil den startede beholderen bruke det samme.

La oss stoppe Nginx container og deretter starte den. Når du refererer til en container, kan du bruke navnet eller et entydig prefiks av dens ID. Jeg heter vanligvis mine langrennende containere, så jeg har et meningsfull håndtak og trenger ikke å håndtere Dockers automatisk genererte navn eller containernes id-prefikser.

$ dokkestopp nginx nginx $ docker ps -a -f "name = nginx" --format 'table .Names \ t . Status' NAMES STATUS nginx avsluttet (0) 2 minutter siden 

OK. Nginx er stoppet (status er "Exited"). La oss starte det:

$ docker start nginx nginx $ docker ps -a -f "name = nginx" --format 'table .Names \ t . Status' NAMES STATUS nginx Opp 33 sekunder 

Omstart av en kjørerbeholder er et annet alternativ, som tilsvarer dockerstopp etterfulgt av docker start.

$ dokkingstart nginx

nginx $ docker ps -a -f "name = nginx" --format-tabell .Names \ t . Status 'NAMES STATUS nginx Opp 2 sekunder 

Festes til en løpende beholder

Når du starter en stoppet beholder, eller hvis du kjørte din container i frittstående modus (-d kommandorad argument), kan du ikke se utgangen. Men du kan legge til det.

$ docker vedlegg nginx 172.17.0.1 - - [19 / Mar / 2017: 08: 40: 03 +0000] "HOVED / HTTP / 1.1" 200 0 "-" "HTTPie / 0.8.0" "-" 

Fjerning av beholdere

Du kan fjerne stoppede containere med kommandoen:  docker rm

$ docker rm ecstatic_jones ecstatic_jones 

Hvis du vil fjerne en løpende beholder, kan du enten stoppe den først eller bruke -f (kraft) kommandolinjeprinsel:

$ docker rm -nginx Feil respons fra daemon: Du kan ikke fjerne en løpende container 3dbffa955f906e427298fbeb3eadfd229d64365dd880c9771a31b0aedb879d6d. Stopp beholderen før du forsøker fjerning eller bruk -f $ dokkingstasjon rm -f -nginx nginx 

Hvis du vil fjerne alle beholdere, er dette en fin utdrag:

docker rm -f $ (docker ps-aq)

Hvis du vil fjerne bare den stoppede beholderen, fjerner du -f (kraft) flagg.

Utføre en kommando inne i en løpende beholder

Docker kjører en enkelt prosess inne i en beholder, men du kan utføre flere kommandoer mot en løpende beholder. Det ligner veldig på å gi en tilpasset kommando til docker kjøre kommando, bortsett fra at i dette tilfellet det kjører side om side med løpekommandoen.

Enkle kommandoer

Kjører en enkel kommando gjøres via docker exec. Du oppgir et løpende containerdokument eller -navn og kommandoen du vil kjøre. La oss sjekke ut nginx.conf fil inne i Nginx container og se hvor mange arbeidsprosesser som er konfigurert.

$ docker exec nginx cat /etc/nginx/nginx.conf | grep worker_processes worker_processes 1; 

Interaktiv Shell

En av de beste feilsøkingsteknikkene med Docker-beholdere er å koble til et interaktivt skall og bare utforske det interne filsystemet. For å feste stdin og ha en tty, du må gi -i -t kommandolinjearguder (kan grupperes som -den) og deretter navnet på et skall kjørbart (vanligvis bash). 

Du ender med shell tilgang til din container. Her er et eksempel på å sjekke arbeiderprosessene interaktivt fra "innsiden" av beholderen.

$ docker exec -it nginx bash root @ b010e854bb98: / # cat /etc/nginx/nginx.conf | grep worker_processes worker_processes 1; rot @ b010e854bb98: / # 

Konklusjon

Docker er en kraftig plattform, og siden beholderen er arbeidsenheten, gir den mange verktøy for å håndtere og arbeide med containere. Jeg beskrev de fleste viktige aspektene ved å jobbe med containere, men det er mange mer avanserte funksjoner, alternativer og nyanser til kommandoene jeg dekket, samt noen ekstra kommandoer. 

Hvis du jobber tett med Docker-beholdere, ta deg tid til å dykke inn og lære alt om dem. Det vil lønne seg godt.