Skip to content

Latest commit

 

History

History
 
 

16_docker

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Заметки к ДЗ-16 (Docker)

Задача:

Основное задание: Создайте свой кастомный образ nginx на базе alpine. После запуска nginx должен отдавать кастомную страницу (достаточно изменить дефолтную страницу nginx) Определите разницу между контейнером и образом Вывод опишите в домашнем задании. Ответьте на вопрос: Можно ли в контейнере собрать ядро? Собранный образ необходимо запушить в docker hub и дать ссылку на ваш репозиторий.

Дополнительное задание: Создайте кастомные образы nginx и php, объедините их в docker-compose. После запуска nginx должен показывать php info. Все собранные образы должны быть в docker hub

Решение:

Основное задание

Все файлы по основному заданию расположены в каталоге basic.

В Vagrantfile обычная ВМ без каких-либо специфических настроек, но с дополнительной внешней сетью на физическом интерфейсе хоста. Это совершенно необязательно, но сделано для удобства тестирования контейнера с nginx с хоста. Файлы для сборки docker-образа находятся в каталоге docker.

Разница между контейнером и образом.

Если коротко, то docker-контейнер, это образ, но с rw-слоем. Именно в этот слой и вносятся все изменения внутри контейнера.

Можно ли в контейнере собрать ядро?

Думаю, что можно. Сборка ядра ничем кардинальным не отличается от простой компиляции любого другого ПО. В зависимости от того, какое ядро и для какой ОС linux мы собираем, достаточно установить соответствующие пакеты, определить нужные параметры в конфиге нашего будущего ядра и задействовать нужные модули.

Вот несколько примеров:

https://github.com/tomzo/docker-kernel-ide

https://github.com/moul/docker-kernel-builder

https://www.olimex.com/forum/index.php?topic=4498.0

Последовательность действий при сборке docker-образа:

Из простецкого Dockerfile собираем образ с именем otus-nginx

docker build -t otus-nginx .

Запускаем контейнер на основе образа otus-nginx

docker run --rm -d -p 80:80 otus-nginx

Подключиться к этому контейнеру можно так

docker exec -it id_контейнера_или_его_имя bash

Логинимся на https://hub.docker.com

docker login

Задаем тэг нашему образу

docker tag 2b205e6d45d3 timlok/otus-nginx:latest

Пушим образ

docker push timlok/otus-nginx:latest

Ссылка на репозиторий с образом на docker hub.

Дополнительное задание

Все файлы по дополнительному заданию расположены в каталоге advanced(*). Файлы для сборки docker-образов находятся в каталогах otus-nginx2 и otus-php-fpm.

Для проверки домашнего задания необходимо скачать файл docker-compose.yml и выполнить docker-compose up. После этого нужно отрыть http://ip_хоста_с_docker-compose или http://localhost и можно будет увидеть страницу с информацией о версии php в образе otus-php-fpm.

При этом, в конфиге nginx настроено, что любые символы после первоначально открываемого URI будут открывать страницу с информацией о версии php. Это поведение можно изменить и включить раздельную обработку html и php, отредактировав конфиг-файл nginx. В каждом образе установлен bash. В файле docker-compose.yml для сети nginx-phpfpm задействованы сетевые алиасы и nginx в своём конфиге обращается к контейнеру с php-fpm именно по его сетевому алиасу php.nginx-phpfpm.

Ссылки на соответствующие репозитории с образами timlok/otus-nginx2 и timlok/otus-php-fpm.