Docker je platforma za virtualizaciju razvojnih projekata. Tehnologija je nešto poput VirtualBox-a kojeg podešavamo sa skriptama i na kojem obično imamo posebne minimalizirane verzije Linux-a.

A zašto ga koristimo?

Pa zato što imamo projekt koji se nalazi u realnom razvojnom okruženju. Odnosno projekt kojeg je moguće prebaciti na bilo koji OS.

Ja naravno koristim Linux <3 (trenutačno Debian) pa ćemo postaviti Docker na Linux platformu.

Debian

U terminalu “kastamo spel” za instalaciju:

sudo apt-get install docker docker-compose

Pa pokrećemo docker servis:

sudo systemctl start docker

Sudi me sudo

Obično nam treba ‘sudo’ komanda za korištenje dockera. Da to zaobiđemo koristimo:

sudo usermod -aG docker ${USER}

Potreban je restart računala.
Nakon restarta ponovno pokrenite docker servis.

Kontejneri

U VirtualBox-u imamo “image” sa operativnim sustavom. Radi se o običnoj binary datoteci koje se simulira pravi harddisk. Kontejneri su više-manje to. Image sa operativnim sustavom, serverom, serverskim jezikom i projektom. Kontejneri kontejneri mogu biti modularni koji za povezivanje koriste dobro nam znane, Linux bridge networking/socket tehnologije. Takve modularne elemente je moguće slagati/kombinirati u veće projekte. Kontejnere nalazimo online na:

https://hub.docker.com/

Hello world

Ovo je testni kontejner:

https://hub.docker.com/_/hello-world

…pa ga preuzimamo sa:

docker pull hello-world

Sada možemo unijeti naredbu s kojom vidimo instalirane image:

docker images

Ili za info instaliranog image-a:

docker images hello-world

A docker sa slikom pokrećemo sa:

docker run hello-world

Sve to super, al de mi gui…

Ispočetka Docker nije dolazio za GUI verzijom za Linux…

Pa su linuksšćani/fribiesdiušćani bili primorani koristiti alternative. Na Linuxu postoji par opcija. Mi ćemo uzeti Portainer koji ima i besplatnu verziju.

https://hub.docker.com/r/portainer/portainer-ce

Pa pulamo image:

docker pull portainer/portainer-ce

Volume je međuspremnik kojega kontejneri koriste za spremanje podataka
koji ostaju nakon ponovnog učitavanja.

docker volume create portainer_data

I napokon startamo kontejner:

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Preusmjerite vaš interent preglednik na:

http://localhost:9000/

Pravimo ‘admin’ korisnika i kliknemo na “Get started”.

…i kliknemo na ‘local’:

Pristup kontejneru preko terminala

U Portainer-u idemo na ‘Containers’ tab pa nakon toga kliknemo na sličicu terminala i zatim na ‘Connect’ dugme.

Još o terminal naredbama

Taskmanager za kontejnere:

docker ps

Za uklanjanje kontejnera koristimo ‘rm’ argument (id dobijemo sa ‘docker images’):

docker rm -f <container-id-or-name>

Da bismo zaustavili kontejner:

sudo docker stop <container-id-or-name>

Compose

Za kompliciranije projekte koristimo ‘docker compose’. To je u biti YAML datoteka sa konfiguracijom. Sa ‘compose’ mi pravimo “modularne” spojeve između docker kontejera.

Pa ćemo za probu instalirati najomiljeniju web aplikaciju na internetu, WordPress…

mkdir ./wordpress/
cd ./wordpress/
touch ./docker-compose.yml

Sadržaj ‘docker-compose.yml’:

version: '3.3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "7000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

I sada samo (moramo biti u novom ‘wordpress’ diru):

docker-compose up --build

Ukoliko zaglavite, problemi sa error-ima ili slično, otvorite Portainer, na ‘Containers’ tabu izaberite, zaustavite ili obrišite problematične kontejnere. A u ‘Networks’ tabu možete obrisati problematične konekcije. Nakon toga pokušajte ponovno build komandu.

Na kraju u pregledniku otvaramo:

http://localhost:7000