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. Продолжение следует...