Pierwsze kroki z Dockerem

Red Hat, wraz z pojawieniem się RHEL7, zaczął wspierać kontenery – czyli mechanizm izolacji aplikacji. Postawiono na bardzo popularną implementację – Docker.

Pytanie: Jak zarządzać setkami serwerów, które serwują tysiące kontenerów? Odpowiedź daje Project Atomic www.projectatomic.io

Projekt ten ma na celu szybkie wdrażanie aplikacji „kontenerowych” z uwzględnieniem łatwej aktualizacji lub wycofania wprowadzonych zmian. Atomic Host – główna część Project Atomic – to minimalny system operacyjny stworzony tylko w jednym celu – uruchamiania aplikacji w kontenerach.

W odpowiedzi na potrzeby rynku Red Hat wprowadził dedykowane szkolenie z tego produktu: RH270 – Managing Containers with Red Hat® Enterprise Linux® Atomic Host

Zanim zaczniemy administrować setkami kontenerów warto skupić się na jednym. Przyjrzyjmy się, jak w praktyczny sposób wykorzystać taki kontener.

Wykorzystamy w przykładach system z rodziny Red Hat – CentOS. Czy mogę uruchomić aplikację tak, aby aplikacja ta „nie widziała” innych procesów, aby miała swoją „własną” sieć i swój „własny” dysk? Czy mogę uruchomić na Fedorze aplikację z Ubuntu, Debiana? Tak właśnie działa kontener, a Docker upraszcza administracje. Wystarczy umieścić aplikację wraz z zależnościami (aplikacjami i bibliotekami) w takim kontenerze i gotowe. Izolacja aplikacji poprawia nam bezpieczeństwo, a jednocześnie kontener jest „lżejszym” rozwiązaniem niż wykorzystana w tym samym celu wirtualizacja.

Instalacja i uruchomienie Dockera:

# dnf install docker 
# systemctl enable docker.service 
# systemctl start docker.service

Nie trzeba tworzyć samodzielnie obrazów (dysków) kontenerów – łatwiej skorzystać z gotowych umieszczonych z ogólnodostępnym repozytorium (registry).

Pobierzmy obraz CentOS:

# docker search centos
# docker pull docker.io/centos
# docker images

Teraz uruchamiamy kontener interaktywnie:

# docker run -it docker.io/centos:latest
[[email protected] /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:48 ?        00:00:00 /bin/bash
root        15     1  0 13:48 ?        00:00:00 ps -ef
[[email protected] /]# echo TEST > plik.txt
[[email protected] /]# exit
exit
# docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                     PORTS               NAMES
d9c074502983        docker.io/centos:latest   "/bin/bash"         3 minutes ago       Exited (0) 2 minutes ago                       gigantic_pare

Na podstawie jednego obrazu (#docker images) możemy wygenerować wiele kontenerów, ale usunięcie (#docker rm) kontenera powoduje utratę wszystkich danych. Zachowajmy więc nasz kontener:

# docker commit gigantic_pare docker.io/centos:v001
3319187f9572f43e8d2858afd893848247425b6b7d064a48e6f2c3570257d5be
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/centos    v001                3319187f9572        10 seconds ago      196.6 MB
docker.io/centos    latest              c8a648134623        3 days ago          196.6 MB
Gdy chcemy usunąć nasz kontener:
# docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                     PORTS               NAMES
d9c074502983        docker.io/centos:latest   "/bin/bash"         3 minutes ago       Exited (0) 2 minutes ago                       gigantic_pare
# docker rm gigantic_pare
d9c0745029830241bd0323ae51234f77cc2822893de0623ed484283577a2f93a  gigantic_pare
Teraz możemy uruchomić kontener z nowego obrazu:
# docker run -it docker.io/centos:v001
[[email protected] /]# cat plik.txt
TEST
[[email protected] /]# exit
exit

Zatem możemy pobierać obrazy i je modyfikować. Repozytorium (registry) możemy zainstalować u siebie, gdzie możemy umieszczać nasze własne obrazy. W ten sposób mamy możliwość w łatwy sposób np: testować nowe aplikacje.