Для запуска контейнера, нам необходим образ (image), который и содержит приложение со всеми необходимыми зависимостями.
Для того чтобы собрать образ, нам необходимо предоставить движку Docker специальный набор инструкций (что поместить в контейнер и как это все запустить), который и представляет собой Dockerfile.
Мы будем устанавливать на Centos 7 и для начала установим сам Docker.
Статья не претендует на best practices, ставить буду из под root просто для удобства.
Настраиваем репозиторий
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Устанавливаем Docker Engine
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Запускаем Docker и ставим его в автозагрузку
systemctl start docker
systemctl enable docker
Проверяем
docker run hello-world
Мы запустили классический готовый hello-world контейнер. Теперь создадим свой
nano Dockerfile
В нем будет следующее:
# comment - комментарий
FROM centos:7
MAINTAINER devopslife.ru
LABEL version="1.0"
RUN yum install -y epel-release && yum install -y nginx
COPY index.html /usr/share/nginx/html
EXPOSE 80/tcp
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
Разберем что все это значит
Символ # позволяет оставлять комментарии, например написать внутри, что значит каждая строка
FROM указывает какой образ мы будем использовать как базовый при создании собственного образа, через двоеточие указывается версия (указывая latest частенько можно нарваться на волну критики в комментариях 🙂 )
MAINTAINER позволяет указать автора образа
LABEL указывает номер версии
RUN — включаем репозиторий EPEL и устанавливаем nginx
COPY копируем файл (мы сейчас создадим его) index.html в соответствующую папку
EXPOSE указываем какой порт пробросить из контейнера (иными словами какой порт открыть)
CMD — запускаем nginx при запуске контейнера
Сохраняем Dockerfile
Далее создадим в той же директории что и Dockerfile простой index.html в котором будет лишь одна строка
<h1>Hello from devopslife.ru</h1>
Теперь когда готов Dockerfile и все сопутствующие файлы нам необходимо создать образ. Делается это следующей командой
docker build . -t devopslife/nginx
build с “.” — создаем образ из Dockerfile в текущей директории
-t присваиваем образу понятное название
Ждем когда образ соберется
Запускаем командой
docker run -d -p 80:80 devopslife/nginx
Проверяем

Смотрим собранный образ в списке образов

Проходим по ip адресу (в моем случае это dns имя сервера) и видим то, что наш контейнер успешно работает.

Само собой это простейший пример, целью которого является показать, что Docker не так страшен для освоения.
Photo by Rubaitul Azad on Unsplash