Docker არის აპლიკაცია, რომლის საშუალებითაც მარტივად შეძლებთ გაუშვათ აპლიკაციების პროცესები კონტეინერში, რომელიც ვირტუალური მანქანის მსგავსია. ის უფრო პორტატულია, უფრო ნაკლებ რესურსბს მოიხმარს და მეტად არის დამოკიდებული საოპერაციო სისტემაზე. მეტი ინფორმაციისთვის შეგიძლიათ ნახოთ The Docker Ecosystem: An Introduction to Common Components.
Cent OS 7 – ზე Docker-ის დაყენების ორი მეთოდი არსებობს. ერთი არის უკვე გაშვებულ სერვერზე დაყენება, ხოლო მეორე ცალკე Docker Machine სერვერის გაშვება, რომელშიც უკვე არის დაყენებული Docker.
ამ გაკვეთილში შენ ისწავლი თუ როგორ დააყენო და გამოიყენო ის უკვე დაყენებულ CentOS 7-ზე.
მოთხოვნები
- 64-ბიტიანი CentOS 7 ვირტუალური მანქანა
- non-root მომხმარებელი sudo პრივილეგიებით, რომლის შექმნაც Initial Setup Guide for CentOS 7 -ის მიხედვით შეგიძლია
ყველა ბრძანება ამ გაკვეთილში უნდა გაუშვათ non-root მომხმარებლით. თუ root-ზე წვდომა დაგჭირდათ გამოიყენეთ sudo.
ნაბიჯი 1 — Docker-ის ინსტალაცია
Docker-ის საინსტალაციო პაკეტი Cent OS 7 რეპოზიტორიაში შეიძლება არ იყოს ბოლო ვერსია. უახლესი და საუკეთესო ვერსიის მისაღებად გამოიყენეთ Docker-ის რეპოზიტორია. ამ სექციაში ვნახავთ თუ როგორ უნდა ეს.
პირველ რიგში განვაახლოთ პაკეტების ბაზა:
sudo yum check-update
გაუშვი შემდეგი ბრძანება, რომლითაც დაემატება Docker-ის ოფიციალური რეპოზიტორია და დაყენდება მისი უახლესი ვერსია:
curl -fsSL https://get.docker.com/ | sh
ინსტალაციის დასრულების შემდეგ ჩართე Docker-ის დემონი:
sudo systemctl start docker
შეამოწმე მუშაობს თუ არა:
sudo systemctl status docker
შედეგი ამის მსგავსი უნდა იყოს:
Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)
დარწმუნდი რომ ყოველი გადატვირთვის შემდეგ ის გაეშვება:
sudo systemctl enable docker
Docker-ის ინსტალაცია მხოლოდ Docker-ის სერვისს (დემონს) გაძლევს, მაგრამ ასევე გაქვს docker უტილიტა ანუ Docker-ის კლიენტი, რომელსაც ამავე გაკვეთილში განვიხილავთ.
ნაბიჯი 2 — Docker-ის ბრძანებების sudo-ს გარეშე გაშვება (არასავალდებულო)
ნაგულისხმევად docker-ის ბრძანებების გაშვება root-ზე წვდომას ითხოვს – რაც sudo-ს დამატებას ნიშნავს. მისი გაშვება ასევე შესაძლებელია docker-ჯგუფის მომხმარებლებისთვისაც, რომელიც ავტომატურად იქმნება ინსტალაციისას. თუ შენ გაუშვებ Docker-ის ბრძანებას sudo-ს გარეშე მიიღებ მსგავს შედეგს:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
თუ გსურთ თავი აარიდოთ docker ბრძანების აკრეფისას sudo-ს გამოყენებას დაამატეთ თქვენი მომხმარებლის სახელი docker ჯგუფში:
sudo usermod -aG docker $(whoami)
დაგჭირდება სისტემიდან გამოსვლა და ხელახლა შესვლა ცვლილების გააქტიურებისთვის
თუ გინდა რომ სხვა მომხმარებელი დაამატო docker ჯგუფში ბრძანებაში პირდაპირ მიუთითე მისი სახელი:
sudo usermod -aG docker username
ამ წერტილიდან უკვე იგულისხმება, რომ docker ბრძანება ეშვება docker ჯგუფის მომხმარებლის სახელით. თუ არ გსურთ ეს ბრძანებებს sudo დაურთეთ წინ.
ნაბიჯი 3 — Docker ბრძანების გამოყენება
უკვე დროა გამოვიყენოთ Docker-ის ბრძანებები, რომელიც გარკვეული პარამეტრების და ქვე-ბრძანებების ჯაჭვს მოითხოვს თავისი არგუმენტებით. სინტაქსი შემდეგნაირად გამოიყურება:
docker [option] [command] [arguments]
ყველა შესაძლებელი ქვე-ბრძანების სანახავად აკრიფე უბრალოდ:
docker
Docker 1.11.1-ვერსიისთვის ბრძანებების სრული სია შემდგეგნაირია:
attach Attach 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 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 a container or image
kill Kill a running container
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
network Manage Docker networks
pause Pause all processes within a container
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 a container
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
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 a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
სპეციფიური ქვე-ბრძანების პარამეტრების სანახავად აკრიფე:
docker docker-subcommand --help
სისტემის შესახებ ინფორმაციის სანახავად აკრიფე:
docker info
ნაბიჯი 4 — Docker-ის იმიჯებთან მუშაობა
Docker-ის კონტეინერები Docker-ის იმიჯებით ეშვება. ნაგულისხმევად ის იმიჯებს Docker Hub-დან იღებს, რომელიც კომპანია Docker-ის მიერ მართვადი რეესტრია. ნებისმიერს შეუძლია ააწყოს და გამოაქვეყნოს მათი Docker იმიჯები Docker Hub-ზე. ამიტომ თითქმის ყველა აპლიკაციას და Linux-ის დისტრიბუტივს რომელზეც Docker-ს გაუშვებთ აქვს იმიჯები Docker Hub-ში.
რომ შეამოწმო გაქვს თუ არა წვდომა Docker Hub-ზე აკრიფე:
docker run hello-world
მსგავსი შედეგი ნიშნავს, რომ დოკერი გამართულად მუშაობს:
Output
Hello from Docker.
This message shows that your installation appears to be working correctly.
...
შენ შეგიძლია მოძებნო იმიჯები docker ბრძანების search ქვე-ბრძანებით. მაგალითად CentOS-ის იმიჯი:
docker search centos
სკრიპტი შეამოწმებს Docker Hub-ს და დააბრუნებს ყველა იმიჯის სიას, რომლის სახელიც ემთხვევა საძიებო სიტყვას. ამ შემთხვევაში მიიღებ ამის მსგავს შედეგს:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 2224 [OK]
jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [OK]
jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17 [OK]
million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11 [OK]
nimmis/java-centos This is docker images of CentOS 7 with dif... 10 [OK]
torusware/speedus-centos Always updated official CentOS docker imag... 8 [OK]
nickistre/centos-lamp LAMP on centos setup 3 [OK]
...
სვეტში OFFICIAL მნიშვნელობა OK აღნიშნავს იმას, რომ იმიჯი აწყობილია და მხარდაჭერილია პროექტის უკან მდგომი კომპანიის მიერ. სასურველი იმიჯის არჩევის შემდეგ შეგიძლია ჩამოტვირთო ის pull ქვე-ბრძანების გამოყენებით:
docker pull centos
ჩამოტვირთვის შემდეგ შეგიძლია გაუშვა კონტეინერი run ქვე-ბრძანების საშუალებით. თუ იმიჯი პირდაპირ ჩამოტვირთვის გარეშე გაუშვით Docker პირველ რიში ჩამოტვირთავს მას და მერე გაუშვებს კონტეინერს:
docker run centos
ჩამოტვირთული კონტეინერების სანახავად აკრიფე:
docker images
მიიღებ მსგავს შედეგს:
[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
მოგვიანებით გაკვეთილში ნახავ, რომ იმიჯები შეიძლება შევცვალოთ და მათგან ახალი იმიჯები შევქმნათ, რომლებსაც ავტვირთავთ Docker Hub-ში ან სხვა რეესტრში.
ნაბიჯი 5 — Docker-ის კონტეინერის გაშვება
helo-world კონტეინერი, რომელიც წინა ნაბიჯში გავუშვით მხოლოდ მაგალითია, რომელიც პასუხად სატესტო ტექსტს გვაძლევს. კონტეინერები გაცილებით მეტად სასარგებლოა ვიდრე ეს მაგალითი და მათ შეუძლიათ იყვნენ ინტერაქტიულები. ისნი ვირტუალური მანქანებივით არიან და ნაკლებ რესურსებს მოითხოვენ.
მაგალითისთვის გავუშვათ კონტეინსერი CentOS-ის უახლესი იმიჯით. -i და -t გადამრთველები გაძლევს ინტერაქტიულ წვდომას კონტეინერში:
docker run -it centos
შენი ბრძანების ზოლი შეცვლება იმის აღნიშვნით, რომ უკვე მუშაობ კონტეინერის შიგნით:
Output
[root@59839a1b7de2 /]#
ახლა უკვე შეგიძლია გაუშვა ბრძანება კონტეინერშ. მოდი დავაყენოთ MariaDB სერვერი. არ არის საჭირო sudo პრეფიქსის გამოყენება, იმიტომ, რომ შენ უკვე კონტეინერში ხარ root პრივილეგიებით.
yum install mariadb-server
ნაბიჯი 6 — ცვლილებების Docker იმიჯში შეტანა
Docker-ის იმიჯის გაშვებისას შენ შეგიძლია შექმნა, შეცვალო და წაშალო ფაილები ისევე, როგორც ვირტუალურ მანქანაში. შენი ცვლილებები მხოლოდ ამ კონტეინერს შეეხება. შეგიძლია გაუშვა და შეაჩერო, მაგრამ თუ წაშლი docker rm ბრძანებით მაშინ ცვლილებებს დაკარგავ.
ახლა ვნახოთ თუ, როგორ შევინახოთ კონტეინერის მდგომარება ახალი კონტეინერის იმიჯში.
MariaDB სერვერის დაყენების შემდეგ CentOS კონტეინერში შენ უკვე გაქვს კონტეინერი, რომელიც განსხვავდება იმისგან რომლიდანაც შექმენი ის.
კონტეინერის მდგომარეობის შესანახად ჯერ უნდა გამოხვიდე იქიდან:
exit
შემდეგში დაამატე ცვლილებები ახალ იმიჯში commit ბრძანებაზე -m გადამრთველის საშუალებით, რომელითაც შეძლებ შენი ცვლილებების აღწერას, ხოლო -a გადამრთველი შენი სახელის მითითებას ემსახურება. მანამ სანამ არ შექმნით ცალკე რეპოზიტორიას გექნება Docker Hub-ის რეპოზიტორია შენი მომხმარებლის სახელით:
docker commit -m "შენს მიერ განხორციელებული ცვლილება" -a "შენი სახელი" container-id რეპოზიტორია/ახალი_იმიჯის_სახელი
მაგალითად:
docker commit -m "დავამატე mariadb-server" -a "დავით მაჭახელიძე" 59839a1b7de2 finid/centos-mariadb
ცნობა: როცა შეიტან ცვლილებას იმიჯში, ახალი იმიჯი ლოკალურ კომპიუტერში შეინახება. მოგვინებით გაკვეთილში ისწავლი თუ როგორ უნდა ატვირთო იმიჯი Docker Hub-ის მსგავს რეესტრში.
ამ ოპერაციის დასრულების შემდეგ იმიჯების სია შენს კომპიუტერში უნდა აჩვენებდეს ახალ იმის ძველთან ერთად:
docker images
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
finid/centos-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
centos latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
ზემოთ მოყვანილ მაგალითში centos-mariadb არის ახალი იმიჯი, რომელიც არსებული CentOS-ის იმიჯისგან შეიქმნა. ზომის სხვაობა გამოხატავს შენს მიერ შეტანილ ცვლილებებს. შემდეგში, როცა დაგჭირდება CentOS და MariaDB სერვერი, შეგიძლია გამოიყენო ახალი იმიჯი. იმიჯები შეიძლება ე. წ. Dockerfile-დან ავაწყოთ, თუმცა ეს ამ გაკვეთილის ჩარჩოებს ცდება და მის შესახებ მომავალში ვისაუბრებთ.
ნაბიჯი 7 — Docker-ის კონტეინერების სიები
Docker-ის დიდი ხნით მოხმარების შემდეგ კომპიუტერში გექნება უამრავი აქტიური (გაშვებული) და არააქტიური კონტეინერი. აქტიურების სანახავად გამოიყენე:
docker ps
ნახავ მსგავს შედეგს:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd centos "/bin/bash" 3 hours ago Up 3 hours
ყვლა კონტეინერის სანახავად – აქტიურის და არააქტიურის დაამატე -a გადამრთველი:
docker ps -a
ბოლოს შექმნილი კონტეინერის სანახავად გამოიყენე -l გადამრთველი:
docker ps -l
კონტეინერის გასაჩერებლად აკრიფე:
docker stop container-id
container-id
შეგიძლია ნახო docker ps
ბრძანების შედეგებში.
ნაბიჯი 8 — Docker-ის იმიჯების რეპოზიტორიაში ატვირთვა
შემდეგი ლოგიკური ნაბიჯი ალბათ არის ახალი იმიჯის გაზიარება მეგობრებთან ან მთელს სამყაროსთან Docker Hub-ის ან რეესტრის საშუალებით, რომელთანაც გაქვს წვდომა. Docker Hub-ში ან ნებისმიერ რეესტრში იმიჯის ასატვირთად საჭიროა ანგარიში.
ამ სექციაში ვნახავთ თუ როგორ უნდა ავტვირთოთ Docker-ის იმიჯი Docker Hub-ში.
Docker Hub-ზე ანგარიშის შესაქმნელად საჭიროა რეგისტრაცია, რის შემდეგაც ატვირთვისას გამოვა აუთენტიფიკაციის მოთხოვნა:
docker login -u docker-registry-username
If you specified the correct password, authentication should succeed. Then you may push your own image using:
თუ სახელი და პაროლი სწორად მიუთითეთ აუთენტიფიკაცია წარმატებით ჩაივლის, რის შემდეგაც შეძლებთ საკუთარი იმიჯის ატვირთვას:
docker push docker-registry-username/docker-image-name
ამას გარკვეული დრო დაჭირდება და როცა მორჩება შედეგად მიიღებთ მსგავს რამეს:
Output
The push refers to a repository [docker.io/finid/centos-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/centos
6a6c96337be1: Mounted from library/centos
...
იმიჯის რეპოზიტორიაში გამოქვეყნების შემდეგ ის აისახება შენი ანგარიშის პანელში
თუ ატვირთვის მცდელობა დასრულდა მსგავსი შეცდომით დიდი ალბათობით ვერ გაიარე აუთენტიფიკაცია:
Output
The push refers to a repository [docker.io/finid/centos-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
გაიარე აუთენტიფიკაცია და ხელახლა ცადე
დასკვნა
რა თქმა უნდა Docker-ის შესახებ გაცილებით მეტი ინფორმაცია მოიპოვება ვიდრე ამ გაკვეთილშია ნათქვამი, თუმცა ეს საკმარისია დაიწყო მასთან მუშაობა CentOS 7-ში. მსგავსად ბევრი ღია პროექტისა Docker შექმნილია სწრაფად-განვითარებადი კოდისგან, ამიტომ გამოიმუშავე ჩვევა პერიოდულად ნახო პროექტის ბლოგი უახლესი ინფორმაციისთვის.
ასევე ნახე სხვა გაკვეთილები Docker-ის შესახებ Digital Ocean-ის საზოგადოებაში.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.