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

1. ЧТО ТАКОЕ ДОКЕР?

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

Технология Docker использует ядро ​​Linux и функции ядра, такие как Cgroups и пространства имен, для разделения процессов, чтобы они могли работать независимо.

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

2. ЧТО ТАКОЕ ДОКЕР-КОНТЕЙНЕР?

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

Образы контейнеров становятся контейнерами во время выполнения, а в случае контейнеров Docker - образы становятся контейнерами, когда они запускаются в Docker Engine.

Контейнеры изолируют программное обеспечение от его среды и гарантируют, что оно работает единообразно, несмотря на различия, например, между разработкой и стадией.

3. ЗАЧЕМ ИСПОЛЬЗОВАТЬ КОНТЕЙНЕРЫ?

Контейнеры предлагают механизм логической упаковки, в котором приложения могут быть абстрагированы от среды, в которой они работают. Такое разделение позволяет легко и согласованно развертывать приложения на основе контейнеров, независимо от того, является ли целевая среда частным центром обработки данных, общедоступным облаком или даже личным ноутбуком разработчика. Это дает разработчикам возможность создавать предсказуемые среды, которые изолированы от остальных приложений и могут быть запущены где угодно.

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

4. ИСТОРИЯ ДОКЕРА

Интригующая загвоздка этого нового контейнерного подхода заключается в том, что он не нов. Идея контейнеров возникла с первых дней существования Unix с помощью команды chroot.

Контейнеры далеко не новые; Google уже много лет использует собственную контейнерную технологию. Другие контейнерные технологии Linux включают Solaris Zones, BSD Jails и LXC, которые существуют уже много лет.

• 1979: Unix V7 - введен системный вызов chroot, изменяющий корневой каталог процесса и его дочерних процессов на новое место в файловой системе. Это продвижение стало началом изоляции процесса.

• 2000: FreeBSD Jails - FreeBSD Jails позволяет администраторам разбивать компьютерную систему FreeBSD на несколько независимых небольших систем, называемых «тюрьмами».

• 2001: Linux VServer - представил механизм тюрьмы, который может разделять ресурсы Linux_VS History of Containers (файловые системы, сетевые адреса, память) в компьютерной системе.

• 2004: Контейнеры Solaris - управление ресурсами системы и разделение границ по зонам.

• 2005: Open VZ (Open Virtuozzo) - технология виртуализации на уровне операционной системы.

• 2006: Контейнеры процессов - Контейнеры процессов (запущены Google в 2006 году) были разработаны для ограничения, учета и изоляции использования ресурсов набора процессов.

• 2008: LXC-LXC (контейнеры Linux) была первой и наиболее полной реализацией диспетчера контейнеров Linux с использованием контрольных групп и пространств имен Linux.

• 2011: Warden - Warden может изолировать среды в любой операционной системе, работая как демон и предоставляя API для управления контейнерами.

• 2013: LMCTFY - Let Me Contain That For You (LMCTFY) стартовал в 2013 году как версия стека контейнеров Google с открытым исходным кодом, предоставляющая контейнеры для приложений Linux.

  • 2013: Docker - Когда в 2013 году появился Docker, популярность контейнеров резко возросла.

5. КОНТЕЙНЕРЫ VS ВМ

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

6. ДОКЕРНАЯ АРХИТЕКТУРА

Docker использует архитектуру клиент-сервер. Docker Engine - это клиент-серверное приложение со следующими основными компонентами:

• Сервер, который представляет собой тип долго выполняющейся программы, называемой процессом демона (команда dockerd).

• REST API, определяющий интерфейсы, которые программы могут использовать для взаимодействия с демоном и указания ему, что делать.

• Клиент интерфейса командной строки (CLI) (команда docker).

Клиент Docker общается с демоном Docker, который выполняет тяжелую работу по созданию, запуску и распространению ваших контейнеров Docker. Клиент и демон Docker могут работать в одной системе, или вы можете подключить клиент Docker к удаленному демону Docker. Клиент Docker и демон обмениваются данными с помощью REST API, через сокеты UNIX или сетевой интерфейс.

7. ДОКЕРСКАЯ ТЕРМИНОЛОГИЯ

Некоторые термины и определения, с которыми вам следует ознакомиться, прежде чем углубляться в Docker

  • Образ контейнера. Пакет со всеми зависимостями и информацией, необходимой для создания контейнера.
  • Контейнер. Экземпляр образа Docker. Контейнер представляет среду выполнения для отдельного приложения, процесса или службы.
  • Dockerfile Текстовый файл, содержащий инструкции по созданию образа Docker.
  • Репозиторий. Коллекция связанных образов Docker, помеченных тегом, указывающим версию образа.
  • Реестр Служба, предоставляющая доступ к репозиториям.
  • Docker Hub. Общедоступный реестр для загрузки изображений и работы с ними.
  • Docker Trusted Registry (DTR) Служба реестра Docker (из Docker), которую можно установить локально, чтобы она находилась в центре обработки данных и в сети организации.
  • Составить Инструмент командной строки и формат файла YAML с метаданными для определения и запуска многоконтейнерных приложений.

8. КОМАНДЫ ДОКЕРА

Каждая команда Docker имеет базовую структуру

8.1 поиск докеров

Используется для поиска изображений в Docker Hub

  • В приведенном ниже примере отображаются изображения с именем, содержащим «hello-world», и с использованием различных фильтров поиска для настройки вывода команды поиска.
docker search hello-world
docker search --filter stars=10 hello-world
docker search --filter stars=10 --filter is-official=true hello-world

8.2 вытягивание докеров

Используется для получения образов из Docker Hub. Пример ниже извлекает образы hello-world, ubuntu и alpine из docker hub.

docker pull hello-world
docker pull ubuntu
docker pull alpine:3.6

8.3 образы докеров

Используется для вывода списка образов докеров. В приведенном ниже примере перечислены образы докеров.

docker images
docker image ls

8.4 запуск докера

Используется для раскрутки док-контейнера на основе образа. В приведенном ниже примере создается новый контейнер с именем «firstcontainer» на основе образа докера «ubuntu: latest». Затем -it инструктирует Docker выделить псевдо-TTY, подключенный к стандартному вводу контейнера; создание интерактивной оболочки bash в контейнере.

8.5 docker exec

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

docker run -it --name exectest ubuntu:latest /bin/bash
docker exec -e VAR=1 exectest bash
docker exec -w /root exectest pwd
docker exec exectest cat /etc/passwd

8.6 объем докера

Используется для создания, перечисления, удаления и проверки томов. В примерах ниже показано, как создать новый том и подключить его к месту в новом контейнере.

docker volume create hello
docker run -it --rm –name volumetest -v hello:/world alpine ash
docker run -it --rm --name volumetest -v $PWD:/tmp alpine /bin/ash

8.6 сеть докеров

Используется для создания, подключения, отключения, составления списка и управления сетями

  • В приведенных ниже примерах показано, как создать новую сеть и прикрепить ее к контейнеру.
docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
Mynetwork
docker run --rm -it --name NetworkTest --network Mynetwork alpine /bin/ash

8.7 реестр докеров

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

  • В приведенном ниже примере показано, как запустить контейнер реестра, отправлять и извлекать образы из нашего локального реестра.
docker run -d -p 5000:5000 --name registry registry:latest
docker image tag alpine:3.6 localhost:5000/myfirstimage
docker push localhost:5000/myfirstimage
docker pull localhost:5000/myfirstimage

8.8 сборка докеров

Используется для создания образа из файла Dockerfile. • Что такое файл Dockerfile?

Dockerfile - это текстовый документ, содержащий все команды, которые пользователь может вызвать в командной строке для сборки изображения. Dockerfile - это, по сути, шаблон с инструкциями по сборке для создания образа.

В приведенном ниже примере показано, как развернуть контейнер из только что созданного изображения. Мы раскручиваем контейнер с портом 8080, сопоставленным с портом 80 на контейнере.

8.9 докер-компоновка

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

  • В приведенном ниже примере показано, как мы можем использовать запуск служб (изображений, сетей, томов и сетей), определенных в файле docker-compose.yml, и проверить, запущены ли службы и работают ли они.
docker-compose up -d
docker ps -a
docker-compose down -d

9. СУХОЙ

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

Installation
curl -sSf https://moncho.github.io/dry/dryup.sh | sudo sh
sudo chmod 755 /usr/local/bin/dry
dry

10. ПОРТЕЙНЕР

Portainer - это легкое и простое решение для управления Docker с открытым исходным кодом. Он позволяет легко управлять хостами Docker и кластерами Docker Swarm через веб-интерфейс пользователя Portainer.

  • В приведенном ниже примере показано, как мы можем вытащить и раскрутить контейнер portainer.
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data portainer/portainer

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