Si të instaloni dhe përdorni Docker në Debian 10


Prezantimi

Docker është një aplikacion që thjeshton procesin e menaxhimit të proceseve të aplikimit në containers. Kontejnerët ju lejojnë të ekzekutoni aplikacionet tuaja në procese të izoluara nga burimet. Ato janë të ngjashme me makinat virtuale, por kontejnerët janë më të lëvizshëm, më miqësorë me burimet dhe më të varur nga sistemi operativ pritës.

Për një hyrje të hollësishme të komponentëve të ndryshëm të një kontejneri Docker, shikoni Ekosistemi Docker: Një hyrje në komponentët e zakonshëm.

Në këtë tutorial, ju do të instaloni dhe përdorni Docker Community Edition (CE) në Debian 10. Do të instaloni vetë Docker, do të punoni me kontejnerë dhe imazhe dhe do të shtyni një imazh në një Depo Docker.

Parakushtet

Për të ndjekur këtë tutorial, do t'ju duhet sa më poshtë:

  • Një server Debian 10 u konfigurua duke ndjekur udhëzuesin fillestar të konfigurimit të serverit Debian 10, duke përfshirë një përdorues sudo jo-root dhe një mur zjarri.
  • Një llogari në Docker Hub nëse dëshironi të krijoni imazhet tuaja dhe t'i shtyni ato në Docker Hub, siç tregohet në hapat 7 dhe 8.

Hapi 1 - Instalimi i Docker

Paketa e instalimit Docker e disponueshme në depon zyrtare të Debian mund të mos jetë versioni më i fundit. Për t'u siguruar që marrim versionin më të fundit, do të instalojmë Docker nga depoja zyrtare e Docker. Për ta bërë këtë, ne do të shtojmë një burim të ri pakete, do të shtojmë çelësin GPG nga Docker për t'u siguruar që shkarkimet janë të vlefshme dhe më pas do të instalojmë paketën.

Së pari, përditësoni listën tuaj ekzistuese të paketave:

  1. sudo apt update

Më pas, instaloni disa paketa parakushte që lejojnë apt të përdorë paketa mbi HTTPS:

  1. sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Pastaj shtoni çelësin GPG për depon zyrtare të Docker në sistemin tuaj:

  1. curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Shtoni depon e Docker në burimet APT:

  1. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Më pas, përditësoni bazën e të dhënave të paketave me paketat Docker nga repoja e sapo shtuar:

  1. sudo apt update

Sigurohuni që jeni gati të instaloni nga depo Docker në vend të depove të paracaktuara Debian:

  1. apt-cache policy docker-ce

Do të shihni dalje si kjo, megjithëse numri i versionit për Docker mund të jetë i ndryshëm:

docker-ce:
  Installed: (none)
  Candidate: 5:20.10.12~3-0~debian-buster
  Version table:
     5:20.10.12~3-0~debian-buster 500
        500 https://download.docker.com/linux/debian buster/stable amd64 Packages

Vini re se docker-ce nuk është i instaluar, por kandidati për instalim është nga depoja e Docker për Debian 10 (buster).

Më në fund, instaloni Docker:

  1. sudo apt install docker-ce

Docker është instaluar tani, daemon filloi dhe procesi u aktivizua për të filluar në boot. Kontrollo që po funksionon:

  1. sudo systemctl status docker

Dalja do të jetë e ngjashme me sa vijon, duke treguar se shërbimi është aktiv dhe funksionon:

Output
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-07-08 15:11:19 UTC; 58s ago Docs: https://docs.docker.com Main PID: 5709 (dockerd) Tasks: 8 Memory: 31.6M CGroup: /system.slice/docker.service └─5709 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Instalimi i Docker ju jep jo vetëm shërbimin Docker (daemon), por edhe shërbimin e linjës së komandës docker, ose klientin Docker. Ne do të shqyrtojmë se si të përdorim komandën docker më vonë në këtë tutorial.

Hapi 2 - Ekzekutimi i Komandës Docker Pa Sudo (Opsionale)

Si parazgjedhje, komanda docker mund të ekzekutohet vetëm nga përdoruesi root ose nga një përdorues në grupin docker, i cili krijohet automatikisht gjatë instalimit të Docker procesi. Nëse përpiqeni të ekzekutoni komandën docker pa e paracaktuar atë me sudo ose pa qenë në grupin docker, do të merrni një dalje si kjo :

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

Nëse dëshironi të shmangni shtypjen e sudo sa herë që ekzekutoni komandën docker, shtoni emrin tuaj të përdoruesit në grupin docker:

  1. sudo usermod -aG docker ${USER}

Për të aplikuar anëtarësimin e ri në grup, dilni nga serveri dhe futuni përsëri, ose shkruani sa vijon:

  1. su - ${USER}

Do t'ju kërkohet të shkruani fjalëkalimin e përdoruesit tuaj për të vazhduar.

Konfirmoni që përdoruesi juaj është shtuar tani në grupin docker duke shtypur:

  1. id -nG
Output
sammy sudo docker

Nëse ju duhet të shtoni një përdorues në grupin docker me të cilin nuk jeni identifikuar, deklaroni atë emër përdoruesi duke përdorur në mënyrë eksplicite:

  1. sudo usermod -aG docker username

Pjesa tjetër e këtij artikulli supozon se po ekzekutoni komandën docker si përdorues në grupin docker. Nëse zgjidhni të mos, ju lutemi vendosni komandat me sudo.

Le të eksplorojmë komandën docker më pas.

Hapi 3 - Përdorimi i Komandës Docker

Përdorimi i docker konsiston në kalimin e një zinxhiri opsionesh dhe komandash të ndjekura nga argumente. Sintaksa merr këtë formë:

  1. docker [option] [command] [arguments]

Për të parë të gjitha nënkomandat e disponueshme, shkruani:

  1. docker

Që nga Docker 18, lista e plotë e nënkomandave të disponueshme përfshin:

Output
attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

Për të parë opsionet e disponueshme për një komandë specifike, shkruani:

  1. docker docker-subcommand --help

Për të parë informacionin në të gjithë sistemin rreth Docker, përdorni:

  1. docker info

Le të shqyrtojmë disa nga këto komanda. Ne do të fillojmë duke punuar me imazhet.

Hapi 4 - Puna me Imazhet e Docker

Kontejnerët Docker janë ndërtuar nga imazhet e Docker. Si parazgjedhje, Docker i tërheq këto imazhe nga Docker Hub, një regjistër Docker i menaxhuar nga Docker, kompania që qëndron pas projektit Docker. Çdokush mund të presë imazhet e tij Docker në Docker Hub, kështu që shumica e aplikacioneve dhe shpërndarjeve Linux që ju nevojiten do të kenë imazhe të pritura atje.

Për të kontrolluar nëse mund të përdorni dhe shkarkoni imazhe nga Docker Hub, shkruani:

  1. docker run hello-world

Dalja do të tregojë që Docker po punon si duhet:

Output
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...

Docker fillimisht nuk ishte në gjendje të gjente imazhin hello-world në vend, kështu që e shkarkoi imazhin nga Docker Hub, i cili është depoja e paracaktuar. Pasi imazhi u shkarkua, Docker krijoi një enë nga imazhi dhe aplikacioni brenda kontejnerit u ekzekutua, duke shfaqur mesazhin.

Mund të kërkoni për imazhe të disponueshme në Docker Hub duke përdorur komandën docker me nënkomandën kërko. Për shembull, për të kërkuar imazhin e Ubuntu, shkruani:

  1. docker search ubuntu

Skripti do të zvarritet Docker Hub dhe do të kthejë një listë të të gjitha imazheve, emri i të cilave përputhet me vargun e kërkimit. Në këtë rast, prodhimi do të jetë i ngjashëm me këtë:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 9704 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 319 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 224 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 183 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 99 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 97 [OK] neurodebian NeuroDebian provides neuroscience research s… 57 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK] ubuntu ...

Në kolonën ZYRTARE, OK tregon një imazh të ndërtuar dhe të mbështetur nga kompania që qëndron pas projektit. Pasi të keni identifikuar imazhin që dëshironi të përdorni, mund ta shkarkoni në kompjuterin tuaj duke përdorur nënkomandën pull.

Ekzekutoni komandën e mëposhtme për të shkarkuar imazhin zyrtar të ubuntu në kompjuterin tuaj:

  1. docker pull ubuntu

Do të shihni daljen e mëposhtme:

Output
Using default tag: latest latest: Pulling from library/ubuntu 5b7339215d1d: Pull complete 14ca88e9f672: Pull complete a31c3b1caad4: Pull complete b054a26005b7: Pull complete Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c Status: Downloaded newer image for ubuntu:latest

Pasi të jetë shkarkuar një imazh, atëherë mund të ekzekutoni një kontejner duke përdorur imazhin e shkarkuar me nënkomandën run. Siç e patë me shembullin hello-world, nëse një imazh nuk është shkarkuar kur docker ekzekutohet me nënkomandën run, klienti Docker fillimisht do të shkarkojë imazhin, më pas do të ekzekutojë një kontejner duke e përdorur atë.

Për të parë imazhet që janë shkarkuar në kompjuterin tuaj, shkruani:

  1. docker images

Prodhimi duhet të duket i ngjashëm me sa vijon:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4c108a37151f 2 weeks ago 64.2MB hello-world latest fce289e99eb9 6 months ago 1.84kB

Siç do ta shihni më vonë në këtë tutorial, imazhet që përdorni për të drejtuar kontejnerët mund të modifikohen dhe përdoren për të gjeneruar imazhe të reja, të cilat më pas mund të ngarkohen (shtyhen është termi teknik) në Docker Hub ose regjistrat e tjerë Docker.

Le të shohim më në detaje se si të përdorim kontejnerët.

Hapi 5 - Drejtimi i një kontejneri Docker

Kontejneri hello-world që keni përdorur në hapin e mëparshëm është një shembull i një kontejneri që funksionon dhe del pas lëshimit të një mesazhi testimi. Kontejnerët mund të jenë shumë më të dobishëm se kaq, dhe ato mund të jenë ndërvepruese. Në fund të fundit, ato janë të ngjashme me makinat virtuale, vetëm më miqësore me burimet.

Si shembull, le të ekzekutojmë një enë duke përdorur imazhin më të fundit të Ubuntu. Kombinimi i çelësave -i dhe -t ju jep akses ndërveprues të guaskës në kontejner:

  1. docker run -it ubuntu

Linja juaj e komandës duhet të ndryshojë për të pasqyruar faktin që tani jeni duke punuar brenda kontejnerit dhe duhet të marrë këtë formë:

Output
root@d9b100f2f636:/#

Vini re ID-në e kontejnerit në vijën e komandës. Në këtë shembull, është d9b100f2f636. Do t'ju duhet ajo ID e kontejnerit më vonë për të identifikuar kontejnerin kur dëshironi ta hiqni atë.

Tani mund të ekzekutoni çdo komandë brenda kontejnerit. Për shembull, le të përditësojmë bazën e të dhënave të paketës brenda kontejnerit. Ju nuk keni nevojë të parashtesoni ndonjë komandë me sudo, sepse jeni duke vepruar brenda kontejnerit si përdoruesi root:

  1. apt update

Pastaj instaloni çdo aplikacion në të. Le të instalojmë Node.js:

  1. apt install nodejs

Kjo instalon Node.js në kontejnerin nga depoja zyrtare e Ubuntu. Kur të përfundojë instalimi, verifikoni që Node.js është instaluar:

  1. node -v

Do të shihni numrin e versionit të shfaqur në terminalin tuaj:

Output
v10.19.0

Çdo ndryshim që bëni brenda kontejnerit zbatohet vetëm për atë enë.

Për të dalë nga kontejneri, shkruani dalje në kërkesë.

Le të shohim më pas menaxhimin e kontejnerëve në sistemin tonë.

Hapi 6 - Menaxhimi i kontejnerëve Docker

Pasi të keni përdorur Docker për një kohë, do të keni shumë kontejnerë aktivë (në punë) dhe joaktive në kompjuterin tuaj. Për të parë aktivet, përdorni:

  1. docker ps

Do të shihni dalje të ngjashme me sa vijon:

Output
CONTAINER ID IMAGE COMMAND CREATED

Në këtë tutorial, keni filluar dy kontejnerë; një nga imazhi hello-world dhe një tjetër nga imazhi ubuntu. Të dy kontejnerët nuk funksionojnë më, por ato ende ekzistojnë në sistemin tuaj.

Për të parë të gjithë kontejnerët — aktivë dhe joaktivë, ekzekutoni docker ps me çelësin -a:

  1. docker ps -a

Do të shihni dalje të ngjashme me këtë:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 20 seconds ago                       friendly_volhard
0740844d024c        hello-world         "/hello"            3 minutes ago        Exited (0) 3 minutes ago                        elegant_neumann

Për të parë kontejnerin më të fundit që keni krijuar, kaloni atë çelësin -l:

  1. docker ps -l
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 34 seconds ago friendly_volhard

Për të nisur një kontejner të ndaluar, përdorni docker start, e ndjekur nga ID-ja e kontejnerit ose emri i kontejnerit. Le të fillojmë kontejnerin e bazuar në Ubuntu me ID-në e d9b100f2f636:

  1. docker start d42d0bbfbd35

Kontejneri do të fillojë dhe mund të përdorni docker ps për të parë statusin e tij:

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d42d0bbfbd35        ubuntu              "/bin/bash"         About a minute ago   Up 8 seconds                            friendly_volhard

Për të ndaluar një kontejner që funksionon, përdorni docker stop, e ndjekur nga ID-ja ose emri i kontejnerit. Këtë herë, ne do të përdorim emrin që Docker i ka caktuar kontejnerit, i cili është friendly_volhard:

  1. docker stop friendly_volhard

Pasi të keni vendosur se nuk keni më nevojë për një kontejner, hiqeni atë me komandën docker rm, duke përdorur përsëri ose ID-në e kontejnerit ose emrin. Përdorni komandën docker ps -a për të gjetur ID-në ose emrin e kontejnerit për kontejnerin e lidhur me imazhin hello-world dhe hiqni atë.

  1. docker rm elegant_neumann

Mund të nisni një kontejner të ri dhe t'i jepni një emër duke përdorur çelësin --name. Mund të përdorni gjithashtu çelësin --rm për të krijuar një enë që hiqet vetë kur ndalet. Shikoni komandën docker run help për më shumë informacion mbi këto opsione dhe të tjera.

Kontejnerët mund të shndërrohen në imazhe të cilat mund t'i përdorni për të ndërtuar kontejnerë të rinj. Le të shohim se si funksionon.

Hapi 7 - Kryerja e ndryshimeve në një kontejner në një imazh Docker

Kur nisni një imazh Docker, mund të krijoni, modifikoni dhe fshini skedarë ashtu si mundeni me një makinë virtuale. Ndryshimet që bëni do të zbatohen vetëm për atë kontejner. Mund ta filloni dhe ta ndaloni, por sapo ta shkatërroni me komandën docker rm, ndryshimet do të humbasin përgjithmonë.

Ky seksion ju tregon se si të ruani gjendjen e një kontejneri si një imazh i ri Docker.

Pas instalimit të Node.js brenda kontejnerit të Ubuntu-së, tani ju keni një kontejner që mbaron një imazh, por kontejneri është i ndryshëm nga imazhi që keni përdorur për ta krijuar atë. Por ju mund të dëshironi të ripërdorni këtë kontejner Node.js si bazë për imazhe të reja më vonë.

Pastaj kryeni ndryshimet në një shembull të ri të imazhit Docker duke përdorur komandën e mëposhtme.

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

Ndërprerësi -m është për mesazhin e kryerjes që ju ndihmon ju dhe të tjerët të dini se çfarë ndryshimesh keni bërë, ndërsa -a përdoret për të specifikuar autorin. container_id është ai që keni vërejtur më herët në tutorial kur keni filluar seancën interaktive të Docker. Nëse nuk keni krijuar depo shtesë në Docker Hub, depoja është zakonisht emri juaj i përdoruesit të Docker Hub.

Për shembull, për përdoruesin sammy, me ID-në e kontejnerit të d9b100f2f636, komanda do të ishte:

  1. docker commit -m "added Node.js" -a "sammy" d42d0bbfbd35 sammy/ubuntu-nodejs

Kur përcaktoni një imazh, imazhi i ri ruhet lokalisht në kompjuterin tuaj. Më vonë në këtë tutorial, do të mësoni se si të shtyni një imazh në një regjistër Docker si Docker Hub në mënyrë që të tjerët të mund ta përdorin atë.

Renditja e imazheve të Docker përsëri do të tregojë imazhin e ri, si dhe atë të vjetër nga i cili rrjedh:

  1. docker images

Ju do të shihni daljen si kjo:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest d441c62350b4 10 seconds ago 152MB ubuntu latest 4c108a37151f 2 weeks ago 64.2MB hello-world latest fce289e99eb9 6 months ago 1.84kB

Në këtë shembull, ubuntu-nodejs është imazhi i ri, i cili rrjedh nga imazhi ekzistues ubuntu nga Docker Hub. Diferenca e madhësisë pasqyron ndryshimet që janë bërë. Dhe në këtë shembull, ndryshimi ishte që NodeJS u instalua. Kështu që herën tjetër që ju duhet të ekzekutoni një kontejner duke përdorur Ubuntu me NodeJS të para-instaluar, thjesht mund të përdorni imazhin e ri.

Ju gjithashtu mund të ndërtoni Imazhe nga një Dockerfile, i cili ju lejon të automatizoni instalimin e softuerit në një imazh të ri. Sidoqoftë, kjo është jashtë fushës së këtij tutoriali.

Tani le të ndajmë imazhin e ri me të tjerët në mënyrë që ata të krijojnë kontejnerë prej tij.

Hapi 8 - Shtyrja e imazheve të Docker në një depo Docker

Hapi tjetër logjik pas krijimit të një imazhi të ri nga një imazh ekzistues është ta ndani atë me disa nga miqtë tuaj të zgjedhur, me të gjithë botën në Docker Hub ose me regjistrat e tjerë Docker ku keni akses. Për të shtyrë një imazh në Docker Hub ose në ndonjë regjistër tjetër Docker, duhet të keni një llogari atje.

Ky seksion ju tregon se si të shtyni një imazh Docker në Docker Hub. Për të mësuar se si të krijoni regjistrin tuaj privat Docker, shikoni Si të konfiguroni një Regjistr privat Docker në Ubuntu 18.04.

Për të shtyrë imazhin tuaj, fillimisht hyni në Docker Hub.

  1. docker login -u docker-registry-username

Do t'ju kërkohet të vërtetoni duke përdorur fjalëkalimin tuaj Docker Hub. Nëse keni specifikuar fjalëkalimin e saktë, vërtetimi duhet të ketë sukses.

Shënim: Nëse emri juaj i përdoruesit të regjistrit Docker është i ndryshëm nga emri i përdoruesit lokal që keni përdorur për të krijuar imazhin, do t'ju duhet ta etiketoni imazhin tuaj me emrin e përdoruesit të regjistrit. Për shembullin e dhënë në hapin e fundit, do të shkruani:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Pastaj mund të shtyni imazhin tuaj duke përdorur:

  1. docker push docker-registry-username/docker-image-name

Për të shtyrë imazhin ubuntu-nodejs në depo sammy, komanda do të ishte:

  1. docker push sammy/ubuntu-nodejs

Procesi mund të marrë pak kohë për të përfunduar ndërsa ngarkon imazhet, por kur të përfundojë, dalja do të duket kështu:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

Pas shtyrjes së një imazhi në një regjistër, ai duhet të renditet në pultin e llogarisë suaj, siç tregohet në imazhin më poshtë.

Nëse një përpjekje shtytje rezulton në një gabim të këtij lloji, atëherë ka të ngjarë të mos keni hyrë:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

Identifikohu me login docker dhe përsërit përpjekjen e shtytjes. Më pas verifikoni që ekziston në faqen tuaj të depove të Docker Hub.

Tani mund të përdorni docker pull sammy/ubuntu-nodejs për të tërhequr imazhin në një makinë të re dhe për ta përdorur atë për të drejtuar një kontejner të ri.

konkluzioni

Në këtë tutorial keni instaluar Docker, keni punuar me imazhe dhe kontejnerë dhe keni shtyrë një imazh të modifikuar në Docker Hub. Tani që i dini bazat, eksploroni mësimet e tjera të Docker në Komunitetin DigitalOcean.