Print this page

Docker Compose

02 September 2024
Rate this item
(0 votes)

 

1. Compose project by shell-script

 

#!/bin/bash
mkdir -p mysql-data www images/php && docker network create --driver bridge dockernet1
echo 'server {
    listen 80;
    root /var/www/public_html;
    index  index.php index.html index.htm;                                                   #Индексный файл открывается по умолчанию,
    server_name localhost devopz.tech www.devopz.tech;                                       #Конфиг обслуживает запросы приходящие на эти имена сервера
    location ~ \.php$ {                                                                      #Проверка что запрос оканчивается на .php
        fastcgi_pass fpm71:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}' > www/nginx.conf
echo 'server {
    listen 80;
    root /var/www/public_html;
    index  index.php index.html index.htm;                                                   #Индексный файл открывается по умолчанию,
    server_name localhost devopz.tech www.devopz.tech;                                       #Конфиг обслуживает запросы приходящие на эти имена сервера
    location ~ \.php$ {                                                                      #Проверка что запрос оканчивается на .php
        fastcgi_pass compose-fpm71:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}' > www/compos.cnf                                                                          #конфиг виртуального хоста веб-сервера nginx
echo "<?php
$user = 'root';
$pass = 'root';
$dsn = 'mysql:host=mysql1;dbname=information_schema;charset=utf8';
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->query('select * from tables');
$row = $stmt->fetch();
print_r($row);" > www/index.php
echo 'FROM php:7.1-fpm
RUN apt update && apt install -y curl git && docker-php-ext-install pdo pdo_mysql
WORKDIR /var/www/public_html
ENTRYPOINT ["php-fpm"]' > images/fpm71/Dockerfile
docker build -t php71fpm images/fpm71
#docker build -t php71fpm -f images/fpm71/fpm71image images/fpm71
docker run -d          -v ./www:/var/www/public_html                                                    --network dockernet1 --name fpm71 php71fpm
docker run -d -p 80:80 -v ./www/nginx.conf:/etc/nginx/conf.d/default.conf -v ./www:/var/www/public_html --network dockernet1 --name nginx1 nginx
docker run -d          -v ./mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root                       --network dockernet1 --name mysql1 mysql
docker run -d -p 81:80                                -e PMA_HOST=mysql1                                --network dockernet1 --name phpmyadmin1 phpmyadmin
sleep 10 && docker ps -a

2. Compose project by compose.yaml

networks:
  dockernet:
    name: dockernet
services:
  nginx:
    container_name: compose-nginx
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./www/compos.cnf:/etc/nginx/conf.d/default.conf #Изменить конфиг на другой файл
      - ./www:/var/www/public_html
    networks:
      - dockernet
    depends_on: #Имена сервисов а не контейнеров
      - php
      - mysql
  php:
    container_name: compose-fpm71
    build: ./images/fpm71
    volumes:
      - ./www:/var/www/public_html
    networks:
      - dockernet
  mysql:
    container_name: compose-mysql
    image: mysql:latest
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      - dockernet
  phpmyadmin:
    container_name: compose-admin
    image: phpmyadmin:latest
    ports:
      - 82:80
    environment:
      - PMA_HOST=compose-mysql
    networks:
      - dockernet
# docker compose up -d

2. Dockerfile Commands

1. FROM — задаёт базовый (родительский) образ.
2. LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
3. ENV — устанавливает постоянные переменные среды.
4. RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
5. COPY — копирует в контейнер файлы и папки.
6. ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
7. CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
8. WORKDIR — задаёт рабочую директорию для следующей инструкции.
9. ARG — задаёт переменные для передачи Docker во время сборки образа.
10. ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
11. EXPOSE — указывает на необходимость открыть порт.
12. VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.

Этой командой мы можем создать наш Dockerfile: mkdir dockerproject && cd dockerproject && nano Dockerfile

3. Продолжение следует...