„Docker Exec“ - kaip paleisti komandą „Docker“ paveikslėlyje ar talpykloje

Aš jus čia įleisiu į „DevOps“ paslaptį: viskas, ką mėgsta daryti „DevOpsy“ žmonės, yra sukurti labai išgalvotą ir sudėtingą sistemą, tada rasti būdą, kaip su ja elgtis kaip įprastu apvalkalu. Arba prijunkite prie jo naudodami SSH ir tada elkitės kaip su įprastu apvalkalu.

Dockeris niekuo nesiskiria! Jūs naudojate kompiuterį kitame kompiuteryje. Gal tas kompiuteris yra EC2 egzempliorius arba nešiojamas kompiuteris. Jūs netgi galite išprotėti ir paleisti VM, kuris tada paleidžia „Docker“.

Dažniausiai, kai naudoju „Docker“, naudoju jį programoms pakuoti ir platinti. Kartais aš jį naudoju kažkam šaunesniam kaip paskirstytam skaičiavimo projektui. Tačiau daug kartų „Dockerfile“ išmetu į „GitHub“ repą, kad nereikėtų diegti CLI, kuriuos tiesiog žinau, kad galų gale kils konfliktų mano nešiojamajame kompiuteryje.

Trumpa istorija, galite liepti Dockeriui paleisti komandą bash, kuri nukreipia jus į apvalkalą:

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

Bet skaitykite toliau. ;-)

Išbandyk

„Google“ jūsų mėgstamos programavimo kalbos „Docker up“. Man tai yra „Python“, o man ypač patinka „conda“. Tada paleiskite keletą komandų, kad įsitikintumėte, jog iš tikrųjų esate tame apvalkale.

# 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

Šaunu, ką? Tai puikiai tinka derinant talpyklą, kuri turėtų veikti tinkamai. Tai taip pat puikiai tinka mano dažniausiai naudojamam atvejui „Nenoriu to įdiegti į savo kompiuterį“.

Derinkite „Docker Build“ naudodami „Docker Run“

Jei bandysite derinti „Docker“ kūrinius, bus naudinga elgtis su „Docker“ vaizdu kaip su įprastu apvalkalu.

Tarkime, kad turite „Docker“ failą vaizdui, kurį bandote sukurti. Paprastai atsitinka taip, kad paleidus docker build -t my-image .(-t yra žymai), „Docker“ paleis kiekvieną jūsų RUN žingsnį ir sustos, kai pateks į komandą, kuri tinkamai neišeina.

UNIX apvalkale išėjimo kodas 0 reiškia, kad viskas gerai su komanda. Taigi, norėdamas iliustruoti šį tašką, aš padariau mūsų „Dockerfile“ komandą RUN, kuri išeina iš 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 .

Tai suteiks jums tokią išvestį, kuri atrodo taip:

(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

Galite patvirtinti, kad jūsų „Docker“ vaizdas nebuvo sukurtas paleisdami docker imagesir patikrinę my-image. Jo nebus, nes jis nebuvo sėkmingai pastatytas.

Dabar galime pakomentuoti tą varginančią „Dockerfile RUN“ komandą.

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

Tada pamatysite:

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 

Dabar galite patekti į savo „Docker“ vaizdą ir pradėti interaktyviai vykdyti komandas!

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

Čia po vieną galite pradėti derinti savo RUN komandas, kad sužinotumėte, kas nepavyko. Jei nesate tikri, ar komanda buvo tinkamai paleista, ar ne, vykdykite $?:

# 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

Galite tęsti šiuos veiksmus, komentuodami „Dockerfile“, kritę į apvalkalą ir išsiaiškindami problemines komandas, kol „Docker“ vaizdai bus sukurti tobulai.

Apvyniokite

Tikiuosi, aš jums parodžiau, kad „Docker“ vaizdo naudojimas nesiskiria nuo kompiuterio terminalo. „Docker“ vaizdų naudojimas yra puikus būdas platinti programas.

Pabandykite pasiimti mėgstamą CLI programą arba kitą „GitHub“ projektą ir užuot sukūrę diegimo scenarijų, supakuokite jį su „Docker“. ;-)