Docker qurulması

Bu məqalə "Docker" silsiləsinə daxildir

Biz dockerin qurulması və ilkin anlayışlar ətrafında bəhs edəcəyik.  Bu məqsədlə iki ədəd linux  host,  centos7ubuntu16 istifadə edəcəyik. Gələcək məqalələrdə həm bu host-lar , həmdə xüsusi docker üçün nəzərdə tutulmuş  linux distributivlər üzərində cluster qurulmasını incələyəcəyik. Docker qurulması üçün 64-bit əməliyyat sistemi və 3.10 və ya daha yuxarı səviyyə kernel versiyası tələb olunur. Linux terminalında  uname  -r  yazaraq hazırkı kernelin versiyasını müəyyən edə bilərik. İlkin olaraq sistemlərin yenilənməsi (update)  və qurulma işinin root istifadəçisindən ayrıca daha az səlahiyyətli istifadəçi tərəfindən icra edilməsi tövsiyyə olunur. Məqaləni uzatmamaq üçün mən root istifadəçisi ilə davam edəcəm.

Centos 7  

kernelin yenilənməsinin mümkün olduğunu nəzərə alaraq dəyişikliklərin tətbiqi üçün sistemi yenidən başlatmağımız tövsiyyə olunur.

yum update -y;reboot

Paket menegeri vasitəsi ilə dockeri install etmək üçün tələb olunan docker repo-nu əlavə edək

tee /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Docker -i yum vasitəsi ilə yükləyək və sistemə quraşdaraq.

yum install docker-engine –y

Docker xidmətinin system yüklənərkən avtomatik işə düşməsini aktivləşdirək

systemctl enable docker.service

Docker xidmətini işə salaq və işlək olduğunu yoxlayaq.

systemctl start  docker
systemctl status docker

Ubuntu

apt-get update
apt-get upgrade
apt-get install apt-transport-https ca-certificates

Gpg açar və repo -nu əlavə edək.

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
/etc/apt/sources.list.d/docker.list - faylını yaradaq və aşağıdakı sətri əlavə edək.
deb https://apt.dockerproject.org/repo ubuntu-xenial main

Paket meneger-in indeksini yeniləyək

apt-get update

Tələb olunan paketləri və docker-engine əlavə edək.

apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
apt-get install docker-engine

Docker xidmətini işə salaq və aktivləşdirək

systemctl enable docker
systemctl start docker
systemctl status docker

 

 

Beləliklə docker-engine  hər iki host serverdə dockeri quraşdırdıq.

Docker engine nədir?

Docker-engine aşağıdakı komponentlərdən ibarət olan client-server prinsipi əsasında işləyən program təminatıdır.

  • Arxa fonda çalışan deamon prosesi adlanan server hissəsi
  • Proqramların deamon prosesi ilə danışa və ona əmrlər göndərə biləcəkləri REST API interfeys
  • CLI client – terminaldan istifadə olunacaq alət (məs: docker)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Docker daemon prosesi host serverdə işləyir  və istifadəçilər docker alətləri vasitəsi ilə bu prosesə müraciət edə bilirlər. CLI client və digər docker alətləri REST API  vasitəsi ilə docker  prosesinə müraciət və əmrlərini ötürürlər. Docker prosesi isə qəbul etdiyi əmrlərə uyğun olaraq image, container, şəbəkə, disk resursları və s. obyektlər üzərində əməliyyatları icra edir.  (məs:   docker version, docker run,  docker pull)

2

 

 

 

 

 

 

 

 

 

 

 

Docker image  –  yalnız oxuma imkanlı(read-only)  nümunə olub özündə yeni conrainter yaratmaq üçün təlimatlar saxayır. Misal olaraq özündə  kiçildilmiş, yalnız minimal komponentlər saxlayan Ubuntu əməliyyat sistemi, apache web server və bizim proqram təminatını saxlayan nümunə göstərmək olar. Belə bir nümunələri (image) biz özümüz sıfırdan yarada və ya öncədən başqaları tərəfindən hazırlanmış nümunələri endirə və istifadə edə bilərik. Docker nümunələrini  adi fayl olan Dockerfile adlanan fayl vasitəsi ilə təsvir etmək və yaratmaq mümkündür.

Docker container  –  bəhs etdiyimiz nümunələr əsasında yaradılan, işə salına bilinən  instanslardır. Biz docker aləti vasitəsi ilə containerləri  işə sala, dayandıra, başlada, silə  və s.  edə bilərik.

Docker registry  –  image-lərin, nümunələrin kitabxanasıdır. Registry-yə image-lərin saxlanıldığı və paylaşıldığı yer kimi baxa bilərik. Registry ümumi(public) və ya şəxsi(private) ola bilər. Registry –yə  linux paket repoları kimi baxa bilərik. Registry docker xidmətinin işlədiyi eyni serverdə, kənar serverdə və ya public web resurs üzərində ola bilər. Biz hazırladığımız docker image-ləri bu registry-lərə əlavə edə bilərik və istədiyimiz zaman registrydən image-ləri endirib istifadə edə bilərik. Misal üçün,  web program təminatı üçün  özündə Ubuntu + nginx + ruby on rails saxlayan  testapp01 adlı docker image hazırladıqdan sonra onu daxili docker registry-yə əlavə edə bilərik.  Bundan sonra hər dəfə bizdə bu tələblərə uyğun platforma lazım olduqda, istənilən docker-engine qurulmuş olan host serverdə testapp01 image-ini yükləyə və qısa zamanda istədiyimiz qədər container işə sala bilərik.  Etdiyimiz dəyişiklikləri  məsələn yeni testapp01/auth_module  adlı image-ə əlavə edib yenidən registry-yə yükləyə bilərik.

Docker Hub  – dockerin rəsmi registry-sıdır. Docker Hub -da böyük sayda vendorların özləri və başqaları tərəfindən əlavə olunmuş image-lər mövcuddur. Biz həm image-lər üzrə axtarış apara, onları endirib istifadə edə, həm də öz image-lərimizi əlavə edə bilərik. Bizə lazım olan image-in bizdən  öncə orda hazır olması mümkündür. Misal üçün bizə test etmək üçün asterisk voip sistemi lazımdır, biz Docker Hubdan asterisk-i endirib vaxt itirmədən container yarada və testlərimizi edə bilərik. Docker Hubda  biz istifadəçi hesabı yardıb, öz repo-larımızı da istifadə edə bilərik.

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Docker  – ilkin istifadə

Docker client və serverin , API –in, go dilinin versiyasını görmək üçün  docker version əmrindən istifadə edirik.

root@host02:~# docker version
Client:
 Version:      1.12.2
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   bb80604
 Built:        Tue Oct 11 18:29:41 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.2
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   bb80604
 Built:        Tue Oct 11 18:29:41 2016
 OS/Arch:      linux/amd64
root@host02:~#

Sistem səviyyəsində  docker mühiti haqqında docker info əmri vasitəsi ilə daha geniş məlumat əldə edə bilərik.

root@host02:~# docker info | more
Containers: 3
 Running: 1
 Paused: 0
 Stopped: 2
Images: 5
Server Version: 1.12.2
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 17
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host bridge overlay null
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor seccomp
Kernel Version: 4.4.0-21-generic
Operating System: Ubuntu 16.04.1 LTS
--More--

 

İlk image-in istifadə edilməsi.

Biz nginx üçün docker image endirmək və 2 nginx container işə salmaq istəyirik. İlk olaraq Docker Hub –da bu image-in olub-olmadığını yoxlaya bilərik. Rəsmi image olduğu halda onun istifadəsi daha məqsədə uyğun olar. İstənilən halda biz özümüz istədiyimiz kimi image hazırlayıb onu istifadə edə bilərik.   docker search nginx

root@host02:~# docker search nginx
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                     Official build of Nginx.                        4367      [OK]
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   831                  [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   286                  [OK]
million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   76                   [OK]
webdevops/php-nginx       Nginx with PHP-FPM                              58                   [OK]
maxexcloo/nginx-php       Framework container with nginx and PHP-FPM...   58                   [OK]
bitnami/nginx             Bitnami nginx Docker Image                      18                   [OK]
evild/alpine-nginx        Minimalistic Docker image with Nginx            8                    [OK]
million12/nginx           Nginx: extensible, nicely tuned for better...   8                    [OK]
gists/nginx               Nginx on Alpine                                 8                    [OK]
maxexcloo/nginx           Framework container with nginx installed.       7                    [OK]
webdevops/nginx           Nginx container                                 5                    [OK]
1science/nginx            Nginx Docker images based on Alpine Linux       4                    [OK]
ixbox/nginx               Nginx on Alpine Linux.                          3                    [OK]
drupaldocker/nginx        NGINX for Drupal                                3                    [OK]
--More--

 

Docker Hub-da nginx-lə bağlı olan image-lərin siyahısı bizə qaytarılır.

NAME                         –  image-in adı, 1 –ci nginx adlı imagə qarşısında heç bir ad göstərilmir, bu onun rəsmi image olmasını göstərir. Digər image-lərin qarşısında göstərilən ad onun hansı repositoriyə, kimə aid olmasını göstərir.2-ci image  jwilder repositoriyasına aiddir.  Misal üçün https://hub.docker.com/r/jwilder/   –  bu ünvandan yoxlaya bilərik.

DESCRIPTION       –  image haqqında qısa təsvir

STARS                        –  istifadəçilərin rəylərinə əsasən image-in reytinqini göstərir.

OFFICIAL                 –  image-in rəsmi repozitoriyadan olub-olmamasını göstərir. Rəsmi olan image-lər daha etibarlı və  daha aydın sənədləşidirlmiş olur.

AUTOMATED         –  docker image-lərin avtomatik build olunması mümkündür.  Mes:  image               sahibinin  git hesabına əlavə olunan kodlar avtomatik olaraq image-ə build edilir.Bu imkanın istifadə edildiyini bildirir.

 

Axtarışlarımıza müəyyən filterlər tətbiq edə bilərik :

docker search   nginx –limit 5                                         –  yalnız ilkin  5  nəticəni göstərmək

docker search   nginx –filter is-official=true            –  yalnız rəsmi olan image-ləri göstərmək

docker search   nginx –filter is-automated=true   –  avtomatik build imkanını istifadə edənlər

root@host02:~# docker search   haproxy  --filter is-official=true
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
haproxy   HAProxy - The Reliable, High Performance T...   553       [OK]
root@host02:~#

 

dokcer pull   –  registry-dən image və ya reponu endirmək üçün istifadə edilir.

docker search nginx   –    əmri nəticəsində aldığımız image-lərdən bizə lazım olanı  adını yazmaqla endirə bilərik. Biz rəsmi image-i endirəcəyik.    docker pull nginx

root@host02:~# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
6a5a5368e0c2: Pull complete
20a0fbbae148: Pull complete
2fbd37c8684b: Pull complete
Digest: sha256:e40499ca855c9edfb212e1c3ee1a6ba8b2d873a294d897b4840d49f94d20487c
Status: Downloaded newer image for nginx:latest
root@host02:~#

docker pull nginx  -a   və ya  docker images –all-tags=true    – repoda olan bütün image-ləri endirəcək.

docker images   –   local image-lər haqqında məlumatı göstərir.

9REPOSITORY              – image-in mənsub olduğu repozitoriyanı göstərir.

TAG                                  – image-in yarlıkını(tag) göstərir. Bir image üçün bir neçə yarlık təyin edilə            bilər. Susmaya görə latest yarlıkı əlavə olunur. docker pull debian  – yazdıqda, debian:latest   image-i endirilir.  Tag image -ə verilən qısa  deskriptiv addır.

IMAGE ID                         Hər bir image-ə verilən unikal id. 0-dan yaradılan və valideyni olmayan image base image adlanır. Base image üzərində digər yeni image-ləri yığa bilərik.  docker history image_name  bu layları bizə göstərəcək. Image id   əsasında  biz cari image -nin aşağı laylarını görə bilirik. Hər bir layda əlavə  olunan hissəni və həcmi görə bilirik. İD-lərə diqqət edək.

10CREATED            –  image-in yaradılma, yığılma vaxtını bizə göstərir.

SIZE                       –  image-in həcmini göstərir. Eyni base image-dən yaradılmış bir neçə image olmasına  baxmayaraq həcm yalnız bir image-in həcmi qədərdi.Fərqli  image-lər endirdikdə isə onların həcminə  uyğun olaraq tutduqları həcm artır.

11Nginx web server-i container daxilində işlətməklə bir nümunəyə baxaq. Mövzunu  növbəti Məqalədə davam etdirəcəyik.

docker pull nginx           – image-i endiririk

docker run –name websrv01  -it   -p 8080:80  -d  nginx     –   nginx image-indən  websrv01 adlı container işə salıram və  host serverin 8080 portuna gələn müraciətləri container daxilində işləyən nginx serverə ötürürəm. Yoxlamaq üçün localhost-dan və kənardan 8080  portuna qoşularaq test edirəm.

root@host02:~# docker run --name  websrv01 -it -p 8080:80 -d nginx
b6efca26590319085f19be167c87db65b7ff0b9167d27324204cc0178d8d474a
root@host02:~#
root@host02:~# netstat -ntlp | grep docker
tcp6       0      0 :::8080                 :::*                    LISTEN      6246/docker-proxy
root@host02:~#
root@host02:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
b6efca265903        nginx               "nginx -g 'daemon off"   9 seconds ago       Up 9 seconds        443/tcp, 0.0.0.0:8080-&gt;80/tcp   websrv01
root@host02:~#
root@host02:~# curl localhost:8080 | more
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   612  100   612    0     0  29030      0 --:--:-- --:--:-- --:--:-- 30600
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Welcome to nginx!&lt;/title&gt;
--More--

14
 

 

 

 

 

Növbəti məqalədə son etdiklərimizə daha izahlı şəkildə baxacağıq.

Uğurlar.

Səs: +40. Bəyənilsin Zəifdir

Müəllif: Kamil Babayev

Şərhlər ( 1 )

  1. Kamil bəy, gözəl məqalə üçün təşəkkürlər.

    Uğurlar.

Şərh yazın