Задания для самостоятельной работы

Задание 1. Соберем первый образ и запустим.

1. Нужно собрать Docker образ из

  • Dockerfile
  • entrypoint.sh
  • .dockerignore
  • requirements.txt
  • app.py

Ресурсы для задания 1

$ docker build -t task-one-image .
2. Проверим:
$ docker images
3. Создадим и запустим контейнер из образа:
$ docker run --rm --name task-one-cont task-one-image  # Запуск контейнера с захватом консоли
$ docker run --rm -d --name task-one-cont task-one-image  # Запуск контейнера в daemon режиме
4. Создадим и запустим контейнер, который будет доступен по tcp порту на хост машине
$ docker run -p 5000:5000 --rm --name task-one-cont task-one-image
5. Проверим

Откроем браузер по ссылке http://0.0.0.0:5000

 

Задание 2. Соберем образ без кода, и примаунтим код к приложению.

1. Нужно собрать Docker образ из

  • Dockerfile
  • entrypoint.sh
  • .dockerignore

Ресурсы для задания 2

$ docker build -t task-two-image .
2. Проверим:
$ docker images
3. Создадим и запустим контейнер из образа. Контейнер не будет создан, т.к. команда запуска не будет выполнена.
$ docker run --rm -p 5000:5000 --name task-two-cont task-two-image  # Запуск контейнера с захватом консоли
$ docker run --rm -p 5000:5000 -d --name task-two-cont task-two-image  # Запуск контейнера в daemon режиме
4. Примаунтим папку с приложением:

ВАЖНО!!! У вас будет свой путь до папки на хост машине!!!

$ docker run --rm -d -p 5000:5000 -v ~/projects/docker_less/task-two/:/app --name task-two-cont task-two-image
5. Проверим

Откроем браузер по ссылке http://0.0.0.0:5000

 

Задание 3. Соберем образ, и всю media вытащим из контейнера.

1. Нужно собрать Docker образ из

  • Dockerfile
  • entrypoint.sh
  • .dockerignore
  • app.py
  • requirements.txt

Ресурсы для задания 3

$ docker build -t task-three-image .
2. Проверим:
$ docker images
3. Создадим и запустим контейнер из образа. Контейнер не будет создан, т.к. команда запуска не будет выполнена.
$ docker run --rm -p 5000:5000 --name task-three-cont task-three-image  # Запуск контейнера с захватом консоли
$ docker run --rm -p 5000:5000 -d --name task-three-cont task-three-image  # Запуск контейнера в daemon режиме
4. Примаунтим папку с приложением:

ВАЖНО!!! У вас будет свой путь до папки на хост машине!!!

 

$ docker run --rm -d -p 5000:5000 -v ~/projects/docker_less/media/:/app/media --name task-three-cont task-three-image
5. Проверим

Откроем браузер по ссылке http://0.0.0.0:5000/upload-file/

После загрузки открываем http://0.0.0.0:5000/uploads/

Проверим что в папке media появились файлы

Задание 4. Запустим postfix в другом контейнере и научим приложение отправлять почту.

Ресурсы для задания 4

1. Сoздать network.

$ docker network create examplenet
2. Создать контейнер с postfix и прицепить его в нашу мост-сеть.
$ docker run -e maildomain=localhost -e smtp_user=user:password --name postfix -d --net examplenet catatnight/postfix
3. Собираем наш Docker image
$ docker build -t task-foo-image .
4. Проверим:
$ docker images
5. Запускаем подцепившись в сеть.

ВАЖНО!!! У вас будет свой путь до папки на хост машине!!!

$ docker run --rm -d -p 5000:5000 -v ~/projects/docker_less/media/:/app/media -e smtp_host=postfix -e smtp_port=25 -e smtp_user=user -e smtp_password=password --name task-foo-cont --net examplenet task-foo-image
6. Проверяем

Откроем браузер по ссылке http://0.0.0.0:5000/email/ и попробуем отправить себе письмо

Откроем браузер по ссылке http://0.0.0.0:5000/upload-file/

После загрузки открываем http://0.0.0.0:5000/uploads/

Проверим что в папке media появились файлы

Задание 5. Запустим nginx как интерфейс для веб сервера.

Ресурсы для задания 5

1. Собираем наш Docker image

 

$ docker build -t task-five-image .
2. Проверим:
$ docker images
3. Запускаем подцепившись в сеть и убрав внешние порты.

ВАЖНО!!! У вас будет свой путь до папки на хост машине!!!

$ docker run --rm -d -v ~/projects/docker_less/media/:/app/media -e smtp_host=postfix -e smtp_user=user -e smtp_password=password --name task-five-cont --net examplenet task-five-image
4. Создаем nginx образ, который будет проксировать запросы в контейнер с приложением.
$ cd nginx
$ docker build -t task-five-nginx-img .
$ docker run --rm -d -p 8000:80 -e BACKEND_HOST=task-five-cont -e BACKEND_PORT=5000 --name task-five-nginx-cont --net examplenet task-five-nginx-img
5. Проверим

Откроем браузер по ссылке http://0.0.0.0:8000/email/ и попробуем отправить себе письмо

Откроем браузер по ссылке http://0.0.0.0:8000/upload-file/

После загрузки открываем http://0.0.0.0:8000/uploads/

Проверим что в папке media появились файлы

Источник: https://github.com/nxexox/docker_lessons/tree/master/docker/