Я почти уверен, что вы хотя бы раз слышали слово «докер» и задавались вопросом, что это может быть. Что ж, в этой статье я сделаю все возможное, чтобы поделиться с вами всем, что я узнал о докере как новичок.

Во-первых, давайте поговорим о том, что такое докер. Docker — это платформа для разработки, доставки и запуска приложений. Docker позволяет вам отделить ваши приложения от вашего компьютера и ОС, чтобы вы могли быстро доставлять программное обеспечение. С Docker вы можете управлять своей инфраструктурой так же, как вы управляете своими приложениями. Воспользовавшись методологиями Docker для быстрой доставки, тестирования и развертывания кода, вы можете значительно сократить задержку между написанием кода и его запуском в производственной среде, поскольку вы разрабатываете свой код в среде, близкой к производственной.

К настоящему времени вы, возможно, спрашиваете себя: «Ну и зачем мне использовать докер?» и ответ очень прост, Docker упрощает процесс разработки, позволяя разработчикам работать в стандартизированных средах, используя локальные контейнеры, которые предоставляют ваши приложения и службы, тем самым устраняя известную фразу «он работает на моей машине», поскольку все контейнеры одинаковы и иметь только необходимые зависимости. Кроме того, контейнеры отлично подходят для рабочих процессов непрерывной интеграции и непрерывной доставки (CI/CD).

Поскольку мы говорим о вводных понятиях, давайте взглянем на основы докера. Основой Docker являются изображения. Это шаблоны только для чтения, которые содержат всю информацию для создания из них контейнера. Контейнеры — это запущенные экземпляры образа, вы можете создать столько контейнеров из одного образа, сколько вам нужно, что делает Docker мощным инструментом для масштабирования приложений и служб. Думайте об этом как об ООП, где изображение — это класс, а контейнер — это объект (экземпляр сорт). Вы также можете иметь наследование, основывая свое изображение на другом изображении, получая все свойства этого изображения.

Как мы создаем эти образы? Изображения создаются с помощью файлов Docker, в которых описываются шаги по созданию образа. Некоторые из основных частей файла докера:

  • Базовый образ. Это образ, на котором основано ваше приложение. Попробуйте выбрать наиболее близкий образ, который соответствует вашим потребностям, например, если вы собираетесь создавать приложение узла, основывая его на образе узла, а не на образе Linux, поскольку это сэкономит вам много шагов настройки при сборке.
  • Команды настройки: это шаги настройки, которые вы должны выполнить в системе, на которой запущен этот базовый образ, с их помощью вы можете установить зависимости и настроить конфигурации в соответствии со своими потребностями.
  • Структура папок. Ваше приложение должно быть скопировано в контейнер, поэтому у вас должна быть хорошая структура папок и базовая папка для запуска или компиляции вашего приложения.
  • Точка входа. Это команда, которую docker будет запускать при создании контейнера, поэтому, например, если вы используете приложение rails, точкой входа будет сервер rails. команда.

Теперь, когда у вас есть некоторые базовые знания, давайте поговорим о некоторых продвинутых методах, которые помогут вам в вашем пути к докеру. Чтобы значительно уменьшить размер ваших изображений, вы должны использовать многоэтапные изображения. Идея заключается в том, что вы используете более крупный/тяжелый образ для создания своих приложений, а затем используете более легкий образ для их запуска. Например, для основного приложения .NET вы можете использовать образ SDK, чтобы скопировать свой проект и построить его, а затем скопировать папку сборки в образ, у которого есть только среда выполнения, чтобы уменьшить его. Идея состоит в том, чтобы взять как можно больше накладных расходов на изображения, чтобы они могли занимать от более чем 1 ГБ до нескольких сотен МБ в зависимости от вашего приложения.

Существует также инструмент, который вы можете использовать в сочетании с докером для создания мультисервисных приложений, называемых кластерами, и он называется docker-compose. Docker-compose — это инструмент, поставляемый с докером, который позволяет вам одновременно настраивать и контролировать несколько контейнеров, позволяя приложению и всем необходимым компонентам работать в изолированном кластере. Например, если вам нужна база данных для вашего приложения, вам не нужно устанавливать движок в свой образ, вы просто создаете образ для своего приложения, а затем создаете контейнер из официального образа (или любого другого образа) для ядро базы данных и подключите к нему свое приложение. Чтобы использовать Docker Compose, вам необходимо создать файл .yml, в котором вы указываете все элементы в кластере (службы и образы, тома, сети, порты, команды и т. д.), вы также можете указать зависимости между службами, чтобы они имели определенный запуск. порядок, если вам нужно, чтобы одна служба была запущена до запуска другой, например, ваша база данных должна быть запущена до того, как ваше приложение начнет ее использовать.

У вас есть почти все, что нужно знать, чтобы начать использовать Docker, за исключением того, как обмениваться образами между разработчиками или командами, ну, это описано на сайте под названием Dockerhub, и это основа для обмена образами Docker между разработчиков или команд. Это удаленный репозиторий образов, где вы можете найти официальные образы компонентов, которые вы собираетесь использовать (ОС, фреймворк, ядро ​​базы данных и т. д.), а также настроенные неофициальные образы, созданные кем-то другим. Когда вы выбираете свой базовый образ, Docker извлекает его оттуда, если он еще не находится в вашем локальном репозитории.

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

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

  • docker build: Эта команда используется для сборки docker-образа, она получает некоторые параметры со своими значениями, а последний параметр — это путь к проекту или URL-адрес. Одним из наиболее часто используемых передаваемых параметров является -t, который используется для присвоения тега создаваемому образу.
  • образы докеров: Список всех доступных образов на компьютере, созданных локально или загруженных из концентратора докеров. Самый распространенный параметр, который можно передать, — это -a, который показывает все образы, даже промежуточные, созданные для промежуточных этапов сборки образа.
  • docker ps: Список всех контейнеров, которые в данный момент запущены на компьютере. С помощью этой команды вы можете получить идентификатор контейнера, чтобы позже остановить его.
  • docker run:Эта команда создает новый контейнер из образа и запускает его для использования. Вы должны передать имя или тег изображения, которое хотите использовать, также требуется несколько параметров, наиболее часто используемым из которых является -d для запуска контейнера в отсоединенном режиме, что означает, что терминал не будет заблокирован контейнером. терминал, -it для входа в интерактивный терминал для контейнера (отлично подходит для отладки или настройки файла докера) и -p для сопоставления порта с хост-компьютера с портом в контейнере.
  • docker start: Позволяет запустить один или несколько остановленных контейнеров, передав их идентификаторы.
  • docker stop: Останавливает один или несколько запущенных контейнеров, используя их идентификаторы.
  • docker rm:Удаляет один или несколько остановленных контейнеров.
  • docker save: Его можно использовать для сохранения изображений в файлы .tar для удобного переноса между системами без доступа к Dockerhub. У него есть один параметр -o, чтобы указать выходной файл, в котором вы хотите, чтобы ваше изображение было.
  • docker export: экспортирует файловую систему контейнера в виде файла .tar.

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

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

Вот и все, это все, чему я научился в своем путешествии в качестве новичка в докер, и я надеюсь, что это поможет вам в той или иной форме начать свое дело. Спасибо, что прочитали эту статью, и если она вам понравилась, не забудьте поставить лайк.

Рекомендации

Документация по Docker: https://docs.docker.com/

DockerHub: https://hub.docker.com/

Документация по Docker CLI: https://docs.docker.com/engine/reference/commandline/docker/

Видео о Docker: https://www.youtube.com/channel/UCwFl9Y49sWChrddQTD9QhRA

Разработка с помощью Docker: https://youtu.be/CsWoMpK3EtE

Многоэтапные изображения: https://youtu.be/2KzDMD5Qk2k

Компоновка Docker: https://youtu.be/0B2raYYH2fE