To jest stara wersja strony!
Docker - wprowadzenie
Terminologia
Klient dockera - polecenie docker używane do kontrolowania środowiska dockera oraz komunikacji ze zdalnymi serwerami dockera.
Serwer dockera - polecenie docker uruchomione w trybie daemona. Zamienia serwer linuksowy w serwer dokera na którym można uruchamiać, budować i wyłączać kontenery za pomocą zdalnego klienta.
Obrazy dockera - obrazy zawierające jedną lub więcej abstrakcyjnych warstw filesystemu oraz istotne metadane reprezentujące wszystkie pliki niezbędne do uruchomienia aplikacji w kontenerze. Pojedynczy obraz może być kopiowany na inne hosty. Obraz z reguły posiada nazwę i tag, tag jest używany głównie do identyfikacji wydania obrazu.
Kontener dockera - jest to linuksowy kontener zainicjowany z konkretnego obrazu. Konkretny kontener może istnieć tylko raz, jednak można łatwo stworzyć wiele kontenerów z tego samego obrazu.
Wymagania
Linux kernel w wersji nowszej niż 3.8
Aplikacja musi działąć a FOREGROUNDZIE, nie może być demonizowana (można uruchamiać aplikacje jako daemony za pomocą systemd, ale to nie jest przedmiotem laboratoriów)
Instalacja
Instalacja za pomocą mamangera pakietów:
apt install docker.io
Włączanie usługi dockera wraz ze startem systemu:
systemctl enable docker
Aby nie musieć korzystać z *sudo* za każdym razem warto dodać się też do grupy *docker*
Dockerfile
Aby zbudować obraz niezbędny jest poprawny *Dockerfile*, który opisuje każdą z warstw abstrakcji oraz metadane, które znajdą się w wyjściowym obrazie.
Typowy *Dockerfile* dla aplikacji *nodejs* może wyglądać tak:
FROM node:0.10
MAINTAINER Jan Kowalski <jkowalski@fajnymail.com>
LABEL "ocena"="5 gwiazdek" "klasa"="pierwsza"
USER root
ENV AP /data/app
ENV SCPATH /etc/supervisor/conf.d
RUN apt -y update
RUN apt -y install supervisor
RUN mkdir -p /var/log/supervisor
ADD .supervisor/conf.d/* $SCPATH
ADD *.js* $AP/
WORKDIR $AP
RUN npm install
CMD ["supervisord", "-n"]
Każda z linii nakłada na obraz kolejną warstwę abstrakcji, dobrą praktyką jest zaczynać od najniższego poziomu jako od systemu, gdyż w przypadku zmian, np ścieżki w zmiennej AP, budowa nowego obrazu rozpocznie się od zmienionej linii, wszystkie wcześniejsze zostaną pominięte, co zaoszczędzi czasu przy budowaniu.
Poniżej wyjaśnię anatomię pliku *Dockerfile* na powyższym przykładzie.
FROM node:0.10 - oznacza, że nasz obraz będzie budowany na podstawie obrazu node w wersji 0.10.X, by zablokować do konkretnej wersji trzeba ją uściślić, np.: node:0.10.33.
MAINTAINER Jan Kowalski jkowalski@fajnymail.com - pozwala dodać kontakt do autora, propaguje autora również w metadanych wszystkich tworzonych obrazów.
LABEL „ocena”=„5 gwiazdek” „klasa”=„pierwsza” - ta funkcjonalność istnieje od dockera 1.6, pozwala dodawać metadane w formie klucz=wartość, można na ich podstawie potem wyszukiwać i identyfikować kontenery
USER root - domyślnie docker uruchamia wszystkie procesy w kontenerze jako root, za pomocą USER można to zmienić (ze względóœ bezpieczeństwa nie polecam produkcyjnie uruchamiać konteneróœ z procesami roota, przypominam, że pomimo izolacji, nadal korzystamy z jądra gospodarza)
ENV AP /data/app - zmienna, które mogą być użyte podczas budowy obrazu
ENV SCPATH /etc/supervisor/conf.d - zmienna, które mogą być użyte podczas budowy obrazu
RUN apt -y update - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności.
RUN apt -y install supervisor - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności.
RUN mkdir -p /var/log/supervisor - polecenie RUN uruchamia jakąś instrukcję podczas budowy obrazu, np żeby zainstalować określone oprogramowanie czy zapewnić zależności.
ADD .supervisor/conf.d/* $SCPATH
ADD *.js* $AP/ - ADD kopiuje pliki z lokalnego systemu do obrazu
WORKDIR $AP
RUN npm install - WORKDIR zmienia aktualny katalog w jakim pracuje podczas budowania obrazu dla kolejnych instrukcji
CMD [„supervisord”, „-n”] - CMD definiuje polecenie uruchamiane razem kontenerem (właściwą aplikację)
Każda kolejna linia Dockerfile i każdy krok tworzy nową warstwę, któ©a zależy od poprzedniej!
Budowanie obrazu
Obrazy dockera budujemy za pomocą polecenia uruchamianego w katalogu z Dockerfile:
'docker build -t example/docker-node-hello:latest .
'
=LABY=
lab 1 (Instalacja i przygotowanie dockera)
* Zrób update systemu (apt update && apt upgrade)
* Zainstaluj docker-engine (apt install docker.io)
* Ustaw MTU na wartość 1454 (dodać –mtu=1454 do obecnych OPTIONS w pliku /etc/default/docker)
* Ustaw autostart usługi docker (systemctl enable docker)
* Uruchom usługę docker (systemctl start docker)
* Zweryfikuj instalację dockera przez uruchomienie kontenera hello-world (docker run hello world)
* Zrestartuj hosta gospodarza
* Zweryfikuj status usługi docker przez uruchomienie kontenera hello-world jeszcze raz
* Zweryfikuj wartość MTU na interfejsie docker0 (ip address show dev docker0)