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:
- sudo apt update
Më pas, instaloni disa paketa parakushte që lejojnë apt
të përdorë paketa mbi HTTPS:
- 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:
- curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Shtoni depon e Docker në burimet APT:
- 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:
- sudo apt update
Sigurohuni që jeni gati të instaloni nga depo Docker në vend të depove të paracaktuara Debian:
- 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:
- 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:
- 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 :
Outputdocker: 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
:
- 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:
- 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:
- id -nG
Outputsammy 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:
- 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ë:
- docker [option] [command] [arguments]
Për të parë të gjitha nënkomandat e disponueshme, shkruani:
- docker
Që nga Docker 18, lista e plotë e nënkomandave të disponueshme përfshin:
Outputattach 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:
- docker docker-subcommand --help
Për të parë informacionin në të gjithë sistemin rreth Docker, përdorni:
- 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:
- docker run hello-world
Dalja do të tregojë që Docker po punon si duhet:
OutputUnable 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:
- 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ë:
OutputNAME 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:
- docker pull ubuntu
Do të shihni daljen e mëposhtme:
OutputUsing 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:
- docker images
Prodhimi duhet të duket i ngjashëm me sa vijon:
OutputREPOSITORY 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:
- 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ë:
Outputroot@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:
- apt update
Pastaj instaloni çdo aplikacion në të. Le të instalojmë Node.js:
- 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:
- node -v
Do të shihni numrin e versionit të shfaqur në terminalin tuaj:
Outputv10.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:
- docker ps
Do të shihni dalje të ngjashme me sa vijon:
OutputCONTAINER 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
:
- 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
:
- docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 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
:
- 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
:
- 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ë.
- 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.
- 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:
- 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:
- docker images
Ju do të shihni daljen si kjo:
OutputREPOSITORY 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.
- 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:
- docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
Pastaj mund të shtyni imazhin tuaj duke përdorur:
- docker push docker-registry-username/docker-image-name
Për të shtyrë imazhin ubuntu-nodejs
në depo sammy, komanda do të ishte:
- 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:
OutputThe 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ë:
OutputThe 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.