###### tags: Linxu, Docker, задачи.
# Docker закрепляем пройденый материал.
## Вопросы по Docker.
1. Что такое Docker Image?
2. С помощью какой команды вы можете скачать образ из [dockerhub](http://dockerhub.com/) ?
3. Что такое Docker контейнер?
4. С помощью какой команды вы можете запустить контейнер на основе скаченного образа? Как остановить контейнер? Как удалить контейнер? Как удалить образ?
5. До каких пор контейнер будет запущен?
6. Какой командой можно посмотреть запущенные контейнеры?
7. Какой командой можно посмотреть список всех контейнеров?
8. Как можно перейти в терминал внутри контейнера если он на основе linux?
9. С каким ключем можно запустить контейнер чтобы после завершения свой работы он удалился?
10. Что такое DockerFile?
11. Опишите содержимое Dockerfile:
```
FROM php:7.2-cli
COPY cli.php /cli.php
RUN chmod +x /cli.php
CMD php /cli.php
```
что тут происходит?
12. C помощью какой команды создаеться образ из docker file?
13. Расскажите как работает параметр CMD если при запуски контейнера в конце указать другую команду?
14. При запуски контейнера какой ключ можно использовать чтобы примонтировать локальную директорию внутрь контейнера? Какую возможность это вам дает?
15. Что такое Docker Volumes?
16. Как можно пробросить порт из контейнера в локальную сеть?
17. Каким образом Docker работает с docker-file? Расскажите про слои и кеш.
18. Как можно уменьшить количество слоев к примеру если у вас такой dockerfile:
```
RUN apt-get update
RUN apt-get install -y wget
RUN apt-get install -y curl
```
19. Что такое Docker-Compose?
20. В каком формате пишеться Docker-Compose? Опишите структуру Docker-Compose.
21. Как запустить контейнеры на основе Docker-Compose?
22. Как можно примонтировать локальную директорию в контейнер с помощью Docker-Compose.
23. Как можно с помощью Docker-Compose выполнять команды внутри контейнера?
24. Что такое микросервисы?
## Задания по Docker.
Создайте директорию Docker на рабочем столе. **Все что без * обязательно остальное по желанию.**
#### Задача №1 Сложность: - .
Перейдите в директорию Docker и создайте в ней папку `nginx` и перейдите в нее. Создайте в ней две папки `www` и `conf.d`.
Создайте образ с nginx используя `docker file` на основе образа контейнера `ubuntu 18.04`. Пробросьте `80` порт из контейнера в локальную сеть на порт `80`.
Примонтируйте локальную директорию `.../Docker/nginx/conf.d` в директорию контейнера `/etc/nginx/conf.d`.
Примонтируйте директорию `.../Docker/nginx/www` в директорию контейнера `/var/www`.
Создайте простой конфиг виртуального хоста для сайта в папке `.../Docker/nginx/conf.d` укажите `server_name` как `nginx.local`.
```
server{
listen 80;
root /var/www/mysite;
index index.html index.htm index.nginx-debian.html;
server_name nginx.local;
}
```
Создайте на локальном ПК в папке `www` директорию `mysite`. Скачайте какой нибудь bootstrap сайт и переместите в созданную директорию.
Измените файл **hosts** на локальном ПК так чтобы сайт открывался по доменному имени `nginx.local`. Учитывайте что для проверки работает ли у вас сайт без доменного имени вам понадобиться либо сменить порт работы сайта и соответственно другой порт пробрасывать в локальную сеть либо же удалить стандартный сайт nginx.
Для создания и запуска контейнера на основе doker file вы должны использовать Docker-compose.
#### Задача №2 Сложность: - .
Перейдите в директорию Docker и создайте в ней папку `apache` и перейдите в нее. Создайте в ней две папки `www` и `conf.d`.
В папке www создайте файл index.html с следующим содержимым:
```
<h1> Привет от (ваше имя) из группы (ваша группа)/h1>
```
Использую docker file создайте образ с apache в котором примонтируйте локальные директории так чтобы apache мог прочитать конфиги в conf.d на локальном пк и открыть сайт лежащий в www на локальном пк.
Создайте простой конфиг виртуального хоста apache.
По доменному имени apcahe.local у вас должен открываться сайт.
Для создания и запуска контейнера на основе doker file вы должны использовать Docker-compose.
#### Задача №3 Сложность: **.
Перейдите в директорию Docker и создайте в ней папку `Lemp` и перейдите в нее.
Создайте 2 docker file для двух контейнеров соответственно с php + nginx и mysql. Свяжите все так чтобы стек работал.
Для запуска стека вы должны использовать один Docker-compose файл
#### Задача №4 Сложность: ****.
Напишите простой микросервис, калькулятор принимающий (число:действие:число). Пусть сервис принимает строки в json и выдает в ответ результат в json.
Напишите второй микросервис который будет получать какой-то текст и отправлять его вам в телеграм через бота.
Напишите веб приложений (сайт), который будет принимать выражение из 2 аргументов и показывать результат. Под копотом веб приложение должно считывать запрос пользователя с сайта и отправлять запрос на 1 микросервис, получая ответ веб приложение должно показать ответ пользователю на сайте и отправить полученное число на второй микросерис.
**Вы должны написать микросервисы и вебриложение на разных языках программирования.**
Создайте 3 docker file в котрых опишите среды в которых будут запускаться ваши микропрограммы.
Пробростьте все необходимы порты для роботы ваших сетевых приложений.
Для запуска вашего веб приложения из микросервисов вы должны использовать один Docker-compose файл.
#### Задача №5 Сложность: *.
Изучите тему резервного копирования контейнеров опишите что и как вы бы делали, если у вас будет приложение на микросервесной архитектуре из более чем 20 контейнеров. Придумайте политику бекапов, учитывайте возможное наличие баз данных. Будьте готовы рассказать на паре.