Использование Dockerfile для создания образов Docker для ИТ-специалистов

Опубликовано: 16 Апреля, 2023
Использование Dockerfile для создания образов Docker для ИТ-специалистов

В предыдущей статье мы рассмотрели шаги, необходимые для тестирования вашего приложения, и поняли, что вам нужно сделать на уровне контейнера, чтобы запустить приложение. В конце прошлой статьи мы узнали, что это были шаги, чтобы запустить наше приложение:

  • Используйте Alpine Linux в качестве базового образа.
  • Обновите контейнер с помощью последней доступной версии программного обеспечения.
  • Установите Апач2.
  • Добавляем наш код в файловую систему. (Мы проверили это, изменив существующие файлы.)
  • Запустите службу.
  • Предоставление клиентам доступа к приложению.

В конце этой статьи мы были готовы запустить несколько контейнеров, и приложение было доступно. Поскольку приложение было простым и использовало только статический контент, результаты на данный момент были удовлетворительными.

С какими трудностями мы столкнулись на этом пути? Проблема заключается в том, когда мы должны обновить приложение. Допустим, разработчик хочет добавить новый контент или даже добавить новые страницы на текущий веб-сайт. Это становится сложной задачей, потому что нам придется повторять все шаги, включая редактирование файлов внутри контейнера, создание образа, а затем запуск контейнера с новым образом.

Это выполнимо, но непрактично, и было бы болезненно в больших масштабах. Итак, пришло время подняться на ступеньку выше и представить Dockerfile. Docker может автоматически создавать образы с помощью текстового документа, содержащего все инструкции по созданию образа без ручного вмешательства.

Файл имеет определенный формат, который мы собираемся изучить в этой статье, но им легко следовать, и они позволяют быстрее выпускать программное обеспечение. Мы можем изменить код и создать новый образ с помощью DevOps, а также автоматизировать развертывание решения.

Использование кода Visual Studio

Первый шаг — создать папку на локальном диске. Мы собираемся использовать это как исходную папку для управления нашим приложением. Для этой статьи я собираюсь создать папку с именем App6 с помощью проводника Windows. Щелкните правой кнопкой мыши эту новую папку и выберите «Открыть с помощью кода».

Результатом станет Visual Studio с новой областью для работы в нашем новом приложении. Наш первый шаг — создать более красивый HTML-код и добавить несколько изображений. Я получил самую симпатичную картинку Docker в Интернете, которую только смог найти. (Чем-то мне это напомнило декорации из Губки Боба, и я подумал, что это он!)

Первыми изменениями были всего три небольших, а именно: создал новый файл index.html с некоторым содержимым, создал подпапку с именем img и добавил в нее файл docker.jpg. Вся инфраструктура и тест кода изображены на изображении ниже.

Примечание. Я добавил расширение «Открыть HTML в браузере по умолчанию» в свой код VS. Когда я был удовлетворен своим HTML-кодом, я мог щелкнуть код, а затем открыть в браузере по умолчанию, чтобы увидеть результаты.

До этого момента у нас было наше приложение (код HTML) на нашей рабочей станции, но мы не касались контейнеров. Давайте использовать код VS, чтобы помочь нам. Сначала нажмите F1 и введите , а в списке найдите Docker: Add Docker Files to Workspace…

спросит, какой тип приложения мы создаем. Так как это базовый HTML, выберите «Другое» и нажмите <enter>.

Следующий вопрос будет заключаться в том, какой порт мы хотим выставить в нашем новом приложении, за неимением лучшего воображения мы набрали 80 и затем <enter>.

Причину всех этих вопросов можно увидеть на изображении ниже. Код VS создавал файлы для поддержки образа докера, включая Dockerfile, docker-compose.yml,.dockerignore и docker-compose.debug.yml.

Заставить Dockerfile работать на нас

Dockerfile поставлялся с универсальным приложением, и причиной тому был наш выбор « Другое» в вопросе ». Делая это для реального приложения, такого как NodeJS, Phyton, Java и многих других, мы получим более реалистичный .

В прошлой статье мы наметили все требования, и теперь пришло время выстроить их в Dockerfile. Вот список команд, которые мы собираемся использовать в нашем новом образе, с некоторыми примерами использования.

  • FROM: использует изображение, указанное как базовый слой нового контейнера.
  • LABEL: добавляет метаданные к изображению. Как и джедаи, они всегда приходят парами ключ=значение.
  • RUN: выполняет команды поверх базового слоя изображения и фиксирует данные.
  • EXPOSE: открывает порт контейнера для внешнего мира, в нашем случае 80 порт.
  • КОПИРОВАТЬ: скопировать файлы из источника (нашей машины) в файловую систему контейнера.
  • ТОЧКА ВХОДА: мы настраиваем контейнер как исполняемый файл, в нашем случае службу Apache2 (httpd).
  • CMD: в нашем примере это передача параметров в ENTRYPOINT. Он устанавливает значения по умолчанию для исполняемого контейнера. Без CMD контейнер сразу же запускался и закрывался.
FROM alpine:latest LABEL Name=app6 Version=0.0.1 author="Anderson Patricio" RUN apk update RUN apk upgrade RUN apk add --no-cache apache2 RUN mkdir /var/www/localhost/htdocs/img EXPOSE 80/TCP COPY * /var/www/localhost/htdocs/ COPY img/* /var/www/localhost/htdocs/img/ ENTRYPOINT ["httpd"] CMD ["-D", "ПЕРЕДНИЙ ПЛАН"]

Нам нужно создать образ на основе текущего Dockerfile. Давайте начнем с нажатия F1, а затем введите и найдите Docker Images: Build Image… В новом приглашении определите тег, в нашем примере это будет app6:latest и нажмите <enter>.

Примечание. Мои теги были не самыми лучшими. Впрочем, для этого пробега это приемлемо.

В терминале мы видим весь процесс создания нового образа. Весь процесс должен занять несколько секунд.

Чтобы проверить только что созданный образ, мы можем использовать либо код VS, либо команды, перечисленные ниже.

docker image ls docker container run --name app6 -p 666:80 app6 docker container ls

Результаты можно проверить в любом локальном браузере. Введите http://localhost:666, это был порт, который мы связали с портом 80, который был открыт на уровне контейнера.

Dockerfile: Слишком круто для школы!

Вы заметили, что мы не коснулись ни одного работающего контейнера? Мы начали с веб-страницы в локальной папке, определили, что нам нужно в нашем Dockerfile, и внезапно у нас появился контейнер, в котором работает наш код. Довольно круто, а?

Вам может быть интересно узнать об обновлениях приложений? Это просто. Добавьте новые страницы, изображения и создайте новый образ, как мы сделали на предыдущем шаге, а затем запустите свои новые контейнеры.