Контейнеры
Введение
Эта контрольная точка предназначена для того, чтобы помочь вам оценить, что вы узнали из наших Kubernetes, двух распространенных контейнерных решений. Вы можете использовать эту контрольную точку, чтобы оценить свои знания по этим темам, просмотреть ключевые термины и команды и найти ресурсы для дальнейшего обучения.
Контейнеризация — это процесс изоляции среды разработки на уровне операционной системы для создания переносимой среды выполнения. Контейнеры совместно используют ресурсы хоста, что позволяет запускать приложение в предсказуемой и контролируемой среде. Использование контейнеров для абстрагирования инфраструктуры и изоляции приложения позволяет эффективно и последовательно масштабировать процессы разработки и тестирования.
В этом контрольном пункте вы найдете два раздела, которые обобщают основные идеи из вводных статей: раздел, в котором кратко излагаются цели экосистемы контейнеров, и второй, посвященный запуску команд, каждый из которых включает подразделы, относящиеся к Docker и Kubernetes соответственно. В каждом из этих разделов есть интерактивные компоненты, которые помогут вам проверить свои знания. В конце этой контрольной точки вы найдете возможности для дальнейшего изучения контейнеров.
Ресурсы
- Введение в контейнеры
- Как установить и использовать Docker в Ubuntu 22.04
- Как установить и использовать Docker Compose в Ubuntu 22.04
- Как использовать docker exec для запуска команд в контейнере Docker
- Как обмениваться данными между контейнерами Docker в Ubuntu 22.04
- Как настроить частный реестр Docker в Ubuntu 20.04
- Введение в Kubernetes
- Как использовать minikube для локальной разработки и тестирования Kubernetes
Что такое контейнер?
Контейнеры обеспечивают предсказуемую и контролируемую среду для разработки ваших приложений. Контейнерные механизмы — это то, что люди обычно имеют в виду, говоря о контейнере.
Чтобы понять контейнеры, важно познакомиться с несколькими ключевыми инструментами контейнеризации.
Дайте определение каждому из следующих терминов, а затем используйте функцию раскрывающегося списка, чтобы проверить свою работу.
Механизмы контейнеров — это комплексное решение для контейнеризации, включающее в себя контейнер, среду выполнения контейнера, образ контейнера и инструменты для их создания. Механизм может также включать реестры образов контейнеров и оркестровку контейнеров. Docker — один из наиболее часто используемых контейнерных движков.
Образ контейнера – это шаблон, предназначенный для создания среды внутри контейнера. Когда образ запускается, слой изображения, доступный только для чтения, накладывается на слой для чтения и записи, который можно настроить в отдельном экземпляре контейнера.
Реестр образов – это репозиторий, в котором хранятся образы контейнеров. Вы можете использовать реестр или репозиторий образов для управления и совместного использования образов контейнеров.
Среда выполнения контейнера управляет запуском и выполнением контейнера. Существует две группы сред выполнения контейнеров: Open Container Initiative (OCI) и Container Runtime Initiative.
Инициатива Open Container предоставляет спецификации и стандарты для форматов контейнеров. OCI обеспечивает основу для запуска контейнера, такого как часто используемый runc
.
Инициатива Container Runtime Initiative сосредоточена на оркестровке контейнеров.
Оркестрация включает подготовку, настройку, масштабирование, планирование, развертывание, мониторинг и многое другое и обычно используется для автоматизации развертывания контейнеров.
Многие разработчики предпочитают контейнеризацию из-за ее переносимости и предсказуемой производительности. Абстрагирование инфраструктуры позволяет одинаково тестировать приложение на нескольких машинах. Эта стабильность в базовой среде позволяет разработчикам работать совместно и удаленно.
Чтобы обеспечить надежную среду разработки и производства, вы можете удовлетворить следующие потребности:
- Предсказуемая и переносимая производительность.
- Эффективность использования и памяти
- Безгражданство с возможностью сохранения данных
- Изолированные контейнеры с возможностью объединения в кластерную сеть
- Журналирование ошибок и выходных данных во время тестирования контейнера
- Развязка приложений и инфраструктуры
- Специализация и микросервисы
Когда контейнеры создаются из одного и того же базового образа, они обеспечивают надежную среду, которая может учитывать ваши потребности в разработке и тестировании. Эта согласованность позволяет вам создавать и уничтожать контейнеры по мере необходимости во время разработки вашего приложения.
Если вы работаете над долгосрочным проектом, для которого требуются постоянные данные в контейнере, вы можете смонтировать том для постоянного хранения данных и обмена данными между контейнерами.
Docker — это два распространенных контейнерных решения. В разделах ниже вы можете оценить, что вы узнали о различиях между ними, работая с обоими вариантами во вводных статьях.
Docker — это контейнерный движок, который чаще всего используется для одновременного запуска одного или двух контейнерных приложений.
Kubernetes — это программное обеспечение для оркестровки, которое позволяет запускать множество перекрывающихся контейнеров в нужном масштабе. Первоначально Kubernetes использовал среду выполнения Docker, но теперь в основном использует уровень абстракции containerd.
Что такое докер?
С помощью Docker вы можете управлять процессами приложений в контейнерах. Docker обычно используется в качестве контейнерного движка и может работать в различных операционных системах.
Вы можете сопоставить свой контейнер Docker с хост-компьютером, сопоставив порты или позволив Docker выбрать случайный, вероятно, неиспользуемый порт. Этот процесс упрощает среду тестирования. Чтобы узнать больше об использовании Docker, вы можете просмотреть The Docker Ecosystem: An Introduction to Common Components.
Docker использует специальную терминологию для поддержки настройки системы. Оцените свои знания терминов Docker, чтобы знать:
Дайте определение каждому из следующих терминов, а затем используйте функцию раскрывающегося списка, чтобы проверить свою работу.
Docker Compose — это инструмент командной строки, который позволяет запускать многоконтейнерные среды приложений в соответствии с файлом YAML. Файл конфигурации YAML будет определять настройку, часто со средой веб-сервера, перенаправлением портов и общим томом.
Docker Hub — это специальный реестр образов, управляемый Docker, компанией, стоящей за проектом Docker.
Образ Docker — это шаблон для создания контейнеров. Есть много общих изображений, доступных для использования.
Том Docker можно использовать для сохранения данных между контейнерами, включая контейнеры, которые остановлены или удалены.
SwarmKit — это набор инструментов для оркестровки с открытым исходным кодом, созданный на Go, который можно использовать для кластера в режиме роя.
Это отличается от предыдущего инструмента под названием Docker Swarm, который теперь называется Swarm Classic и относится к уже заархивированной собственной кластеризации для Docker. Swarm Classic был вариантом для крупномасштабной кластеризации.
Контейнеры Docker предоставляют переносимую и согласованную среду выполнения, которую часто можно развернуть в кластерах Kubernetes.
Что такое Кубернетес?
С Kubernetes вы можете запускать и управлять контейнерными приложениями и службами в кластере машин. Kubernetes часто используется для масштабирования потребностей контейнеризации.
Kubernetes использует специальную терминологию для поддержки настройки системы. Оцените свои знания терминов Kubernetes, чтобы знать:
Дайте определение каждому из следующих терминов, а затем используйте функцию раскрывающегося списка, чтобы проверить свою работу.
Развертывание — это рабочая нагрузка Kubernetes, использующая наборы репликации для управления циклами.
Набор репликации используется для управления модулями, подобно контроллеру репликации, который определяет шаблон модуля для масштабирования модулей реплик.
Серверы в кластере — это узлы, один из которых действует как плоскость управления для кластера, а другие серверы функционируют как рабочие узлы. Каждый узел включает среду выполнения контейнера для управления приложениями и службами в контейнерах на этом узле.
Контейнеры, управляемые как одно приложение, группируются в виде pod. Поды создаются контроллером репликации или набором репликации.
Ваш кластер Kubernetes, состоящий из центрального сервера и узлов, включает в себя определенные компоненты, которые помогают работе кластера и серверам взаимодействовать друг с другом. Для более подробного описания архитектуры Kubernetes вы можете просмотреть An Introduction to Kubernetes.
Чтобы упростить сетевую настройку серверов в кластере, Kubernetes требуются определенные компоненты в плоскости управления, к которым также можно получить доступ через узлы, в том числе:
- Хранилище пар ключ-значение, которое может быть распределено по узлам, например
etcd
. - Сервер API (
kube-apiserver
), который можно использовать для настройки рабочих нагрузок и отправки команд. - Диспетчер контроллеров (
kube-controller-manager
) для управления рабочей нагрузкой, выполнения задач и регулирования кластера. - Планировщик (
kube-scheduler
) для назначения рабочих нагрузок определенным узлам. - Облачный контроллер (
cloud-controller-manager
) для взаимодействия с облачным провайдером, ресурсами и службами от имени кластера.
Узлам также нужны определенные компоненты для связи с центральным сервером и выполнения назначенных им рабочих нагрузок, в том числе:
- Среда выполнения контейнера на каждом узле, например Docker или
runc
. - Служба связи, такая как
kubelet
, с плоскостью управления и обратно;kubelet
использует манифест для определения получаемой рабочей нагрузки и управления рабочим состоянием узла. - Небольшой прокси-сервер, чаще всего
kube-proxy
, для пересылки запросов в контейнеры.
Существуют инструменты командной строки для Docker и Kubernetes, каждый со своим синтаксисом. Вы также можете управлять своими контейнерами с помощью панели инструментов Kubernetes, доступной через веб-браузер при развертывании.
Использование командной строки
Вы начали использовать статьи о базах данных.
Во введении в контейнеры вы продолжили знакомство с командной строкой с помощью таких команд, как:
cat
для отображения файла.chmod
для установки разрешений с помощью нового инструмента.curl
для передачи данных по указанному адресу (URL).echo
для отображения строки, переданной в качестве аргумента.env
для печати всех переменных среды.выход
, чтобы закрыть интерактивную оболочку Docker.mkdir
для создания новых каталогов.pwd
для печати текущего рабочего каталога.systemctl
для управления демоном Docker.tail
для печати последних десяти строк файла.наблюдайте
, чтобы постоянно запускать определенную команду (по умолчанию каждые две секунды).whoami
, чтобы напечатать имя пользователя текущего пользователя.
Вы также работали с уникальным синтаксисом команд для различных механизмов контейнеров и использовали менеджер пакетов Homebrew для установки minikube
для своего кластера Kubernetes. В разделах ниже вы рассмотрите команды, которые вы запускали во вводных статьях для Docker и Kubernetes.
Запуск команд Docker
В статьях, посвященных Docker, вы установили и управляли контейнером Docker на сервере Ubuntu. По умолчанию команду docker
может запускать только пользователь root, добавив перед ним команду sudo
или пользователь из группы docker
.
Вы использовали команду docker
для передачи параметров, подкоманд и аргументов в ваш контейнер Docker:
docker exec
для запуска команд в активном контейнере, используя флаг--workdir
для указания каталога, в котором должна выполняться команда,- Флаг -user
для запуска команды от имени другого пользователя и флаг-e
для передачи переменной среды в контейнер или--env-file
флаг, чтобы указать файл.env
.docker images
для просмотра изображений, загруженных в вашу систему.docker info
для доступа к общесистемной информации.docker ps
для просмотра активных контейнеров, запущенных в вашей системе, с помощью переключателя-a
для просмотра всех контейнеров, как активных, так и неактивных, и-l
переключиться на просмотр последнего созданного вами контейнера.docker rename
, чтобы переименовать контейнер.docker rm
с идентификатором или именем контейнера, чтобы удалить контейнер.docker run
для запуска контейнера из указанного образа с использованием комбинированных переключателей-it
для интерактивного доступа к оболочке.docker search
для поиска образов, доступных в Docker Hub, иdocker pull
для загрузки указанного образа из реестра.docker start
с идентификатором или именем контейнера для запуска остановленного контейнера.docker stop
с идентификатором или именем контейнера, чтобы остановить работающий контейнер.docker tag
для переименования созданного образа.docker volume
для управления объемами данных.
Получите ответы, используя функцию раскрывающегося списка.
Команда docker exec
используется для запуска программ и проверки запущенных контейнеров, тогда как вы можете запустить docker run
для создания новых контейнеров.
Вы можете создавать образы с помощью Dockerfile
с помощью команды docker build
, хотя вы не запускали эту команду в этих вводных статьях. Dockerfile
используется для создания образов, тогда как запуск файла конфигурации YAML с docker compose
будет управлять оркестровкой.
Вы также использовали параметр --help
для доступа к параметрам, доступным для различных подкоманд, таких как следующие переключатели:
--name
, чтобы дать имя контейнеру.--rm
для создания контейнера, который удаляет себя при остановке.-d
отсоединит контейнер от терминала, чтобы запустить его в фоновом режиме.-v
для управления томом Docker путем присвоения ему имени или для создания привязки (при указании/
или~/
).< /li>
Docker также предоставляет инструмент командной строки Docker Compose для управления многоконтейнерными средами. Вы настроили файл конфигурации YAML для создания среды веб-сервера с перенаправлением портов и общим томом и выполнили следующие команды для управления контейнерами:
docker compose up
запускает контейнерную среду.docker compose ps
предоставляет информацию о запущенных контейнерах и перенаправлении портов.docker compose logs
получает доступ к журналам вашего контейнера.docker compose pause
приостанавливает работу контейнера, аdocker compose unpause
возобновляет его работу.docker compose stop
остановит контейнер.docker compose down
удаляет контейнеры, сети и тома, связанные со средой.
Получите ответы, используя функцию раскрывающегося списка.
Команда docker
запускает все подкоманды в командной строке, тогда как docker compose
запускает файл YAML для предоставления данных конфигурации, которые можно использовать для нескольких сред контейнеров. Контейнеры, запущенные с помощью docker compose
, также могут совместно использовать сети и тома данных.
Если у вас более крупное развертывание с несколькими параллельно работающими контейнерами, вы можете написать один файл YAML для настройки конфигураций контейнера и запустить docker compose
для отправки команд всем компонентам и управления ими как группой. . В результате docker compose
помогает масштабировать управление контейнерами по мере роста ваших приложений и необходимости надежной настройки оркестровки.
Чтобы управлять своими образами с помощью личного реестра Docker и Docker Hub, вы выполнили следующие команды:
docker login
, чтобы войти в систему с переключателем-u
для вашего имени пользователя.docker commit
для фиксации нового образа Docker с переключателем-m
для предоставления сообщения о фиксации и переключателем-a
для указания автор.docker push
для отправки изображений, в том числе в ваш собственный репозиторий.docker pull
, чтобы перенести изображения на новый компьютер.
Для постоянных данных вы также делитесь данными между контейнером Docker и хостом.
Docker — это один из распространенных контейнерных движков; Kubernetes — это платформа оркестрации, которая может запускать контейнерный движок Docker.
Запуск команд Kubernetes
В статьях, посвященных Kubernetes, вы запустили компаньон minikube
с платформой Docker для имитации кластера Kubernetes, работающего на одном компьютере, что позволило вам получить доступ к панели инструментов браузера для вашего кластера Kubernetes.
Вы выполнили следующие команды minikube
:
minikube start
, чтобы запустить инструмент и включитьkubectl
, при необходимости используя-p
или--profile
. возможность указать кластер.панель управления minikube
для доступа к панели управления Kubernetes с автоматической переадресацией портов, используя параметр--url
для облегчения переадресации портов с удаленного сервера через туннелирование SSH.minikube service
с указанной службой и опцией--url
для получения URL-адреса работающей службы.minikube config
для управления кластером с помощью таких подкоманд, какset memory
,get profile
,minikube delete
, чтобы удалить службу и повторно развернуть ее.minikube mount
для временного монтирования каталога из вашей локальной файловой системы в кластер с использованиемlocal_path:minikube_host_path
синтаксис, чтобы указать, какой каталог и где в контейнере.профиль minikube
с указанным кластером для переключения активного профиля.
Вы также использовали команду kubectl
со следующими подкомандами:
kubectl get pods
для получения списка всех модулей, работающих в вашем кластере, используя аргумент-A
для поиска всех пространств имен.kubectl create deployment
, чтобы создать именованное развертывание как службу, используя параметр--image
для вызова указанного удаленного образа.kubectl expose deployment
для предоставления именованного развертывания, указав порт с параметром--port
и параметром--type
.< /li>kubectl get service
, чтобы проверить, запущена ли указанная служба.kubectl получить узлы
, чтобы получить список активных узлов в кластере, используя параметр--kubeconfig
, чтобы указать другой файл конфигурации YAML.
Чтобы начать работу с управляемой службой Kubernetes, вы можете просмотреть документацию DigitalOcean Kubernetes Quickstart.
Что дальше?
Обладая более глубоким пониманием контейнеров и популярных механизмов контейнеров баз данных, вы можете контейнеризовать свою среду разработки для согласованности при создании приложений. Это может показаться слишком простым ответом для такой сложной темы, но теперь у вас есть контейнерная экосистема (или две!), в которой вы можете экспериментировать, создавать приложения и масштабировать проекты.
Чтобы расширить свою экосистему Docker, вы можете следовать следующим руководствам:
- Контейнеризация приложения Node.js для разработки с помощью Docker Compose
- Как защитить контейнерное приложение Node.js с помощью Nginx, Let’s Encrypt и Docker Compose
Если вы предпочитаете сразу приступить к делу, попробуйте выполнить развертывание из образов контейнеров.
Чтобы продолжить разработку кластера Kubernetes, вы можете ознакомиться с этими статьями:
- Архитектура приложений для Kubernetes
- Модернизация приложений для Kubernetes
- Рекомендации по преобразованию монолитных приложений в микросервисы
- Наша серия «От контейнеров до Kubernetes с Django»
Если вы хотите высвободить ресурсы для разработки, вы можете перейти на реестр контейнеров DigitalOcean (DOCR) для дополнительной поддержки ваших контейнеров Docker и кластеров DigitalOcean Kubernetes.
Обладая новыми знаниями о контейнерах, вы готовы продолжить свое облачное путешествие с базами данных.