[7] Docker – Tworzenie własnych kontenerów
26 lutego 2021Po 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