Данный проект направлен на расширение знаний о системном администрировании с помощью 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:hostor--linkorlinks:; - Запрещено запускать контейнеры с помощью команд и скриптов, выполняющих бесконечные циклы
(примеры
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)



