Введение в Docker для начинающих
Я помню свой третий demo-проект. После сборки и тестирования проекта всё работало. В тот момент я отправил его человеку, который должен был демонстрировать его вместо меня. И вот, не задача, во время запуска возникла ошибка…
“Но он же работал на моём компьютере!”
Чтобы сохранить собственную репутацию, я начал производить отладку. Проект не запускался потому, что тому человеку нужно было обновить программное обеспечение, чтобы у него работали новые функции. Я помог ему в этом, и, о чудо, всё заработало!
А теперь представьте, если бы мне нужно было разослать данный проект не одному человеку, а десятерым. Тогда мне пришлось бы помогать каждому, перенастраивать их компьютеры, чтобы новые функции успешно работали. Думаю, я бы испытал огромный стресс…
Было бы отлично, если бы существовало такое ПО, с помощью которого можно было бы упаковать всё необходимое для работы приложения в одном месте, а потом поделиться этим файлов с коллегами. Они бы скачивали файл и запускали его, при этом не получая ошибку. Но ведь такая программа существует! И называется она Docker.
Docker помогает решать эти проблемы. В этой статье объясняются основные концепции Docker, а также показано то, как создавать контейнеры для ваших приложений.
@Golang_google – все инструмента для освоения Golang и Docker в одном месте.
Что такое контейнеры?
Контейнер – это воображаемая коробка, содержащая в себе всё необходимое для запуска вашего проекта. Например:
- исходный код проекта
- зависимости проекта
- файл конфигурации
- настройка базы данных
- среда выполнения и т.д.
Контейнер позволяет вам делиться своим проектом и запускать его, не беспокоясь о системных настройках, необходимых для запуска проекта.
Docker — это программное обеспечение, которое помогает создавать контейнеры и управлять ими.
Чтобы создать Docker-контейнер, вам необходимо запустить образ Docker.
Образ Docker
Образ Docker – это доступный только для чтения шаблон, который задает настройки контейнера. Образ содержит исполняемый код вместе с определениями любых библиотек и зависимостей, которые могут понадобиться для его работы.
Образ Docker определяет структуру контейнера. Он служит шаблоном или планом для создания контейнера. С помощью одного образа Docker вы можете создать множество контейнеров для своего проекта.
Это как тогда, когда вы рисуете план дома. План получится один, но применить его можно сразу к множеству домов.
Используя один образ Docker, вы можете создать множество контейнеров.
Самый популярный способ создания образа Docker — через Dockerfile.
Dockerfile
Dockerfile — это текстовый файл, содержащий инструкции о том, как Docker создаст образ. Чтобы создать образ, Docker выполняет команды, записанные в Dockerfile, построчно.
Вот пример Dockerfile. Он предназначен для Java-приложения:
Сейчас я объясню, что делает оператор в каждой строке
Строка 1 : FROM openjdk:11
Каждый образ Docker создаётся на основе существующего образа. Этот существующий образ называется базовым образом. Им может являться:
- изображение среды выполнения
- образ операционной системы
Первая строка каждого Dockerfile должна указывать на базовый образ.
Синтаксис для указания базового образа:
FROM <baseImageName>:<tag>
Docker извлечёт этот образ из реестра, когда попытается создать ваш образ. Реестр докеров похож на GitHub. Это репозиторий образов. Наиболее часто используемым реестром докеров является Docker Hub.
В приведённом выше примере образ докера предназначен для приложения Java, поэтому используемый базовый образ представляет собой среду выполнения Java.
tag
указывает версию вашего базового образа. В приведённом выше примере используется tag
для java 11. Вы можете указать базовое изображение без столбца и tag
. Если вы не укажете tag
, Docker загрузит последнюю версию базового образа.
Строка 2: ADD target/*.jar app.jar
Контейнер содержит всё необходимое для запуска приложения. Итак, чтобы создать контейнер, вам нужно скопировать всё, что нужно для запуска приложения, в образ Docker. Это делается с помощью команды ADD или COPY. В приведённом выше примере используется команда ADD.
Приведённый выше пример относится к java-приложению. Таким образом, всё необходимое для запуска приложения уже упаковано в файл .jar. Вам просто нужно скопировать файл .jar в контейнер.
В других случаях, когда вам понадобится исходный код для запуска приложения, вы можете скопировать исходный код в контейнер. Вот пример:
В этом примере проекта вам нужен как исходный код, так и его зависимости для запуска приложения. Строка 2 создаёт новый каталог. Строка 3 копирует исходный код в новый каталог. Затем строка 4 устанавливает зависимости в контейнер.
Строка 3: ENTRYPOINT [“java”,”-jar”,”/calculator.jar”]
Каждый файл Докера должен включать команду, которая будет выполняться при запуске контейнера. Эта команда обычно используется для запуска вашего приложения. Для java-приложений обычно используется команда java -jar appname.jar.
Она указывается с помощью ENTRYPOINT или CMD. Каждый Docker должен иметь команду точки входа или команду CMD.
Когда ваш Dockerfile будет готов, вы можете поместить свой проект в контейнер.
Как контейнизировать ваше приложение?
Шаг 1: Создайте своё приложение
Шаг 2: Загрузите и установите Docker
Шаг 3. Создайте образ Docker
Чтобы создать образ Docker, вам понадобится Dockerfile. В корневом каталоге вашего проекта создайте новый файл с именем «Dockerfile». Определите структуру вашего образа в файле, а затем запустите команду сборки Докера.
-t
используется для присвоения изображению имени и тега.- В идеале ваш Dockerfile должен находиться в корневом каталоге вашего проекта. Поэтому, чтобы указать его путь, используйте
« . »
.
Ваша первая сборка может занять некоторое время. Это связано с тем, что Докеру придётся загрузить базовый образ из Docker Hub. Эта загрузка происходит только один раз. Следующие сборки будут быстрее.
После создания образа вам нужно запустить контейнер.
Шаг 4: Запустите ваш контейнер
Чтобы запустить контейнер, выполните следующую команду в терминале корневого каталога вашего проекта:
Используйте
--name
для того, чтобы дать имя вашему контейнеру.
Команда запуска Docker создаёт новый контейнер из образа. Если вы не укажете имя для своего контейнера, Docker присвоит ему случайное имя.
После того, как вы выполните команду запуска, вы должны увидеть, как ваш проект работает в терминале.
Каждый раз, когда вы используете команду запуска Docker, Docker создаёт новый контейнер.
- Чтобы перезапустить существующий контейнер, запустите
docker start containerName
- Чтобы остановить работающий контейнер, запустите
docker stop contanierName
- Чтобы проверить список запущенных контейнеров, запустите
docker ps
- Чтобы получить все контейнеры, как запущенные, так и неработающие, запустите
docker ps -a
.
Всякий раз, когда вы будете обновлять свой код, вам нужно будет перестроить образ Docker.
Поделитесь вашим Docker-образом
Вы можете поделиться своим образом Docker, отправив коллегам Dockerfile. Когда они получат его, они будут запускать соответствующие команды сборки Докера, чтобы запустить образ.
Вы также можете поделиться своим образом Docker через Docker Hub. Отправьте образ в репозиторий Docker, после чего ваши коллеги смогут извлечь его и создать контейнеры из образа. Этот процесс похож на то, как вы делитесь своим кодом через GitHub.
Заключение
Docker — это программное обеспечение для создания контейнеров и управления ими. Контейнеры упрощают совместное использование и тестирование вашего проекта.
Чтобы создать контейнер для своего проекта, используйте Dockerfile для создания образа. Этот образ должен содержать всё необходимое для запуска вашего проекта. Затем используйте образ, чтобы создать столько контейнеров, сколько хотите.
Надеюсь, вы нашли прочтение данной статьи полезным!