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.
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.
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
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
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
docker rmi
docker rm
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
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
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.
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
Vagrant se bazează pe provider-ul de mașină virtuală
Folosind Vagrant se poate face provisionarea și prin containere docker de unde putem trage concluzia că docker este o parte complementară pentru Vagrant.
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.