Professional Documents
Culture Documents
Лаб робота № 9.1 Створення контейнерів Nginx Php-Fpm MongoDB
Лаб робота № 9.1 Створення контейнерів Nginx Php-Fpm MongoDB
1
Створення проекту для web-розробки, який складається з наборів контейнерів
з використанням Docker Compose та Dockerfile
Теоретичні відомості
Для створення контейнерів необхідно вміти працювати з Docker Compose та Dockerfile.
3
#########
# Dockerfile to build MongoDB container images
# Based on Ubuntu
#########
4
# Install MongoDB package (.deb)
RUN apt-get install -y mongodb
Для виведення всіх можливих ключів введіть sudo docker build -help
5
полегшує збірку і запуск системи, що складається з декількох контейнерів, пов'язаних
між собою.
6
Перший рядок файлу YAML використовується в якості частини імені контейнера.
Другий рядок вказує, який образ використовується для створення контейнера.
При запуску команди docker-compose up вона буде шукати локальний образ за
вказаним іменем, тобто hello-world. Після цього можна зберегти і закрити файл.
При першому запуску команди, якщо локальний образ з ім'ям hello-world відсутній,
Docker Compose буде завантажувати його з відкритого сховища Docker Hub:
Output
Pulling my-test (hello-world: latest) ...
latest: Pulling from library / hello-world
c04b14da8d14: Downloading
[============================================== ====>] c04b14da8d14:
Extracting [======================================== ==========>]
c04b14da8d14: Extracting [==================================
================>] c04b14da8d14: Pull complete
Digest: sha256:
0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world: latest
. . .
Після завантаження образу docker-compose створює контейнер, поміщає в нього і
запускає програму hello, що, в свою чергу, підтверджує, що установка, виконана
успішно:
Output
. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be
working correctly.
my-test_1 |
. . .
Далі програма відображає пояснення того, що вона зробила:
Output of docker-compose up
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
7
4. The Docker daemon streamed that output to the Docker client, which sent it to your
terminal.
PORTS NAMES
drunk_payne
Можемо отримати інформацію, яка нам буде потрібна для видалення контейнера,
коли ми закінчимо працювати з ним.
В папці MySQL будуть зберігатися бази. Зручно створювати резервні копії (backup copy)
баз та їх переносити.
В папці Nginx будуть зберігатися лог-файли, файл конфігурації і наш проект.
В папку PHP будемо складати Dockerfile з налаштуваннями і php.ini.
В корені (це папка /mage) буде лежати файл docker-compose.yml.
Можна використовувати будь-який інший редактор (наприклад, mc). Якщо його немає -
можна встановити за допомогою:
sudo apt install nano
І додаємо до конфігураційного файлу nginx.conf наступний код:
server {
listen 80;
index index.php index.html index.htm;
server_name magento2.dev;
set $MAGE_ROOT /var/www/magento2;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root $MAGE_ROOT;
location ~*\.php$ {
try_files $uri $uri/ /index.php last;
fastcgi_split_path_info (.+?\.php)(/.*)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~*.php/ {rewrite (.*.php)/$1 last; }
}
9
Це мінімальна конфігурація для того, щоб все запрацювало.
У першому блоці описуємо який порт буде слухати, перелічуємо можливі index
сторінки, називаємо та створюємо alias (псевдонім) для довгого шляху, де лежить
magento2, пишемо – які потрібні логи і вказуємо де вони обов'язково повинні
зберігаються, вказуємо папку там, де знаходиться magento2 (у даному випадку наш alias
$ MAGE_ROOT) .
Третій блок потрібен для вирішення проблеми відображення, в проекті з’явилася пуста
сторінка. З документації написано, що magento2 вимагає реврайтинга (rewriting -
обробка початкових текстових матеріалів з метою їх подальшого використання). (В
інших проектах таких проблем не виникало).
Переходимо до PHP:
Починаємо з Dockerfile
cd /mage/PHP
touch Dockerfile php.ini
nano Dockerfile
Збираємо самостійно:
FROM php:7.1.3-fpm
WORKDIR /var/www/magento2
CMD ["php-fpm"]
always_populate_raw_post_data = -1
cgi.fix_pathinfo = 1
fastcgi_split_path_info = 1
max_execution_time = 18000
zlib.output_compression = on
suhosin.session.cryptua = off
display_errors = Off
# Пропишемо версію
version: '3.3'
# Перелічимо сервіси
services:
nginx:
# Пропишимо який образ ми хочемо використати
image: nginx:latest
# Дамо назву контейнеру
container_name: nginx
11
# Перекидання портів
ports:
- "80:80"
- "443: 443"
# Перекидання папок
volumes:
- ./Nginx/core:/etc/nginx/conf.d
- ./Nginx/www:/var/www/
- ./Nginx/Logs:/var/log/nginx/
- ./Nginx/html:/usr/share/nginx/html/
# Вкажемо залежності
links:
- php
mysql:
image: mysql:latest
ports:
- "3306: 3306"
# Дамо назву контейнеру
container_name: mysql
# Пропишемо налаштування, замість mypassword пропонується прописати більш
складний пароль, який належить root
environment:
- MYSQL_ROOT_PASSWORD=mypassword
- MYSQL_DATABASE=magento2
- MYSQL_USER=magento2
- MYSQL_PASSWORD=magento2
volumes:
- ./MySQL:/var/lib/mysql
php:
# Будуємо з підтримкою dockerfile, вказавши директорію, де він знаходиться
build: ./PHP
container_name: php-fpm
volumes:
- ./Nginx/www:/var/www
links:
- mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- 8090: 80
links:
- mysql:db
3.1. Зайти в SQL через phpmyadmin localhost:8090, логін root, пароль mypassword,
вибрати базу magento2 і ввести sql запит:
insert into core_config_data (config_id, scope, scope_id, path, value)
values (null, 'default', 0, 'dev/static/sign', 0)
Цей контейнер повинен перечитати і все перевірити. Після цього все повинно
коректно відображатися.
Підготувати звіт
1. Описати хід виконання поставлених завдань, надаючи покроковий знімок
екрану (screenshot).
2. Висновки по роботі.
Контрольні питання
1. Що таке Docker Compose?
2. Що таке Dockerfile?
3. Які вам відомі команди для роботи з Dockerfile?
4. У чому полягає алгоритм створення проекту для розроблення web-
застосування?
Література
1. Моэт Э. Использование Docker. Москва : ДМК Пресс, 2017. 354 с.
2. Сейерс Э. Х., Милл А. Docker на практике. Москва : ДМК. 2019. 516 с.
3. Парминдер Сингх Кочер. Микросервисы и контейнеры Docker. Москва : ДМК
Пресс, 2019. 240 с.
4. Сайфан Джиджи. Осваиваем Kubernetes. Оркестрация контейнерных
архитектур. Санкт-Петербург : Питер, 2016. 522 с.
5. https://dker.ru/docs/ - Docker документація російською
13