Docker Exec - Parancs futtatása a Docker képen vagy tárolón belül

Bemutatom Önöket a DevOps titkába: Az a dolog, amit a DevOpsy-emberek szeretnek csinálni, egy szuper divatos és összetett rendszert épít, majd megtalálják a módját annak kezelésére, mint egy normál héj. Vagy csatlakozzon hozzá SSH-val, majd kezelje úgy, mint egy normál héjat.

Docker sem más! Másik számítógépen fut egy számítógép. Lehet, hogy az a számítógép egy EC2 példány vagy egy laptop. Még meg is őrülhet, és futtathat egy virtuális gépet, amely akkor futtatja a Dockert.

A Docker használatakor legtöbbször egy alkalmazás csomagolására és terjesztésére használom. Néha valami hűvösebb dologhoz használom, mint egy elosztott számítástechnikai projekt. De sokszor dobok egy Dockerfile-t egy GitHub repóba, hogy ne kelljen olyan CLI-ket telepítenem, amelyekről csak tudom, hogy végül ütköznek a laptopomon.

Hosszú történet, elmondhatod Dockernek, hogy futtassa a parancsot bash, amely egy shellbe dob:

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

De tovább olvass tovább. ;-)

Próbáld ki

Google kedvenc programozási nyelvének Docker up-ját. Számomra ez a Python, és kifejezetten szeretem a kondát. Ezután futtasson néhány parancsot, hogy megbizonyosodjon arról, hogy valóban benne van-e a shellben.

# 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

Hűvös, mi? Ez tökéletes egy olyan tároló hibakereséséhez, amelynek feltétlenül működnie kell. Nagyszerű a leggyakoribb "Nem akarom ezt telepíteni a számítógépemre" használati esetemre is.

Hibaelhárítás egy Docker Build Docker Run alkalmazással

A Docker-kép normál héjként történő kezelése hasznos lesz, amikor megpróbálja hibakeresni a Docker-buildeket.

Tegyük fel, hogy van egy Docker fájlja egy képhez, amelyet megpróbál felépíteni. Normális esetben az történik, hogy a docker build -t my-image .(-t címkéhez való) futtatáskor a Docker végigfut minden RUN lépésén, és leáll, amikor olyan parancshoz jut, amely nem lép ki megfelelően.

Egy UNIX shellben a 0 kilépési kód azt jelenti, hogy minden rendben van egy paranccsal. Tehát ennek a pontnak a szemléltetésére a Dockerfile-nak rendelkezésünkre áll egy RUN parancs, amely kilép 1-vel.

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 .

Ezzel kimenetet kap, amely a következőképpen néz ki:

(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

Futtatásával docker imagesés ellenőrzésével megerősítheti, hogy a Docker-kép nem épült-e fel my-image. Nem lesz ott, mert nem sikerült sikeresen megépíteni.

Most azt tehetjük, hogy kommentáljuk azt a problémás Dockerfile RUN parancsot.

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

Akkor amit látni fog:

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 

Most beléphet a Docker képbe, és elkezdheti az interaktív parancsok futtatását!

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

Innen egyesével elkezdheti a RUN parancsok hibakeresését, hogy megnézze, mi tévedett. Ha nem biztos abban, hogy egy parancs megfelelően lépett-e ki, vagy sem, futtassa $?:

# 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

Futtathatja ezeket a lépéseket, kommentálhatja a Dockerfile-t, belehúzhat egy shellbe és kitalálhatja a problémás parancsokat, amíg a Docker-képei tökéletesen össze nem épülnek.

Csomagolás

Remélhetőleg megmutattam, hogy a Docker kép használata nem különbözik a számítógép termináljától. A Docker képek használata fantasztikus módszer az alkalmazások terjesztésére.

Próbáld meg megvenni a kedvenc CLI alkalmazást vagy a következő GitHub projektet, és telepítési parancsfájl létrehozása helyett csomagold be a Docker programba. ;-)