ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 45
Abonament PDF

Docker, Build & Ship

Raluca Oanca-Boca
Full Stack Developer @Self-Employed



PROGRAMARE

Toți programatorii doresc uneori ca algoritmul să fie scris o singură dată și să-l poată rula pe diferite sisteme de operare și independente. Soluția Docker pornește de la aceeași premisă exceptând faptul că în loc de a scrie cod, poate configura servere într-un mod personalizat, începând de la alegerea sistemului de operare, configurarea customizată a unor fișiere, instalarea de anumite programe.

Ce este Docker?

Docker te ajută să realizezi un sistem cât mai izolat și standardizat al unei aplicații și a tuturor dependințelor acesteia pentru un mod de lucru independent.

Docker aduce  în plus față de mașini virtuale, faptul că este bazat pe un sistem de containere. Aceste containere te ajută să rulezi cod, tool-uri de sistem, librării de sistem sau orice altceva ce se poate instala pe un server, într-un mod independent de mediul de lucru, garantând că acestea se vor rula în același mod.

Diferența dintre o mașină virtuală și un container Docker este faptul că aceste containere vor avea într-un final același kernel și nu sunt legate de nicio infrastructură sau sistem de operare gazdă. O altă diferență este că nu te obligă la o limitare din punct de vedere al memoriei.

Docker furnizează un set de tool-uri precum: Docker Engine, Docker Compose, Docker Hub, Docker Swarn, Docker Machine, Docker Trusted Registry. Fiecare dintre aceste tool-uri vin cu diferite comenzi.

Docker Engine

Asigură majoritatea funcțiilor de a crea o imagine și de a  rula un container docker. Este core-ul a tuturor celorlalte tool-uri. Să ne asiguram că avem docker instalat pe sistemul gazdă, vom rula comanda

  sudo apt-get install docker-engine

Pornirea clientului daemon:

 sudo service docker start 

Pentru a verifica dacă acesta este instalat :

 docker  --v

Odată ce-l avem pe acesta instalat, putem să începem să ne creăm propria imagine, pentru a realiza acest lucru avem nevoie de a crea un fișier numit Dockerfile.

MAINTAINER Raluca Onaca Boca 
    RUN apt-get update
    RUN apt-get -y upgrade

    # Install apache, PHP, and supplimentary programs. curl and lynx-cur are for debugging the container.
    RUN DEBIAN_FRONTEND=noninteractive apt-get -y install apache2 php5 php5-mysql php5-gd php-pear php5-curl curl
    # Update the PHP.ini file, enable  tags.
    RUN sed -i "s/short_open_tag = Off/short_open_tag = On/" /etc/php5/apache2/php.ini
    # Enable apache mods.
    RUN a2enmod rewrite
    # Manually set up the apache environment variables
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apache2
    ENV APACHE_LOCK_DIR /var/lock/apache2
    ENV APACHE_PID_FILE /var/run/apache2.pid

    VOLUME /var/www/site
    EXPOSE 80
    # Copy site into place.
    # Update the default apache site with the config we created.
    ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf
    # By default, simply start apache.
    CMD /usr/sbin/apache2ctl -D FOREGROUND

Comenzile din acest fișier ne creează o imagine docker având ca sistem de operare ubuntu, ca server al aplicației apache, limbajul de programare php și câteva librării, sincronizarea proiectului prin instrucțiunea și adăugarea fișierului pentru un virtual.

Pentru a crea această imagine :

sudo docker build -t ralucaonaca/first-site:v1 .

Rulând comanda anterioară se va verifica în primul rând dacă avem deja imaginea de ubuntu sau nu. În cazul negativ, atunci se va face un download la aceasta, flag-ul -t indentifică această imagine ca fiind una nou creată a utilizatorului ralucaonaca iar pe nume first-site cu tag-ul :v1.

Un container docker se creează prin instanțierea acestei imagini:

      Câteva dintre comenzile mai importante:

docker ps - lista de containere.

docker stop - oprirea containerului care rulează.

docker images - lista de imagini create.

docker search - căutarea în repository a unei imagini.

docker rmi - ștergerea unei imagini.

docker rm - ștergerea unui container docker

Docker Compose

Acest tool ne ajută să ne creăm multiple containere. După crearea mediului de lucru prin fișierul Dockerfile se creează un fișier docker-compose.yml prin care ne definim serviciile  necesare unei aplicații astfel încât acestea să ruleze concomitent și izolat.

web:
image: ralucaonaca/first-site:latest
ports:
  -"5000:5000"
volumes:
\- /var/www/site:/var/www/site
links:
\- redis
\- db
redis:
image: redis
db:
image: mysql:latest

În acest fișier am definit containerul creat din imaginea ralucaonaca/first-site:latest având două link-uri. Pentru a crea containerul se folosește comanda:

sudo docker-compose up

Un avantaj pentru a folosi docker composer este crearea mai multor containere utilizând o singură comandă, toate acestea containere având același host.

Câteva dintre comenzile mai importante sunt:

docker-compose ps - listarea de containere

docker-compose kill - oprirea containerelor

docker-compose rm - stergerea containerelor oprite

Docker Hub

E un serviciu cloud care ne ajută să ținem o evidență a tuturor imaginilor create. Câteva dintre proprietățile principale sunt:

repository a imaginilor : manipularea și găsirea de imagini atât publice cât și private.

automatizarea build-urilor : asigură conectarea la conturile de github cât și de bitbucket cât și realizarea de imagini automate.

webhooks : o proprietate pentru crearea de imagini automate, ne lasă să facem trigger la anumite acțiuni.

O recapitulare.

Putem spune că acest tool se comportă ca și Git deoarece pornește de la aceeași premisă numai că  va face track la schimbările în sistem.

Pentru căutarea de imagini publice se va folosi comanda docker search ubuntu. Pentru a reuși să faci la o imagine, ai nevoie de a te conecta la acest tool docker login, după logare se poate utiliza comanda docker push /:.

Comparație cu Vagrant 

Vagrant se bazează pe provider-ul de mașină virtuală având ca  provisionare mai multe posibilități : shell, puppet, ansible și multe altele pentru a putea crea un mediu de lucru izolat și independent de sistemul gazdă, în schimb ce pentru Docker nu este nevoie de acest provider.

Folosind Vagrant se poate face provisionarea și prin containere docker de unde putem trage concluzia că docker este o parte complementară pentru Vagrant.

Concluzie

Avantajul că orice imagine docker se poate rula pe orice mașină schimbă un pic regulile jocului. Prin comenzile pull/push se creează o conexiune mai ușoară între dezvoltatorii de soft cât și devops. Un alt avantaj este faptul că se pot crea containere ale aplicației cât și containere pentru baza de date sau pentru un sistem de cache ce se poate partaja între devops și developer-i.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects

Raluca Oanca-Boca a mai scris