Categories
გაკვეთილები ღრუბლოვანი სერვისები

Docker – Cent OS 7 – ინსტალაცია და გამოყენება

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-ის საზოგადოებაში.

 

ორიგინალური ტექსტი

 

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.