[7] Docker – Tworzenie własnych kontenerów

26 lutego 2021 Wyłączono przez Adam [zicherka] Nogły

Po zainstalowaniu Docker Compose, łatwo jest skonfigurować i uruchomić wiele kontenerów jako aplikację Docker.

[1] Zainstaluj Docker Compose

[root@vlsr01 ~]# curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 633 100 633 0 0 998 0 --:--:-- --:--:-- --:--:-- 996
100 11.6M 100 11.6M 0 0 3262k 0 0:00:03 0:00:03 --:--:-- 4969k
[root@vlsr01 ~]# chmod 755 /usr/local/bin/docker-compose
[root@vlsr01 ~]# docker-compose --version
docker-compose version 1.27.4, build 40524192

[2] Dla przykładu skonfigurujemy kontener z usługą httpd i bazą danych.

# zdefiniuj kontener usługi Web
[root@vlsr01 ~]# mcedit Dockerfile
# stwórz nowy
FROM centos
MAINTAINER ZicherLab <root@zicher.lab>

RUN dnf -y install nginx

EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

# zdefiniuj konfigurację aplikacji
[root@vlsr01 ~]# mcedit docker-compose.yml
# stwórz nowy
version: '3'
services:
db:
image: mariadb
volumes:
- /var/lib/docker/disk01:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: zicher
MYSQL_PASSWORD: password
MYSQL_DATABASE: zicher_db
ports:
- "3306:3306"
web:
build: .
ports:
- "80:80"
volumes:
- /var/lib/docker/disk02:/usr/share/nginx/html

# zbuduj i uruchom kontener (nie możesz mieć innych usług uruchomionych na hoście na portach 80 i 3306)
[root@vlsr01 ~]# docker-compose up –d

# teraz trzeba troszkę poczekać, aż pobrane zostaną potrzebne pakiety i przeprowadzona zostanie konfiguracja

[root@vlsr01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
824eb0a89641 root_web "/usr/sbin/nginx -g …" 6 minutes ago Up About a minute 0.0.0.0:80->80/tcp root_web_1
ba235ddee988 mariadb "docker-entrypoint.s…" 6 minutes ago Up About a minute 0.0.0.0:3306->3306/tcp root_db_1
a220dbbd5c81 zicher.lab/centos-httpd "/usr/sbin/httpd -D …" 21 hours ago Up 21 hours 0.0.0.0:8082->80/tcp charming_hofstadter
7db34cff96b6 zicher.lab/centos-nginx "/usr/sbin/nginx -g …" 22 hours ago Up 22 hours 0.0.0.0:8081->80/tcp cool_carson

# sprawdźmy poprawność pracy (trzeba mieć zainstalowaną komendę [mysql])
[root@vlsr01 ~]# mysql -h 127.0.0.1 -u root -p -e "show variables like 'hostname';"
Enter password: # wpisz hasło
+---------------+--------------+
| Variable_name | Value |
+---------------+--------------+
| hostname | ba235ddee988 |
+---------------+--------------+
[root@vlsr01 ~]# mysql -h 127.0.0.1 -u zicher -p -e "show databases;"
Enter password: # wpisz hasło
+--------------------+
| Database |
+--------------------+
| information_schema |
| zicher_db |
+--------------------+

[root@vlsr01 ~]# echo "Docker COMPOSE @ ZICHER.LAB" > /var/lib/docker/disk02/index.html
[root@vlsr01 ~]# curl 127.0.0.1
Docker COMPOSE @ ZICHER.LAB

[3] Pozostałe podstawowe operacje na Docker Compoze:

# sprawdź status kontenera
[root@vlsr01 ~]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------
root_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
root_web_1 /usr/sbin/nginx -g daemon off; Up 0.0.0.0:80->80/tcp

# pokaż logi kontenera
[root@vlsr01 ~]# docker-compose logs
Attaching to root_web_1, root_db_1
db_1 | 2021-02-25 08:12:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.9+maria~focal started.


db_1 | 2021-02-25 8:24:55 0 [Note] mysqld: ready for connections.
db_1 | Version: '10.5.9-MariaDB-1:10.5.9+maria~focal' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution

# uruchom jakąkolwiek komendę w kontenerze
# nazwa kontenera jest ustawiona w [docker-compose.yml]
[root@vlsr01 ~]# docker-compose exec db /bin/bash
root@ba235ddee988:/#

# zatrzymaj aplikację i wyłącz kontenery
[root@vlsr01 ~]# docker-compose stop
Stopping root_web_1 ... done
Stopping root_db_1 ... done

# uruchom samą usługę w kontenerze
# jeśli są ustawione/wymagane zależności pozostałe kontenery też wystartują
[root@vlsr01 ~]# docker-compose up -d web
Starting root_web_1 ... done
[root@vlsr01 ~]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
root_db_1 docker-entrypoint.sh mysqld Exit 0
root_web_1 /usr/sbin/nginx -g daemon off; Up 0.0.0.0:80->80/tcp

# usuń wszystkie kontenery w aplikacji
# jeśli kontener jest uruchomiony, nie zostanie usunięty
[root@vlsr01 ~]# docker-compose rm
Going to remove root_db_1
Are you sure? [yN] Y
Removing root_db_1 ... done