Самая большая трата - трата времени.
В современном мире время ценится очень высоко, поэтому люди придумывают различные способы его сохранить, оптимизировать. А с современными технологиями в области информации и программных продуктов сегодня придумали массу способов для облегчения жизни. Возьмем команду разработчиков, как часто им приходится делать одни и те же действия? А если им требуется передать разработанный продукт клиенту, но для этого подготовить всё на серверах клиента для запуска продукта? А если таких клиентов несколько?
Или рассмотрим другой вариант. У Вас есть несколько команд разработчиков, которые используют одни и те же технологии, каждый раз устанавливать все используемые программные продукты для всех проектов?
Можно, конечно, написать скрипты, которые будут каждый раз устанавливать всё необходимое, но даже так на всё может уходить много времени.
Ну и наконец рассмотрим вариант человека, который хочет что-то попробовать, но для этого ему надо установить, например, web сервер, но он не знает как его установить и настроить его.
Здесь на помощь приходит Docker. Docker упаковывает ПО(программное обеспечение) вместе со всеми необходимыми библиотеками, настройками, кодом и средой в так называемые контейнеры, которые потом можно переносить на другие машины. Контейнеры что-то среднее между установленным ПО на сервере и виртуальной машиной.
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Затем выберем репозиторий со стабильной версией Docker:
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Ну и теперь устанавливаем:
$ sudo yum install docker-ce docker-ce-cli containerd.io
Теперь добавляем в автозагрузку и запускаем:
$ sudo systemctl enable docker
$ sudo systemctl start docker
Остается только проверить работоспособность:
$ sudo docker run hello-world
Этот код скачивает образ, запускает контейнер, который выводит информационное сообщение и завершает работу.
Установка Docker не заняла много времени, а что с установкой программ? Довольно много уже готовых образов есть в так называемом Docker Hub, его дополняют как обычные пользователи вроде нас с Вами, так и команды разработчиков различного ПО. Помните нашу статью по установке Atlassian Bitbucket? С помощью Docker это занимает 3 строчки:
$ sudo docker volume create --name bitbucketVolume
$ sudo docker run -v bitbucketVolume:/var/atlassian/application-data/bitbucket --name="bitbucket" -d -p 7990:7990 -p 7999:7999 atlassian/bitbucket-server
$ sudo docker run -v /data/bitbucket:/var/atlassian/application-data/bitbucket --name="bitbucket" -d -p 7990:7990 -p 7999:7999 atlassian/bitbucket-server
ВНИМАНИЕ!
Стоит предупредить, что по умолчанию Docker переписывает правила firewall, что позволяет получить доступ к контейнеру из вне. Это частая ошибка новичков.
Поэтому отключим возможность изменения правил firewall. Для начала пропишем в свойствах запуска сервиса --iptables=false. Приблизительно должно получиться следующее:
$ sudo grep "iptables" /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=false
После этого надо перезапустить службы:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
У данного способа есть недостаток - после обновления Docker придется заново прописывать эту настройку. Для того, чтобы после перезагрузки настройки сохранились, надо создать файл daemon.json с содержимым:
$ sudo vi /etc/docker/daemon.json
{
"iptables": false
}
Теперь останется только перезапустить docker:
$ sudo systemctl restart docker
Но теперь в наш контейнер мы не сможем опасть не только снаружи, но и из другого контейнера, если у Вас их запущено несколько. Для этого нужно отредактировать правила firewall.
Добавим создаваемый docker прокси интерфейс (по умолчанию docker0) в разрешенные:
$ sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
$ sudo firewall-cmd --reload
Для доступа из Интернет к контейнеру, нужно разрешить определенные порты, например так:
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
$ sudo firewall-cmd --reload
Для доступа из контейнера в Интернет нужен маскарадинг. Активируем его для зоны public, в которой он по-умолчанию отключен:
$ sudo firewall-cmd --permanent --zone=public --query-masquerade
no
$ sudo firewall-cmd --permanent --zone=public --add-masquerade
$ sudo firewall-cmd --permanent --zone=public --query-masquerade
yes
$ sudo firewall-cmd --reload
Изучать возможности Docker можно долго, мы же хотели Вам рассказать о существовании такого ПО. Есть множество ресурсов по обучению и использованию Docker как на английском языке, так и на русском. Очень хороший ресурс для просмотра базовых возможностей Docker, но, к сожалению, он полностью на английском. Зато этот курс полностью интерактивный и с подобием виртуальной машины, выводящие свою консоль прямо в Ваш web браузер.
Команда Syncweb надеется, что данная статья была Вам полезна и поможет сохранить Ваше драгоценное время.