Идти путями
Как создать минимальный образ Golang Docker
Сделайте образ Docker размером менее 10 МБ
Наличие контейнера изображений, в котором хранится именно то, что вам нужно, всегда считается лучшей практикой. Мы хотим иметь только наше приложение и зависимости, которые необходимы для его выполнения.
Зачем нам это делать?
- Изображение небольшого размера снижает риск уязвимостей.
- Это улучшит процесс развертывания, повысит производительность и уменьшит размер.
Минимальный проект
Я буду использовать простой веб-сервис HelloWorld
для создания образа Docker.
Использование альпийского изображения
01. Докерфайл
Давайте напишем Dockerfile, используя дистрибутив alpine в качестве образа.
02. Сборка докера
После сборки этого Dockerfile мы получим образ 350 МБ.
➜ minimal-docker git:(main) ✗ docker build -t helloworld-large -f Dockerfile.large . [+] Building 7.1s (12/12) FINISHED ... ... ... ➜ minimal-docker git:(main) ✗ docker image ls helloworld-large REPOSITORY TAG IMAGE ID CREATED SIZE helloworld-large latest 678f9303af18 10 seconds ago 350MB ➜ minimal-docker git:(main) ✗ docker run -ti -p 8000:8000 helloworld-large:latest Server listen 8000...
Можем ли мы сделать лучше? Да мы можем!
Использование образа без дистрибутива
01. Докерфайл
Для следующего Dockerfile мы будем использовать многоэтапный подход и образ без дистрибутива от Google.
02. Сборка докера
Вуаля! После сборки мы получаем только размер изображения 8,6 МБ.
➜ minimal-docker git:(main) ✗ docker build -t helloworld-small -f Dockerfile.small . [+] Building 8.0s (14/14) FINISHED ... ... ... ➜ minimal-docker git:(main) ✗ docker image ls helloworld-small REPOSITORY TAG IMAGE ID CREATED SIZE helloworld-small latest 3b035dc2c7e4 5 seconds ago 8.6MB ➜ minimal-docker git:(main) ✗ docker run -ti -p 8000:8000 helloworld-small:latest Server listen 8000...
Можем ли мы сделать лучше? Да мы можем!
Использование скретч-изображения
01. Докерфайл
Мы даже можем уменьшить размер, для этого мы можем использовать скретч изображение. Но так как это супертонкое изображение, нам потребуется добавить некоторые дополнительные элементы, такие как часовые пояса или сертификаты ssl.
02. Сборка докера
И мы получаем изображение размером 7,59 МБ.
➜ minimal-docker git:(main) ✗ docker build -t helloworld-xsmall -f Dockerfile.xsmall . ... ... ➜ minimal-docker git:(main) ✗ docker image ls helloworld-xsmall REPOSITORY TAG IMAGE ID CREATED SIZE helloworld-xsmall latest b7b554ac46c9 21 minutes ago 7.59MB
Полный код вы можете найти в моем репозитории GitHub pave-fokin/go-patterns/minimal-docker.
Удачного кодирования!
Спасибо, что прочитали! Поделитесь со мной своими мыслями в LinkedIn или Twitter.
Дальнейшие чтения
Если вам понравилась эта статья, вас может заинтересовать следующее.