Docker облегчает развертывание приложений, позволяет "упаковать" как само приложение, так и только его зависимости в изолированную среду. Основной посыл здесь: "Ничего лишнего, только то, что надо для конкретного приложения". Как следствие — экономия ресурсов системы.

Общая схема выглядит так:

Есть основное ПО, его называют Docker Engine — это движок, который устанавливают на ОС. Обычно слово Engine опускают, подразумевая его. Существует бесплатная версия Docker Community Edition и платная Docker Enterprise.

После чего нам понадобится Docker File, в котором и описываются правила по сборке самого образа приложения, иными словами инструкция в виде текстового файла того, что будем собирать для образа.

Далее на основе Docker File собирается образ, который называют Docker Image, включающий зависимости, конфигурацию для дальнейшего развертывания среды.

И собственно сам Docker Container — это легкий, автономный пакет программного обеспечения, который включает в себя все необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки.

По установке Docker Engine на разные ОС существует официальная документация и, конечно, много роликов на youtube, поэтому останавливаться здесь не будем. В рамках экспериментов ниже будем использовать Docker на ОС Ubuntu 20.04.

Хотелось отметить, что существует Docker Hub, где хранятся Images всех известных ПО, сайт: https://hub.docker.com/ и через поиск найти необходимый софт. При этом можно искать и сразу в командной строке.

Важно! Команды для Docker`а нужно будет запускать с sudo, иначе они не будут отрабатывать, и будет писать permission denied. Для того, чтобы сделать постоянное применение команд с sudo, нужно выполнить:

sudo usermod -aG docker $USER

После чего нужно сделать логофф/логин.

Чтобы найти Images сразу в терминале:

docker search название_ПО

Что скачать Image с Docker Hub:

docker pull название_ПО

Проверить какие Images уже есть локально:

docker images 

При этом можно сразу объединить как проверку на наличие локально Image, так и на выкачку из репозитория, и последующий запуск Docker Container

docker run название_ПО

Итак, запустим первый тестовый контейнер:

docker run hello-world

В результате мы видим, что он не нашел локально данный Image, скачал его и вывел сообщение, что запуск отработал корректно: 

Hello from Docker!

This message shows that your installation appears to be working correctly.

Теперь можем проверить какие есть Images локально на ОС с помощью команды, которую рассмотрели ранее:

Теперь запустим контейнер c веб-сервером Tomcat и, на который зайдём локально в браузере.

docker run -d -p 1236:8080 tomcat

где

-d — (от сокр. detach) запустить контейнер "бэкграундом" и вывести его ID.

-p — сделать перенаправление порта с дефолтного Tomcat 8080 на 1236. 

Эти или другие дополнительные флаги ставятся при необходимости.

После успешного старта мы увидим ID контейнера:

Теперь можем обратиться через браузер или по IP, или через localhost, используя проброшенный порт.

Обратиться-то обратились, однако нам выдало ошибку HTTP Status 404 - Not Found, т.е. нам не показывает начальную страницу.

Оказалось, что автор контейнера Tomcat на докерхабе сделал примечание, что в соответствии с рекомендациями по безопасности по дефолту сейчас не включена загрузка начальной страницы, однако файлы по прежнему доступны в директории webapps.dist

Решение следующее:

1. Нужно узнать ID котейнера

docker ps

Эта команда выводит все запущенные в настоящий момент контейнеры. С флагом -a — отобразит как настоящие, так и запущенные ранее. Здесь нас интересует строка с ID tomcat.

2. Заходим в контейнер tomcat в директорию /bin/bash

docker exec -it ID_контенера /bin/bash

где

-it — (от сокр. interactive) отобразить в терминале подключения к контейнеру и оставаться там.

После чего выводим на экран отображения содержимого в директории, куда зашли

ls -la

где

-la —  отобразит список в столбец + все файлы.

Нас интересует две директории webapps и webapps.dist. Здесь можно поступать по-разному, например, файлы из webapps.dist переместить в webapps или удалить одну и переименовать другую и пр. Мы же, в этом примере переименуем webapps в webapps_old, а webapps.dist в webapps.

mv webapps webapps_old

mv webapps.dist webapps

Файлы, которые находились webapps.dist теперь стали в webapps. На этом всё, теперь идём вновь в браузер и обращаемся к Tomcat: 

Начальная страница загрузилась.