- Расширение знаний в области системного администрирования с помощью Docker
- Виртуализация нескольких образов Docker на виртуальной машине
Этот проект должен быть выполнен на виртуальной машине.
- Все файлы, необходимые для настройки вашего проекта, должны быть помещены в папку srcs.
- Также требуется Makefile, который должен находиться в корне вашего каталога. Он должен настроить все ваше приложение (т. е. он должен создать образы Docker с помощью docker-compose.yml).
- Этот предмет требует применения на практике понятий, которые, в зависимости от вашего образования, вы, возможно, еще не усвоили. Поэтому мы советуем вам без колебаний прочитать много документации, связанной с использованием Docker, а также все, что вы найдете полезным для выполнения этого задания.
Этот проект заключается в том, что вы настроили небольшую инфраструктуру, состоящую из различных сервисов по определенным правилам. Весь проект должен быть выполнен в виртуальной машине. Вы должны использовать docker compose. Каждый образ Docker должен иметь то же имя, что и соответствующая служба. Каждая служба должна работать в выделенном контейнере. Для повышения производительности контейнеры должны быть собраны либо из предпоследней стабильной версии Alpine, либо из Debian. Выбор за вами. Вы также должны написать свои собственные Dockerfiles, по одному на каждую службу. Файлы Dockerfile должны вызываться в вашем файле docker-compose.yml вашим Makefile. Это означает, что вы должны сами создавать образы Docker для своего проекта. Затем запрещается извлекать готовые образы Docker, а также использовать такие сервисы, как DockerHub (Alpine/Debian исключены из этого правила).
Затем необходимо настроить:
- Контейнер Docker, содержащий NGINX только с TLSv1.2 или TLSv1.3.
- Контейнер Docker, содержащий WordPress + php-fpm (он должен быть установлен и настроен) только без nginx.
- Контейнер Docker, содержащий только MariaDB без nginx.
- Том, содержащий вашу базу данных WordPress.
- Второй том, содержащий файлы вашего веб-сайта WordPress.
- Docker-сеть, которая устанавливает соединение между вашими контейнерами.
Ваши контейнеры должны быть перезапущены в случае сбоя.
- Контейнер Docker — это не виртуальная машина. Таким образом, не рекомендуется использовать какой-либо хакерский патч, основанный на «tail -f» и т. д., при попытке запустить его. Прочтите о том, как работают демоны и стоит ли их использовать.
- Конечно, использование network:host или --link или links: запрещено. Строка network должна присутствовать в вашем файле dockercompose.yml. Ваши контейнеры не должны запускаться командой, запускающей бесконечный цикл. Таким образом, это также относится к любой команде, используемой в качестве точки входа или используемой в сценариях точки входа. Ниже приведены несколько запрещенных хакерских патчей: tail -f, bash, sleep infinity, while true.
- Прочтите о PID 1 и лучших методах написания файлов Dockerfile.
- В вашей базе данных WordPress должно быть два пользователя, один из которых является администратором. Имя пользователя администратора не может содержать «admin/Admin» или «admin/Administrator» (например, «admin», «admin», «Administrator», «admin-123» и т. д.).
- Ваши тома будут доступны в папке /home/login/data на хост-компьютере с помощью Docker. Логин, естественно, придется заменить на свой.
- Чтобы упростить задачу, вы должны настроить свое доменное имя так, чтобы оно указывало на ваш локальный IP-адрес. Это доменное имя должно быть login.42.fr. Опять же, вы должны использовать свой собственный логин. Например, если ваш логин wil, wil.42.fr будет перенаправлять на IP-адрес, указывающий на сайт wil.
- Последний тег запрещен.
- В ваших файлах Dockerfile не должно быть пароля.
- Обязательно использовать переменные окружения.
- Кроме того, настоятельно рекомендуется использовать файл .env для хранения переменных среды. Файл .env должен находиться в корне каталога srcs.
- Ваш контейнер NGINX должен быть единственной точкой входа в вашу инфраструктуру только через порт 443, используя протокол TLSv1.2 или TLSv1.3.
- VirtualBox: Установка и настройка (для новичков)
- Docker официальная документация
- Docker и Docker-Compose Tutorial
- Образы и контейнеры Docker в картинках
- Docker самый простой и понятный туториал
- Учебник. Создание приложения Docker и предоставление к нему общего доступа с помощью Visual Studio Code
- Dockerfile
- Руководство по Docker Compose для начинающих
- Nginx, Php-Fpm и что это вообще?
- MariaDB
- Установка WordPress с помощью Docker Compose
Docker
– это технология, которая решает проблемы развертывания и масштабирования путем отделения приложений от зависимостей инфраструктуры. Она решает эти проблемы благодаря применению контейнеров, позволяющих упаковать приложение со всеми его зависимостями, включая структуру каталогов, метаданные, пространство процессов, номера сетевых портов и т. д. Приложение, упакованное в контейнер, запускается одинаково на любых машинах и в любых окружениях.Docker-compose
— это система сборки, запуска и управления множеством контейнеров. Docker-compose не входит в единый пакет поставки Docker и устанавливается отдельно. Для сборки кластера контейнеров используется docker-compose.yml.Docker-compose.yml
— конфигурационный файл в YAML-формате, описывающий логику запуска и взаимодействия контейнеров между собой и внешним миром. В сущности инструкции заложенные в docker-compose.yml по логике работы идентичны ключам команды docker run.Dockerfile
— это текстовый файл конфигурации, написанный с использованием специального синтаксиса. В нем описываются пошаговые инструкции по всем командам, которые необходимо выполнить для сборки образа Docker. Файл создаётся по принципу «одна строка — одна команда».Daemon
- фоновая служба на хосте, которая отвечает за создание, запуск и уничтожение контейнеров.Client
- утилита командной строки в Docker для управления демоном. Любое взаимодействие с контейнером проходит через Daemon.Image
- неизменяемый файл (образ), из которого можно неограниченное количество раз развернуть контейнер. Образ — это инертный, неизменяемый файл, который по сути является снимком контейнера. Образы создаются с помощью команды build, и они создают контейнер при запуске с помощью команды run. Образы хранятся в реестре Docker, таком как Registry.hub.docker.com. Поскольку они могут стать довольно большими, образы разработаны так, чтобы состоять из слоев других образов, что позволяет отправлять минимальный объем данных при передаче изображений по сети.Container
- запущенное приложение, которое развернули из образа. Используя метафору программирования, если изображение — это класс, то контейнер — это экземпляр класса — объект времени выполнения. Это легкие и портативные инкапсуляции среды, в которой можно запускать приложения.Registry
- служба в Docker, выполняющая функции репозитория (хранилища). Позволяет следить за версиями образов, создавать приватные репозитории.Docker Desktop
- приложение, позволяющее локально собирать, выполнять и тестировать контейнеры. Работает на Windows и macOS.Docker volumes
- тома для постоянного хранения информации. По умолчанию в Docker папки хранилищ создаются на хост-машине, но предусмотрена и возможность подключения удаленных хранилищ. Использование томов позволяет лучшим образом настроить хранение данных.Docker vs virtual machine
- основное различие между контейнерами и виртуальными машинами заключается в том, что контейнеры охватывают только уровень приложения и полагаются на базовое ядро операционной системы, в случае виртуальной машины создается новый экземпляр операционной системы.
- Установи плагин Remote - SSH
- Окрой командную сроку (нажать
⇧``⌘``P
или Shift + Command + P на школьных маках) - Введи / выбери
Remote-SSH: Add New SSH Host
- Пишем соединение по ssh
ssh root@localhost -p 42
- Выбираем
/Users/einterdi/.ssh/config
и жмакаем на кнопкуПодключиться
- В нижнем левом углу VS Code нажимаем на зеленый значек соединения
- В открывшейся командной строки выбирай
Connect to Host
, выбериlocalhost
, введи пароль (от root пользователя виртуалки) и работай
Команды docker
работают из любой директории
docker --help
- показать все доступные командыdocker info
- информация по докерамdocker ps
- вывести список докеровdocker images
- вывести образы и их размерыdocker network ls
- вывести все сетевые соединенияdocker volume ls
- вывести все volumedocker exec -it <имя_или_id_контейнера> /bin/sh
- зайти в контейнер (ядро alpine)docker exec -it <имя_или_id_контейнера> /bash
- зайти в контейнер (ядро debian buster)docker stop <имя_или_id_контейнера>
- останавливает выбранный контейнерdocker start <имя_или_id_контейнера>
- запускает выбранный контейнерdocker restart <имя_или_id_контейнера>
- перезапускает выбранный контейнерdocker exec -it mariadb mysql
- позволяет зайти в бд MariaDB под пользователемdocker exec -it mariadb mysql -u root
- позволяет зайти в бд MariaDB под rootshow databases;
- просмотр бд
Команды docker-compose
работают из директории, где находится файл docker-compose.yml
docker-compose --help
- показать все доступные командыdocker-compose ps
- вывести список докеровdocker-compose up -d
- запускает контейнеры по образамdocker-compose stop
- остановить контейнерыdocker-compose down
- остановить и удалить контейнеры, сети, образы и томаdocker-compose --build
- создает образы из Dockerfiledocker-compose images
вывести образы и их размерыdocker-compose kill <имя_или_id_контейнера>
- останавливает выбранный контейнер
- Настройте кеш Redis для своего веб-сайта WordPress, чтобы правильно управлять кешем (1).
- Настройте контейнер FTP-сервер, указывающий на том вашего сайта WordPress (2).
- Настроить Adminer (3).
- Создайте простой статический веб-сайт на выбранном вами языке, кроме PHP (да, PHP исключен!). Например, сайт-витрина или сайт для представления вашего резюме (4).
- Настройте сервис по вашему выбору, который вы считаете полезным. Во время защиты вам придется обосновать свой выбор (5).
- Redis
Устанавливаем его из плагинов wordpress
2. Vsftpd
Из виртуальной машины запускаем приложение FileZilla
Host: 127.0.0.1
Username: ftpuser
Password: ftppass
Port: 21
http://localhost:8080
- запуск adminer
http://localhost/
- Portainer
Запускаем контейнер portainer отдельно от остальных:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1
https://localhost:9443
Login: admin
Password: einterdi
- Видео защиты проекта от sjacki
- Docker Hub - популярный публичный репозиторий, куда вы можете загружать свои образы (images) для совместной работы с командой, заказчиками или другими пользователями.
- Alpine Linux - дистрибутив Linux, ориентированный на безопасность, легковесность и нетребовательность к ресурсам.