Docker Exec - kuidas käsku käivitada Dockeri pildi või konteineri sees

Lasen teil siin DevOpsi saladusse sisse logida: kõik, mida DevOpsy inimesed armastavad teha, on ülimalt uhke ja keeruka süsteemi loomine, seejärel leidke viis, kuidas sellega tavalise kestana hakkama saada. Või ühendage sellega SSH-ga ja kohtle seda siis tavalise kestana.

Docker ei erine! Kasutate arvutit mõnes teises arvutis. Võib-olla on see arvuti EC2 eksemplar või sülearvuti. Võite isegi väga hulluks minna ja käivitada VM, mis seejärel töötab Dockerit.

Enamasti kasutan Dockerit kasutades seda rakenduse pakkimiseks ja levitamiseks. Mõnikord kasutan seda millegi lahedama jaoks nagu hajutatud arvutusprojekt. Kuid palju kordi viskan Dockerfile'i GitHubi repo, et ma ei peaks installima CLI-sid, mis lihtsalt tean, et lõpuks lähevad minu sülearvutile vastuollu.

Pikk lugu, võite öelda Dockerile käsu käivitamise bash, mis viib teid kestasse:

docker run -it name-of-image bash # docker run -it continuumio/miniconda3:latest bash # docker run -it node:latest bash

Kuid lugege edasi. ;-)

Proovi

Google'i lemmik programmeerimiskeel Docker up. Minu jaoks on see Python ja konkreetselt mulle meeldib konda. Seejärel käivitage paar käsku, veendumaks, et olete tegelikult selles kestas.

# From Host echo $(pwd) # Drop into docker shell docker run -it continuumio/miniconda3:latest bash # Now you are in the docker shell! echo $(pwd) echo $USER

Lahe, mis? See sobib suurepäraselt konteineri silumiseks, mis peaks kindlasti korralikult töötama. See sobib suurepäraselt ka minu kõige tavalisema "ma ei taha seda arvutisse installida" kasutamise puhul.

Siluge Dockeri järk koos Docker Runiga

Dockeri pildi tavalise kestana käsitlemine on kasulik, kui proovite Dockeri järkude silumist.

Oletame, et teil on Dockerfile pilt, mida proovite ehitada. Tavaliselt juhtub see, et käivitamisel docker build -t my-image .(-t on märgendi jaoks) töötab Docker kõik teie RUN-etapid läbi ja peatub, kui jõuab käsuni, mis ei välju õigesti.

UNIX-i kestas tähendab väljumiskood 0, et käsuga on kõik korras. Nii et selle punkti illustreerimiseks olen pannud meie Dockerfile'i käsule RUN, mis väljub ühega 1.

FROM continuumio/miniconda3:latest RUN apt-get update -y; \ apt-get upgrade -y; \ apt-get install -y \ vim-tiny vim-athena build-essential RUN conda update conda \ && conda clean --all --yes RUN exit 1
docker build -t my-image .

See annab teile väljundi, mis näeb välja nagu:

(base) ➜ my-image docker build -t my-image . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM continuumio/miniconda3:latest ---> 406f2b43ea59 Step 2/4 : RUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essential ---> Using cache ---> 726af29a48a0 Step 3/4 : RUN conda update conda && conda clean --all --yes ---> Using cache ---> 19478bb3ce67 Step 4/4 : RUN exit 1 ---> Running in 7c98aab6b52c The command '/bin/sh -c exit 1' returned a non-zero code: 1

Käivitades docker imagesja kontrollides saate kinnitada, et teie Dockeri pilti ei ehitatud my-image. Seda pole seal, sest seda ei õnnestunud edukalt ehitada.

Nüüd saame teha selle tülika Dockerfile RUN käsu kommenteerimise.

FROM continuumio/miniconda3:latest RUN apt-get update -y; \ apt-get upgrade -y; \ apt-get install -y \ vim-tiny vim-athena build-essential RUN conda update conda \ && conda clean --all --yes #RUN exit 1

Siis näete:

Sending build context to Docker daemon 2.048kB Step 1/3 : FROM continuumio/miniconda3:latest ---> 406f2b43ea59 Step 2/3 : RUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essential ---> Using cache ---> 726af29a48a0 Step 3/3 : RUN conda update conda && conda clean --all --yes ---> Using cache ---> 19478bb3ce67 Successfully built 19478bb3ce67 Successfully tagged my-image:latest 

Nüüd saate oma Dockeri pildile kukkuda ja interaktiivselt käske käivitada!

docker run -it my-image bash # you can also run # docker run -it my-image:latest bash

Siit saate ükshaaval alustada RUN-käskude silumist, et näha, mis valesti läks. Kui te pole kindel, kas käsk väljus õigesti või mitte, käivitage $?:

# First run docker run -it my-image bash to get to the shell # Print the string hello echo "hello" # hello echo $? # 0 # Run a non existant command hello $(hello) # bash: hello: command not found echo $? # 127

Saate neid samme jätkata, oma Dockerfile'i kommenteerida, kestasse kukkuda ja probleemseid käske välja selgitada, kuni teie Dockeri pildid on ideaalselt üles ehitatud.

Tõmba otsad kokku

Loodetavasti olen teile näidanud, et Dockeri pildi kasutamine ei erine teie arvuti terminalist. Dockeri piltide kasutamine on suurepärane viis rakenduste levitamiseks.

Proovige võtta oma lemmik CLI-rakendus või järgmine GitHubi projekt ja installiprogrammi loomise asemel pakkige see Dockeriga. ;-)