ru:https://highload.today/blogs/kak-docker-uproshhaet-rabotu-programmista-komandy-kotorymi-ya-polzuyus/ ua:https://highload.today/uk/blogs/yak-docker-polegshuye-robotu-programista-komandi-yakimi-ya-koristuyusya/
logo
Инструменты      30/09/2022

Как Docker упрощает работу программиста: команды, которыми я пользуюсь

Олег Коваль BLOG

Python Data Engineer у NIX

В своей прошлой статье на Highload я начал рассказывать об особенностях Docker и коснулся элементов Dockerfile и Docker Image. В этой статье мы продолжим разбирать этот инструмент и поговорим о Docker Hub, Docker Container и Docker Compose.

Docker Hub

Это сервис, где собраны разные Docker Image. Компания Docker позиционирует его как некий аналог GitHub. Но если там мы можем загружать свой или вытаскивать чужой код, то здесь — делать то же самое с собственным или уже подготовленным другими специалистами Docker Image.


У Docker Hub есть полноценный репозиторий изображений. При этом сервис обозначает официальные Image, созданные известными компаниями (тем самым Python или Postgres). Сейчас почти у всех таких компаний есть свои Images. Есть здесь и кастомные Image, созданные другими пользователями. Вы также можете использовать их свободно.

Для коммерческих проектов все же рекомендуется брать только официальные версии. Обычно в таких продуктах все протестировано, регулярно появляются обновления, нет вирусов или других проблем.

В кастомных Image никто не застрахован от багов. К тому же вы будете зависеть в своей работе от других людей.

Также в Docker Hub доступна интеграция с GitHub. Загруженный с этого сервиса код сразу будет попадать в Dockerfile для билдинга Docker Image, а результат — отправляться в Docker Hub. Инструмент очень удобен для автоматизации подобных процессов.

Базовые команды Docker Hub

У этого сервиса также есть несколько ключевых команд:

  • docker login / logout — для входа на Docker Hub и выхода из аккаунта.

  • docker (image) push [OPTIONS] NAME[:TAG]. Эта команда нужна для загрузки Docker Image на Docker Hub. Предположим, вы ищете надежное место хранения для своего Image или хотите поделиться им с коллегой. Для этого пропишите команду с названием Docker Image и с тегом. После запуска вы получите конечную ссылку. Им можно поделиться с другими:
  • Онлайн-курс "Корпоративна культура" від Laba.
    Як з нуля побудувати стабільну корпоративну культуру, систему внутрішньої комунікації та бренд роботодавця, з якими ви підвищите продуктивність команди, — пояснить HR-директор Work.ua.
    Детальніше про курс

  • docker (image) pull [OPTIONS] NAME[:TAG|@DIGEST]. Поможет скачивать и пулить готовый Docker Image из Docker Hub. Принцип аналогичен прошлому: прописываете команду и добавляете название нужного Image. В примере я пулил тот самый Image, который раньше запушил:


Результат — репозиторий со страницами конкретного Docker Image. Ниже можно увидеть всю сопроводительную информацию по продукту, тегу и команде, с помощью которой можно пулить этот Docker Image:

Docker Container

Docker Container — это корабль, который уже на плаву, с инструкцией и прописанными зависимостями. Для полного понимания этого инструмента хочу заговорить несколько важных моментов:

  • Docker Container — не виртуальная машина. Мы не выделяем оперативную память для контейнера и не эмулируем аппаратное обеспечение. Docker Container — это только процесс, выполняющий команды из Docker Image.
  • Docker Container изолирован от остальных. Даже десятки контейнеров не будут взаимодействовать друг с другом. Это очень удобно при работе с несколькими веб-приложениями, у которых могут возникнуть проблемы, скажем, из-за общих портов.
  • Docker Container – это Share OS. Вам не нужно устанавливать каждый раз отдельную ОС — достаточно запустить нужный Image. Он стартует и выполняет заданные команды, не требуя от вас дополнительных усилий.


Кроме того, технология контейнеризации позволяет запускать компактные аналоги виртуальных машин. К примеру, контейнер с образом Ubuntu занимает всего 70 МБ, хотя сама ОС тянет на несколько гигабайтов. Это экономит пространство и ускоряет работу.

При этом установка виртуальной машины — это длительный, сложный процесс, а старт Docker Container проходит очень быстро.

Онлайн курс з промт інжинірингу та ефективної роботи з ШІ від Powercode academy.
Курс-інтенсив для отримання навичок роботи з ChatGPT та іншими інструментами ШІ для професійних та особистих задач, котрі допоможуть як новачку, так і професіоналу.
Записатися на курс


Основные команды Docker Container

  • docker container --help. Подобно Image, эта команда демонстрирует пул основных команд и их краткое описание:

  • docker container ls показывает контейнеры, работающие в данный момент. Благодаря добавлению аргументов функционал может быть расширен. Например, указав тег -a, система отобразит все существующие на компьютере Docker-контейнеры.

  • docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]. Команда, запускающая контейнер. Вместе с ней обязательно следует указывать название Docker Image, по которому будете ранить контейнер. Можно добавлять и теги. Например, -d запустит Docker Container в фоновом режиме, а --name задаст название контейнера. В примере я запустил контейнер под именем test, а затем командой docker container ls проверил его старт:

  • docker container stop [OPTIONS] CONTAINER [CONTAINER...]. Эта команда останавливает запущенный контейнер. В примере я также проверил, чтобы убедиться: нужный Docker Container действительно отсутствует в списке. Если добавить при проверке тег -a, то остановленный появится сверху.

  • docker container start запускает созданные, но не запущенные контейнеры. Это может понадобиться, чтобы поднять остановившийся Docker Container. Для корректной работы команды в нее нужно добавить название или ID нужного контейнера.
  • Онлайн-інтенсив "Як створити рекомендаційну модель за 2 дні" від robot_dreams.
    Ви пройдете етапи вибору, навчання, оцінки рекомендаційної моделі для електронної бібліотеки та отримаєте індивідуальний фідбек від лекторки.
    Приєднатись до інтенсиву

  • docker container inspect [OPTIONS] CONTAINER [CONTAINER...]. Эта команда похожа на docker image inspect и показывает пул свойств контейнера. Это могут быть CMD, Volumes, Images, порты, аргументы, пути, версии Python и т.д.

  • docker container logs [OPTIONS] CONTAINER. Очень полезная команда, с помощью которой можно отслеживать логи контейнера. Например, я использовал Docker Container для тестов апликухи на PySpark, и мне действительно были нужны логи. С ними я мог убедиться, хорошо ли прошли все тесты:

Virtualenv

Это виртуальное окружение, которое создается с помощью Python или другого приложения. Предположим, нам нужно создать venv в Docker container. Представим себе такие ступеньки, как на иллюстрации. На самом высоком уровне расположена виртуальная машина — большая, сложная, обременительная. Далее следует Docker Container — более легкий и компактный при запуске и управлении. На низшем уровне расположен Virtualenv — еще более простое решение, которое может потребоваться в определенных ситуациях.

Например, вам нужно несколько приложений с одним Python, но с разными библиотеками. В таком случае вы можете создать три разделенных виртуальных окружения со своими наборами библиотек. Так удастся не засорять один Python со всеми возможными библиотеками:


Для запуска Virtualenv необходимо установить Python, создать нужное количество виртуальных окружений и установить соответствующие вашим потребностям библиотеки. Существует множество способов создания Virtualenv в контейнерах. Я рассмотрю три основных метода: с помощью Python Virtual Environment, Poetry и Conda.

Python Virtual Environment

Берем официальный Python и создаем ENV. Это переменная, которой можно присвоить виртуальный энвайромент, чтобы он всегда цеплялся к Python. Для этого с помощью pip устанавливаем virtualenv и создаем виртуальное окружение. А дальше остается активировать Python, установить реквайерментсы и скопировать проект, который уже можно запускать.

Фактически вы прописываете шаги, которые сами выполняли бы в контейнере:

Онлайн-курс "Стратегічний маркетинг" від Laba.
Навчіться збільшувати ROI компанії, відстежувати тренди просування та завойовувати нові ринки завдяки комплексній маркетинговій стратегії.
Програма курсу і реєстрація

Poetry

Альтернативный вариант — с библиотекой Poetry. В этом случае через pip устанавливаем Poetry, создаем рабочую директорию и копируем проект. В следующем примере я сначала скопировал все необходимые для построения виртуального окружения команды, а затем ранил это окружение с помощью Poetry. Как только все установилось, копируем проект и запускаем Poetry с необходимыми библиотеками:

Conda

Этот способ я лично часто использую в работе. Запускаем имеющийся контейнер, в котором можно увидеть разные команды. Устанавливаем Conda и прописываем conda activate environment для активации этого инструмента. После этого у вас уже есть запущенный virtual environment от Conda (второй скриншот). Далее можно использовать Python-команды установленного виртуального окружения:


Благодаря одной специфической команде в Docker Container вы можете зайти в контейнер (именно в его CMD) и посмотреть, что там есть. Для этого нужно прописать docker exec -it и название контейнера. А затем задать команду ls, чтобы получить список всех файлов и убедиться, что ничего не потерялось.

Для создания виртуального энвайронмента в контейнере с помощью Conda вам понадобится официальный Image Conda из Docker Hub. Далее прописываете variables. В моем примере это Java и Path. Затем необходимо создать рабочую директорию, скопировать проект, обновить, установить Java и удалить все cache-файлы. После этого прописать команду conda create -n my_venv с указанием нужной версии Python, активировать все с помощью команды echo bin/bash/ -c “source activate my_venv” и установить ревайроментсы.

Последние могут быть какими угодно. Они устанавливаются при запуске контейнера именно для нашего виртуального окружения:

Docker Compose

В заключение я бы хотел рассмотреть Docker Compose. Преимущество Docker над виртуальной машиной уже понятно: он надежно изолирует контейнеры друг от друга.

Если у вас одно приложение, которое выполняется без разных зависимостей и связи с базой данных, Docker Container — идеальный вариант.

Но ведь веб-разработчикам часто нужен не один Image. Например, нужно иметь Django и подключить базу данных PostgreSQL. Это невозможно, ведь контейнеры изолированы.

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

Онлайн-курс "Business English for Marketers" від Laba.
Опануйте професійну англійську для маркетингу.Розширте карʼєрні можливості для роботи з іноземними колегами: від розробки нових продуктів до презентації стратегії бренду.
Детальніше про курс

Docker Compose устанавливает связи между отдельными контейнерами и фактически складывает их в единое целое. С помощью нескольких команд вы можете прописать все зависимости для веб-приложения: и упомянутые Django из PostgreSQL, и nginx, и php, и phpMyAdmin и т.д.


Давайте посмотрим на примере, как это работает. Сначала вы устанавливаете проект Django с зависимостями и запускаете его. Далее нужно связать веб-приложение и базу данных. Для этого в Docker Compose обозначаете его версию и взаимодействующие сервисы. В нашем случае это web и db.

В веб-приложении я прописал билдинг, volumes, порты и зависимости. Само приложение будет зависеть от базы данных. В db я указал нужный Image (здесь это sqlite), путь volumes и environment variables, который будет использоваться для запуска. Все это достаточно просто. Если возникнут вопросы, всегда можно обратиться к Docker Hub. Там ясно описано, как оформить Docker Compose.

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

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

Читайте также: Удобнее виртуальной машины: для чего нужен Docker и как он работает — разбираем основные команды

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Онлайн-курс "Маркетингова аналітика" від Laba.
Опануйте інструменти для дослідження ринку й аудиторії та проведення тестувань.Дізнайтесь, як оптимізувати поточні рекламні кампанії та будувати форкасти наступних.
Детальніше про курс

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров марта

PHP Developer в ScrumLaunch
Всего просмотровВсего просмотров
2434
#1
Всего просмотровВсего просмотров
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсего просмотров
113
#2
Всего просмотровВсего просмотров
113
Career Consultant в GoIT
Всего просмотровВсего просмотров
95
#3
Всего просмотровВсего просмотров
95
CEO & Founder в Trustee
Всего просмотровВсего просмотров
94
#4
Всего просмотровВсего просмотров
94
Рейтинг блогеров

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: