Ни для кого не секрет, что Docker произвел революцию в способах упаковки, совместного использования и развертывания приложений. Можно запускать проект в два клика на своем компьютере, не беспокоясь о зависимостях или операционной системе.
Профессиональные команды разработки легко могут выпускать версии проектов и создавать конвейер CI/CD, за счет хранения образов Docker на удаленном сервере, доступном из любой точки мира под названием container registry, например на Docker Hub, данный реестр контейнеров создан компанией Docker и является главным для Docker.
Есть и другие зеркала Docker hub (docker registry):
- https://mirror.gcr.io — зеркало Google
- https://dockerhub.timeweb.cloud — зеркало Timeweb
- https://dockerhub1.beget.com — зеркало Бегет
- https://c.163.com — зеркало Китай
- https://registry.docker-cn.com — зеркало Китай
- https://daocloud.io — зеркало Китай
- https://cr.yandex/mirror — dockerhub россия, зеркало Яндекс
- https://noohub.ru — зеркало noosoft
- https://quay.io — зеркало Redhat
- https://registry.access.redhat.com — зеркало Redhat
- https://registry.redhat.io — зеркало Redhat
- https://public.ecr.aws — зеркало Amazon
При необходимости вы можете развернуть собственное Docker хранилище. Но мы в данном примере, будем использовать непосредственно Dockerhub registry. И так перейдем непосредственно к делу.
Перед упаковкой приложения в образ, необходимо проверить приложение на работоспособность. И, если мы точно уверены, что код работает, пришло время опубликовать его в Интернете, для этого мы соберем отправим образ docker в docker hub.
Создание Dockerfile
Клонируем приложение:
git clone https://github.com/aleksandrvolk/my_first_bot
Перейдем в созданный каталог:
cd my_first_bot
В каталоге my_first_bot создадим пустой файл Dockerfile:
FROM python:3.8
# set work directory
WORKDIR /usr/src/app/
# copy project
COPY . /usr/src/app/
# install dependencies
RUN pip install pytelegrambotapi
# run app
CMD ["python", "main.py"]
Создание Docker image
Сначала войдите в docker hub со своего терминала, используя docker login, вам будет предложено ввести имя пользователя и пароль, и все.
docker login
Во-вторых, нам нужно перестроить образ под нашим именем пользователя docker hub и убедиться, что у него есть тег.
docker build -t aleksandrvolk/my_first_bot:1.0.0 .
Поскольку код не менялся, сборка была очень быстрой, мы просто переназначили его.
Docker push image to dockerhub
Теперь полученный Docker image можно отправить в docker hub и оно будет доступно для всех, но токен по-прежнему не является частью пакета, поэтому любому, кто хочет запустить бота с нашей логикой, потребуется использовать другой собственный токен.
Docker hub предлагает размещать частные изображения за дополнительную плату. Если изображение общедоступное, хостинг бесплатный.
docker image push aleksandrvolk/my_first_bot:1.0.0
Если я зайду на веб-сайт docker hub, я увижу, что изображение теперь опубликовано там.
Запустим приложение в докер:
docker run -d aleksandrvolk/my_first_bot:1.0.0
root@LXCU24DPA:~/my_first_bot# docker run -d aleksandrvolk/my_first_bot:1.0.0
26cb58065aa3510c35973d8dbb019bb99637a4e9fbeebde55d7c27f287f35696
Мое приложение представляет из себя простейший телеграм бот, результат его работы можно проверить:
Обсудить в телеграм канале.