Во-первых, давайте проясним: Kubernetes не сдался полностью Docker, но изменил Docker использование.
Это изменение главным образом связано с объявлением о прекращении поддержки Docker как среды выполнения контейнера, начиная с версии Kubernetes 1.20 (удаление Dockershim). Это означает, что, хотя образы контейнеров, созданные с помощью Docker, можно запускать в кластере Kubernetes, Kubernetes больше не будет использовать Docker в качестве среды выполнения контейнера.
Docker — это механизм контейнеров приложений с открытым исходным кодом, который позволяет разработчикам упаковывать свои приложения и зависимости в портативный контейнер, а затем публиковать их на любой популярной машине Linux, которую также можно виртуализировать. Контейнеры полностью используют механизм «песочницы» и не имеют никаких интерфейсов друг с другом (как и в приложениях для iPhone). Что еще более важно, накладные расходы на производительность контейнера чрезвычайно низки. Docker использует модель архитектуры клиент-сервер (C/S) и использует удаленные API для управления и создания контейнеров Docker. Контейнеры Docker создаются из образов Docker. Изображения можно рассматривать как «шаблоны» для контейнеров, а контейнеры — это экземпляры объектов этих шаблонов. Docker предоставляет очень удобный способ использования изображений. Помимо использования локальных изображений, вы также можете загружать десятки тысяч изображений из Docker Hub.
Kubernetes (также известный как K8s) — это система с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями. Он был разработан Google и передан на поддержку Cloud Native Computing Foundation. Kubernetes предоставляет платформу для развертывания приложений, поддерживает масштабирование приложений и обработку сбоев, а также предоставляет ряд инструментов и сервисов для удовлетворения различных потребностей.
Хотя Docker и Kubernetes Оба являются инструментами, связанными с технологией контейнеризации, но в некоторых аспектах они существенно различаются. Область использования: Docker основнойсосредоточиться наиз — это пакет контейнеризации и запуска, который упрощает доставку приложений. и Kubernetes болеесосредоточиться найз - это управление координацией контейнера, включая автоматическое развертывание, расширение, запуск и планирование контейнера. Дизайн и архитектура: Docker Простой в использовании дизайн, простой в понимании и использовании. Его можно запустить на автономном компьютере или в сочетании с Docker Swarm Работайте вместе на нескольких машинах. Кубернетес Он более сложен, предоставляет больше функций и более высокую гибкость и предназначен для крупномасштабного запуска специализированных приложений на кластерах. Функции и возможности: Docker Непосредственно обрабатывает создание и запуск, в то время как Kubernetes Предоставляет более сложные инструменты планировщика и управления кластером. Кубернетес Он может планировать формирование нескольких контейнеров из приложений и имеет расширенные функции, такие как автоматическое расширение и самовосстановление. Экосистема и сообщество: Хотя Docker и Kubernetes оба имеют сильную поддержку сообщества, но Kubernetes Существующая сфера облачных вычислений и микросервисов в экосистеме богаче и поддерживает больше облачных платформ и интеграции продуктов. В целом, Докер Сосредоточьтесь больше на жизненном цикле одного контейнера, в то время как Kubernetes Дажесосредоточиться кластер наконтейнеров из всего управляемого. В тренде микросервисы и облачные приложения, которые часто дополняют друг друга, Docker для контейнерных приложений, в то время как Kubernetes Используется для управления этими контейнерными приложениями.
Во-первых, давайте проясним: Kubernetes не сдался полностью Docker, но изменил Docker использование.Это изменение главным образом связано с объявлением о прекращении поддержки Docker как среды выполнения контейнера, начиная с версии Kubernetes 1.20 (удаление Dockershim). Это означает, что, хотя образы контейнеров, созданные с помощью Docker, можно запускать в кластере Kubernetes, Kubernetes больше не будет использовать Docker в качестве среды выполнения контейнера. Причиной этого изменения является Docker и Kubernetes технические различия между. Докер Это крупномасштабное приложение, содержащее множество функций, помимо среды выполнения контейнера, оно также включает в себя управление изображениями, хранилище, сеть и т. д. и Kubernetes Фактически, нужна только среда выполнения контейнера. Поэтому, чтобы облегчить Kubernetes бремя более эффективного управления контейнерами, Kubernetes Начните поддерживатьболеелегкийистандартизацияизконтейнеринтерфейс времени выполнения(CRI)。
Это не означает, что Docker устарел, поскольку образы контейнеров, созданные Docker, по-прежнему могут работать в Kubernetes. Просто Kubernetes будет использовать другие среды выполнения контейнеров (например,Containerd или CRI-O) для прямого запуска этих образов. Сам образ Docker соответствует стандарту OCI (Open Container Initiative) и поэтому может использоваться любой стандартной средой выполнения контейнера.
В данном случае Docker — это скорее инструмент разработки, чем среда выполнения контейнера в производственной среде. Разработчики по-прежнему могут использовать Docker для создания, тестирования и развертывания образов контейнеров в кластерах Kubernetes. Фактически, это изменение делает Kubernetes более эффективным, поскольку он может напрямую взаимодействовать с базовым интерфейсом среды выполнения контейнера, сокращая ненужные промежуточные уровни. Два примера кода, показывающих, как использовать контейнеры в среде Kubernetes. Первый пример — это файл Dockerfile, используемый для создания простого образа Docker; второй пример — это файл конфигурации развертывания Kubernetes (развертывание), используемый для развертывания этого образа в кластере Kubernetes. Эти два примера покажут, как развернуть контейнерное приложение Docker в кластере Kubernetes.
В этом примере Dockerfile будет создан образ Docker простого приложения Node.js.
# Используйте официальный из Node.js Базовое зеркало как среда сборки
FROM node:14
# Установите рабочий каталог на /app
WORKDIR /app
# Воля package.json и package-lock.json копироватьприезжатьконтейнерсередина
COPY package*.json ./
# Установить зависимости приложения
RUN npm install
# Воляприложениеизисходный кодкопироватьприезжатьконтейнерсередина
COPY . .
# Приложение прослушивает порт во время работы
EXPOSE 8080
# Определите контейнер для запуска команды из при запуске
CMD ["node", "server.js"]
В этом Dockerfile мы создаем новый образ на основе официального образа Node.js, устанавливаем зависимости приложения и устанавливаем команду, которая будет выполняться при запуске контейнера.
В этом примере файла YAML определяется развертывание Kubernetes для развертывания образа Docker, созданного выше.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-app
labels:
app: nodejs-app
spec:
replicas: 2 # Создать две копии
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-container
image: your-dockerhub-username/nodejs-app:latest # обозначение Docker зеркало
ports:
- containerPort: 8080 # приложение-контейнер прослушивает порт
в этом YAML файл, мы определяем файл с именем nodejs-app из Развертывание. Это Воляразвернуть две копии изконтейнера.,каждыйконтейнероба бегут your-dockerhub-username/nodejs-app:latest зеркало (здесь его нужно заменить на себя из Docker Hub пользовательимяизеркалоимя)。этотразвертывать Конфигурацияобозначение Понятноконтейнервнутреннийизприложение Прослушивающий порт 8080。 Объединив эти два примера, вы можете увидеть Docker и Kubernetes Как совместно создать приложение. Во-первых, используйте Docker Собери приложение иззеркало и пройди Kubernetes Конфигурация развертывания развертывает этот образ в кластере.
Итак, мы можем сказать Kubernetes изменен на Docker использовать метод вместо того, чтобы полностью сдаваться Докер. Это изменение отражает больше Kubernetes Тенденция к стандартизации и развитию эффективности при сохранении Docker Существующиеконтейнер Технические области, основанные на основных ценностях, широко используются. верно Для разработчиков это означает, что они все равно могут использовать его во время разработки. Докер, в то время как Kubernetes В нем больше внимания уделяется организации контейнеризиурегулирования.