Данный проект направлен на расширение знаний о системном администрировании с помощью Docker. Виртуализации нескольких Docker образов на хосте.
Необходимо создать небольшую инфраструктуру, состоящую из различных сервисов.
- Проект должен быть выполнен на виртуальной машине;
- Все файлы необходимые для конфигурации проекта, должны быть помещены в папку
srcs
; Makefile
должен быть расположен в корне проекта. Он должен собрать все Docker образы и поднять контейнеры используяdocker-compose.yml
;- Каждый Docker образ должен иметь то же имя, что и соответствующий сервис;
- Каждый сервис должен запускаться в отдельном контейнере;
- Контейнеры должны быть собраны либо из предпоследней стабильной версии
Alpine Linux
, либоDebian Buster
; - Для каждого сервиса должен быть собственный
Dockerfile
. ВсеDockerfile
должны быть вызваныdocker-compose.yml
черезMakefile
; - Во всех
Dockerfile
запрещено прописывать пароли; - В проекте запрещается использовать готовые Docker образы и сервисы вроде
DockerHub
. ИсключениеAlpine
/Debian
; - Запрещено использовать
network:
host
or--link
orlinks:
; - Запрещено запускать контейнеры с помощью команд и скриптов, выполняющих бесконечные циклы
(примеры
tail -f
,bash
,sleep infinity
,while true
); - Единственной точкой входа должен выступать контейнер NGINX по порту
443
, используя протокол TLSv1.2 или TLSv1.3.
- Создать Docker-контейнер, содержащий
NGINX
с TLSv1.2 или TLSv1.3; - Создать Docker-контейнер, содержащий
WordPress
+ php-fpm (все должно быть установлено и настроено); - Создать Docker-контейнер, содержащий
MariaDB
; - Хранилище (
volume
) для файлов сайта на WordPress; - Хранилище (
volume
) для базы данных WordPress; - Docker-сеть, которая устанавливает связь между контейнерами;
- Docker-контейнеры должны перезапускаться в случае сбоев.
- В базе данных должно быть два пользователя, один из которых - администратор.
Но администратор не должен иметь логин и пароль вроде:
admin
,administrator
,Administrator
,admin-123
и т.д.; - Хранилища (
volume
) должны быть расположены на хосте по пути/home/<login>/data
, где<login>
ник из Intra; - Настроить свое доменное имя так, чтобы оно указывало на ваш локальный IP-адрес.
Доменное имя должно быть
<login>.42.fr
. - Использовать переменное окружение. Рекомендуется использовать файл
.env
и хранить его в корне папкиsrcs
.
Если основная часть работает безупречно, то можно приступать к бонусной части.
Не стоит забывать, что:
- Каждый сервис должен запускаться в отдельном контейнере;
- Для каждого сервиса должен быть собственный
Dockerfile
.
- Настроить
Redis
кэш для сайтаWordpress
, для управления кэшем; - Настроить
FTP-server
указывающий на хранилище с сайтомWordpress
; - Создайте простой статический сайт, на любом языке кроме PHP;
- Поднять контейнер с
Adminer
; - Поднять контейнер с любым сервисом на свой выбор, который считаете полезным.
* Если сервису понадобится дополнительное хранилище, просто создайте его. Также можно открыть больше портов, если это необходимо.
Сервис на свой выбор
Начиная делать данный проект, у меня не было четкого плана на дополнительный сервис.Так уж сложилось, что увидел первым Portainer
и он запал в душу.
Объяснять зачем и почему не буду, тут надо просто поднять контейнер с ним)
Более подробная информации: Официальный сайт | Документация
И есть одна неприятная пасхалка, которая фиксится, но мне было лень.
Поэтому сразу предупреждаю, что для первого входа в Portainer, есть timeout error.
Вход в поднятый контейнер
Когда контейнер поднят и хочется посмотреть, что там внутри.docker exec -it <container> <shell>
<container>
- заменяется на <container_id> или <name> (docker ps
)
<shell>
- bash
если контейнер на базе debian, sh
на базе alpine
Makefile для ленивых
Если надо часто залазить внутрь контейнера, рекомендую прописать в Makefile правило.Для примера возьмем mariadb
:
...
mariadb:
docker exec -it mariadb bash
...
Это позволит в 2 слова заходить в контейнер.
make mariadb
Ручная сборка образа
Когда вы не понимаете или хотите понять, как рождается ваш образ, есть простое решение. Собрать его самому с 0 использую все команды и конфиги.docker run -it <os>
<os>
- подставляем debian:buster
или alpine
Не стоит забывать прописывать версию os
, если образ не latest
Проверка состояния Wordpress
Поскольку виртуальная машина грузит Firefox очень долго, а проверить сайт надо по быстрее. Можно получить ответ от сервера более быстрым способом.curl -Ik https://<login>.42.fr
<login>
- подставляем свой login из Intra.
(если конечно не забыли поменять localhost
в /etc/hosts
и установлен curl
)