ИИ поможет создавать Dockerfile



Книга ИИ поможет создавать Dockerfile

Вы один из тех, кто считает написание файлов Dockerfiles и docker-compose.yml утомительным занятием? По крайней мере, мне это никогда не нравилось.


Меня всегда мучил вопрос: следую ли я лучшим практикам или неосознанно вношу уязвимости в систему безопасности при написании файлов конфигурации Dockerfile и docker-compose?


Теперь нам больше не придется об этом беспокоиться, за что нужно поблагодарить людей из Docker, которые нашли отличное применение генеративному ИИ. Они создали CLI-утилиту docker init.


Представление docker init


Компания Docker представила общедоступную версию docker init. Я попробовал ее, нашел очень полезной и не могу дождаться, когда начну использовать ее в повседневной жизни.


Что такое docker init?


docker init—  это утилита командной строки, которая помогает инициализировать в проекте Docker-ресурсы. Она создает файлы Dockerfile, compose.yaml и .dockerignore на основе требований проекта.


Это упрощает процесс настройки Docker для конкретного проекта, экономит время и снижает сложность работы.



Последняя версия docker init поддерживает Go, Python, Node.js, Rust, ASP.NET, PHP и Java. Она доступна в приложении Docker Desktop.



Как использовать docker init?


Использовать docker init очень легко. Достаточно сделать несколько простых шагов. Сначала нужно перейти в каталог проекта и установить необходимые активы Docker.


Создадим базовое Flask-приложение.


touch app.py requirements.txt

Скопируйте приведенный ниже код и перенесите его в соответствующие файлы.


# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_docker():
return '<h1> hello world </h1'

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')

# requirements.txt
Flask



Впечатляющая магия docker init



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



docker init


После этого надо выбрать платформу приложения. В данном случае используем python. Она предложит рекомендуемые для проекта значения, такие как версия Python, команды port и entrypoint.



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





Теперь посмотрим, как выглядит эта автоматически сгенерированная конфигурация.



  • Dockerfile:


# syntax=docker/dockerfile:1

# Чтобы помочь вам начать работу, в этом файле приведены комментарии.
# Если вам нужна дополнительные сведения, обратитесь к справочному руководству по Dockerfile по адресу
# https://docs.docker.com/engine/reference/builder/

ARG PYTHON_VERSION=3.11.7
FROM python:${PYTHON_VERSION}-slim as base

# Запрещает Python писать файлы pyc.
ENV PYTHONDONTWRITEBYTECODE=1

# Не позволяет Python буферизовать stdout и stderr, чтобы избежать ситуаций,
# когда приложение аварийно закрывается, не выдавая логов из-за буферизации.
ENV PYTHONUNBUFFERED=1

WORKDIR /app

# Создайте непривилегированного пользователя, от имени которого будет работать приложение.
# См. https://docs.docker.com/go/dockerfile-user-best-practices/
ARG UID=10001
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
appuser

# Загрузите зависимости отдельным шагом, чтобы воспользоваться преимуществами кэширования Docker.
# Используйте функцию монтирование кэша в /root/.cache/pip для ускорения последующих сборок.
# Используйте привязку к файлу requirements.txt, чтобы избежать необходимости копировать в
# этот слой.
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,source=requirements.txt,target=requirements.txt \
python -m pip install -r requirements.txt

# Переключитесь на непривилегированного пользователя, чтобы запустить приложение.
USER appuser

# Скопируйте исходный код в контейнер.
COPY . .

# Откройте порт, который прослушивает приложение.
EXPOSE 5000

# Запустите приложение.
CMD gunicorn 'app:app' --bind=0.0.0.0:5000

Этот Dockerfile гораздо лучше всего того, что я когда-либо мог написать. В нем соблюдены все эффективные практики производительности и безопасности, рекомендуемые в сообществах Linkedin и Medium.



  • compose.yaml:



Была произведена запись docker-compose config для запуска приложения. Поскольку в приложении нет подключения к базе данных, код, который может понадобиться для контейнера базы данных, был закомментирован.


Если вам понадобится использовать базу данных совместно с Flask-приложением, раскомментируйте конфигурацию базы данных из файла docker-compose, создайте локальный файл с секретными сведениями и запустите приложение. При этом также создастся файл .dockerignore.




Зачем использовать docker init?


С помощью docker init докеризация становится проще простого, особенно для новичков в Docker. Эта утилита устраняет ручную работу по написанию Dockerfiles и других конфигурационных файлов, экономя время и сводя к минимуму ошибки.


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


Заключение


Напоследок хочу подчеркнуть, что docker init делает за вас все.



  • Пишет конфигурацию Docker лучше, чем 90% новичков.

  • Следует передовым практикам.

  • Экономит время и силы.

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


Дисклеймер. Как и любой инструмент, основанный на искусственном интеллекте, эта утилита тоже не идеальна. Не стоит слепо доверять конфигурации, которую она генерирует. Рекомендую еще раз взглянуть на конфигурацию, прежде чем использовать ее.



212   0  

Comments

    Ничего не найдено.