SimpleDocker

0

Описание

Developing a simple docker image for my own server

Языки

  • Shell56%
  • Dockerfile23,7%
  • C20,3%
README.md

Simple Docker

Введение в докер. Разработка простого докер образа для собственного сервера.

Contents

Готовый докер
Операции с контейнером
Мини веб-сервер
Свой докер
Dockle
Базовый Docker Compose

Task

В качестве результата работы по первым двум задачам должен быть предоставлен отчет. В каждой части задания указано, что должно быть помещено в отчёт, после её выполнения. Это могут быть ответы на вопросы, скриншоты и т.д.

В качестве результата работы по третьей задаче должны быть предоставлены исходные файлы для запуска веб-сервера.

В качестве результата работы по четвёртой и пятой задачам должны быть предоставлены докерфайлы.

В качестве результата работы по шестой задаче должен быть предоставлен файл docker-compose.yml и нужные для его запуска докерфайлы (если они не были предоставлены ранее).

  • В репозиторий, в папку src, должен быть загружен отчёт с расширением .md.
  • В отчёте должны быть выделены все части задания, как заголовки 2-го уровня.
  • В рамках одной части задания всё, что помещается в отчёт, должно быть оформлено в виде списка.
  • Каждый скриншот в отчёте должен быть кратко подписан (что показано на скриншоте).
  • Все скриншоты обрезаны так, чтобы была видна только нужная часть экрана.
  • На одном скриншоте допускается отображение сразу нескольких пунктов задания, но они все должны быть описаны в подписи к скриншоту.
  • В репозиторий, в папку src/server, должны быть загружены исходные файлы для запуска веб-сервера из третьего задания.
  • В репозиторий, в папку src, должны быть загружены итоговые докерфайлы для запуска образов из четвёртого и пятого заданий.
  • В репозиторий, в папку src, должен быть загружен docker-compose.yml шестого задания.
  • Необходимо быть готовым продемонстрировать решение вживую при необходимости.

Part 1. Готовый докер

В качестве конечной цели своей небольшой практики вы сразу выбрали написание докер образа для собственного веб сервера, а потому в начале вам нужно разобраться с уже готовым докер образом для сервера. Ваш выбор пал на довольно простой nginx.

== Задание ==

Взять официальный докер образ с nginx и выкачать его при помощи
docker pull
Проверить наличие докер образа через
docker images
Запустить докер образ через
docker run -d [image_id|repository]
Проверить, что образ запустился через
docker ps
Посмотреть информацию о контейнере через
docker inspect [container_id|container_name]
По выводу команды определить и поместить в отчёт размер контейнера, список замапленных портов и ip контейнера
Остановить докер образ через
docker stop [container_id|container_name]
Проверить, что образ остановился через
docker ps
Запустить докер с портами 80 и 443 в контейнере, замапленными на такие же порты на локальной машине, через команду run
Проверить, что в браузере по адресу localhost:80 доступна стартовая страница nginx
Перезапустить докер контейнер через
docker restart [container_id|container_name]
Проверить любым способом, что контейнер запустился
  • В отчёт поместить скрины:
    • вызова и вывода всех использованных в этой части задания команд;
    • стартовой страницы nginx по адресу localhost:80 (адрес должен быть виден).

Замечание: Не загружайте тяжелые файлы (>10 мб) в гит.

Part 2. Операции с контейнером

Докер образ и контейнер готовы. Теперь можно покопаться в конфигурации nginx и отобразить статус страницы.

== Задание ==

Прочитать конфигурационный файл nginx.conf внутри докер контейнера через команду exec
Создать на локальной машине файл nginx.conf
Настроить в нем по пути /status отдачу страницы статуса сервера nginx
Скопировать созданный файл nginx.conf внутрь докер образа через команду
docker cp
Перезапустить nginx внутри докер образа через команду exec
Проверить, что по адресу localhost:80/status отдается страничка со статусом сервера nginx
Экспортировать контейнер в файл container.tar через команду export
Остановить контейнер
Удалить образ через
docker rmi [image_id|repository]
, не удаляя перед этим контейнеры
Удалить остановленный контейнер
Импортировать контейнер обратно через команду import
Запустить импортированный контейнер
Проверить, что по адресу localhost:80/status отдается страничка со статусом сервера nginx
  • В отчёт поместить скрины:
    • вызова и вывода всех использованных в этой части задания команд;
    • содержимое созданного файла nginx.conf;
    • страницы со статусом сервера nginx по адресу localhost:80/status.

Part 3. Мини веб-сервер

Настало время немного оторваться от докера, чтобы подготовиться к последнему этапу. Настало время написать свой сервер.

== Задание ==

Написать мини сервер на C и FastCgi, который будет возвращать простейшую страничку с надписью
Hello World!
Запустить написанный мини сервер через spawn-fcgi на порту 8080
Написать свой nginx.conf, который будет проксировать все запросы с 81 порта на 127.0.0.1:8080
Проверить, что в браузере по localhost:81 отдается написанная вами страничка
Положить файл nginx.conf по пути ./nginx/nginx.conf (это понадобится позже)

Part 4. Свой докер

Теперь всё готово. Можно приступать к написанию докер образа для созданного сервера.

== Задание ==

При написании докер образа избегайте множественных вызовов команд RUN

Написать свой докер образ, который:

1) собирает исходники мини сервера на FastCgi из Части 3
2) запускает его на 8080 порту
3) копирует внутрь образа написанный ./nginx/nginx.conf
4) запускает nginx.

nginx можно установить внутрь докера самостоятельно, а можно воспользоваться готовым образом с nginx'ом, как базовым.

Собрать написанный докер образ через
docker build
при этом указав имя и тег
Проверить через
docker images
, что все собралось корректно
Запустить собранный докер образ с маппингом 81 порта на 80 на локальной машине и маппингом папки ./nginx внутрь контейнера по адресу, где лежат конфигурационные файлы nginx'а (см. Часть 2)
Проверить, что по localhost:80 доступна страничка написанного мини сервера
Дописать в ./nginx/nginx.conf проксирование странички /status, по которой надо отдавать статус сервера nginx
Перезапустить докер образ

Если всё сделано верно, то, после сохранения файла и перезапуска контейнера, конфигурационный файл внутри докер образа должен обновиться самостоятельно без лишних действий

Проверить, что теперь по localhost:80/status отдается страничка со статусом nginx

Part 5. Dockle

После написания образа никогда не будет лишним проверить его на безопасность.

== Задание ==

Просканировать образ из предыдущего задания через
dockle [image_id|repository]
Исправить образ так, чтобы при проверке через dockle не было ошибок и предупреждений

Part 6. Базовый Docker Compose

Вот вы и закончили вашу разминку. А хотя погодите... Почему бы не поэкспериментировать с развёртыванием проекта, состоящего сразу из нескольких докер образов?

== Задание ==

Написать файл docker-compose.yml, с помощью которого:
1) Поднять докер контейнер из Части 5 (он должен работать в локальной сети, т.е. не нужно использовать инструкцию EXPOSE и мапить порты на локальную машину)
2) Поднять докер контейнер с nginx, который будет проксировать все запросы с 8080 порта на 81 порт первого контейнера
Замапить 8080 порт второго контейнера на 80 порт локальной машины
Остановить все запущенные контейнеры
Собрать и запустить проект с помощью команд
docker-compose build
и
docker-compose up
Проверить, что в браузере по localhost:80 отдается написанная вами страничка, как и ранее

💡 Нажми тут, чтобы поделиться с нами обратной связью на этот проект. Это анонимно и поможет команде Продукта сделать твоё обучение лучше.