Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик аккаунт, просьба указывать источник перепечатываемой статьи.
Docker
В настоящее время это популярная контейнерная технология. Я считаю, что как разработчик вы, должно быть, слышали о ней или использовали ее.Docker
Понимайте это как легковесную виртуальную машину, но на самом делеDocker
с виртуальной машиной (VM
) — это две разные технологии виртуализации компьютеров, и многие люди подумают, что если у вас есть виртуальная машина, зачем вам ее использовать?Docker
Шерстяная ткань?
С небольшим сомнением в уме, давайте учиться вместеDocker
Бар.
Примитивные годы без технологии виртуализации
Давайте подумаем об этом, в «древние» дни без технологии виртуализации вычислений, если бы мы развернули приложение (Application
), каковы общие шаги?
Первым шагом должна быть подготовка физического сервера, а затем установка операционной системы на физическом сервере (Operating System
), после того, как у нас установлена операционная система, мы устанавливаем и запускаем наше приложение в операционной системе.Этот процесс можно представить следующим рисунком:
Итак, что не так с этим подходом? На самом деле развертывание приложений на физических машинах имеет следующие недостатки:
-
Развертывание очень медленное: Поскольку нам нужно сначала подготовить аппаратный сервер, затем установить операционную систему, а затем развернуть приложение, а приложение имеет много зависимого программного обеспечения, поэтому этот процесс является относительно медленным.
-
очень высокая стоимость: Основная причина в том, что стоимость физических серверов слишком высока, а сервер нужен даже простому приложению.
-
растрата ресурсов: Если приложение слишком простое, легко растратить аппаратные ресурсы, такие как
CPU
и память -
Миграция и масштабирование слишком медленные: Если вам нужно перенести приложение или расширить приложение, вам нужно подготовить другие физические серверы, что очень хлопотно и медленно.
Так что же можно сделать, чтобы решить эти проблемы? Ответ — технология виртуализации.
Эпоха развертывания приложений с использованием виртуальных машин
Что такое технология виртуализации
Когда речь заходит о технологии компьютерной виртуализации, мы сразу думаем о виртуальных машинах.Виртуальные машины позволяют нам моделировать несколько машин на одном физическом компьютере.Hypervisor
изолироватьCPU
, память и другие аппаратные ресурсы, а также виртуализировать несколько виртуальных серверов. Таким образом, на физический сервер можно установить несколько приложений для максимального использования ресурсов, а несколько приложений изолированы друг от друга, как показано на следующем рисунке:
Преимущества виртуальных машин
-
Ресурсы могут быть распределены между различными виртуальными машинами для максимального использования аппаратных ресурсов.
-
По сравнению с развертыванием приложений непосредственно на физических машинах виртуальные машины упрощают масштабирование приложений.
-
Облачный сервис: с помощью виртуальных машин можно виртуализировать различные физические ресурсы для быстрого создания облачных сервисов.
Недостатки виртуальных машин
Недостаток виртуальных машин заключается в потреблении ресурсов физического сервера.Когда мы создаем виртуальную машину на физическом сервере, нам необходимо виртуализировать набор оборудования и запустить на нем полную операционную систему.Каждая виртуальная машина занимает много Ресурсы.
Что такое Докер?
По сравнению с громоздкостью виртуальных машин,Docker
Он более легкий, поэтому не будет занимать слишком много системных ресурсов.
Docker
Он очень популярен в наше времяGolang
развитие языка, а его техническое ядроLinux
ядроCgroup
,Namespace
иAUFS
КатегорияUnion FS
и другие технологии, эти технологииLinux
технология, существующая в ядре уже много лет, так что строго говоряDocker
Не совсем инновационная технология,Docker
через эти лежащие в основеLinux
технология, даLinux
Процесс инкапсулирован и изолирован, а изолированный процесс также называется контейнером, который полностью независим от хост-процесса.
такDocker
Это реализация технологии контейнеров и виртуализация на уровне операционной системы, которая полностью отличается от виртуальной машины, устанавливающей операционную систему через набор оборудования.
Сравнение Docker и виртуальных машин
Docker
Это изоляция на уровне процесса операционной системы, в то время как виртуальная машина изолирована на уровне физических ресурсов. Они совершенно разные. Кроме того, мы также можем понять фундаментальную разницу между ними посредством следующего сравнения.
Сравнение контейнеров и виртуальных машин [из «Docker — от начала до практики»]
Из приведенного выше сравнения контейнеров и виртуальных машин мы понимаем преимущества технологии контейнеров.
Контейнеры решают проблемы разработки и производства
Среда разработки и производственная среда отражают противоречие между разработчиками и эксплуатационным и обслуживающим персоналом.Может быть, мы часто слышим слова, которые разработчики говорят эксплуатационному и обслуживающему персоналу: «На моем компьютере все работает нормально, как он попал в вы? Если что-то пошло не так, это должна быть ваша проблема», в то время как оперативный персонал думал, что это проблема разработчика.
Разработчикам необходимо устанавливать различные тестовые среды на локальную машину, поэтому чем больше программного обеспечения и зависимостей требует разрабатываемый проект, тем сложнее будет среда установки.
Точно так же персонал по эксплуатации и техническому обслуживанию должен обеспечить производственную среду для проектов, разработанных разработчиками.Помимо работы с зависимостями между программным обеспечением, персонал по эксплуатации и техническому обслуживанию также должен учитывать совместимость между установленным программным обеспечением и оборудованием.
Вот и все, поэтому мы часто видим, как разработка, эксплуатация и техническое обслуживание обвиняют друг друга, как решить эту проблему?
Контейнеры — хорошее решение. Контейнеры могут стать языком для общения между разработкой, эксплуатацией и обслуживанием, поскольку контейнеры, как и контейнер, обеспечивают минимальную среду для запуска программного обеспечения. Он может обмениваться данными и передавать данные между разработкой, эксплуатацией и обслуживанием.
Докер-версия
Docker
Разделено на общественное издание (CE
) и корпоративная версия (EE
) две версии, версию для сообщества можно использовать бесплатно, а версию для предприятий нужно платить.Для наших индивидуальных разработчиков или малых предприятий обычно используется версия для сообщества.
Docker CE
Существует три канала обновления, а именноstable
,test
,nightly
,stable
стабильная версия,test
является предварительной версией после тестирования, в то время какnightly
Это версия, которая находится в разработке и будет официально выпущена в следующей версии Мы можем загрузить и установить ее в соответствии с нашими потребностями.
Как установить Докер?
Ну, через предыдущее введение, мы должныDocker
С предварительным пониманием приступим к вводуDocker
учебного путешествия.
во время обученияDocker
Первый шаг от установкиDocker
Чтобы запустить среду выполнения, мы начинаем сDocker
Версия сообщества (CE
) Установлен в качестве примера.
Docker
Издание сообщества предоставляетMac OS
,Microsoft Windows
иLinux
(Centos
,Ubuntu
,Fedora
,Debian
) и другие установочные пакеты операционной системы, а также поддерживает установку на облачных серверах, таких какAWS Cloud
.
Установить в системах Windows
Docker Desktop for Windows
Docker
заWindows
Предоставляет установочный пакет для управления настольными приложениями (Docker Desktop for Windows
), но к системе предъявляются следующие требования:
- должно быть
64
немногоWindows10
Professional Edition, Enterprise Edition, Education Edition, основанные на15063
или позже, - существует
BIOS
Виртуализация включена в . Обычно виртуализация включена по умолчанию. - Как минимум
4GB
ОЗУ. -
CPU
служба поддержкиSLAT
.
Если операционная система соответствует вышеуказанным требованиям, вы можете напрямую загрузить установочный пакет и установить его напрямую.После успешной установкиDocker
Он не запустится автоматически, нам нужно запустить его самостоятельно, мы можем запустить его вНачинатьнашел в менюDocker
, Как показано ниже, нажмите Start, чтобы начать.
Docker Toolbox
Если система не соответствует вышеуказанным требованиям, например, вы используетеWindows 7
операционной системы, если вы хотите использоватьDocker
, вам нужно использоватьDocker Toolbox
,Docker Toolbox
даDocker
предоставлено в более старыхMac OS
,Windows
установлен в операционной системеDocker
Набор инструментов для окружающей среды.
Docker Toolbox
включаютdocker-cli(就是我们在终端使用的docker命令行工具)
,docker-compose(多容器管理工具)
,docker-mecahine
,VirtualBox(虚拟机)
,Kitematic(docker的GUI管理工具)
.
по существу использоватьDocker Toolbox
УстановитьDocker
среда, на самом делеVirtualBox
создатьLinux
виртуальную машину и установить на виртуальную машинуDocker
.
Кроме того, в процессе установки будет включенWindows
изHyper-V
модуль (Windows
Технология виртуализации операционной системы), здесь стоит отметить, что если она включенаHyper-V
,ноVirtualBox
Более не действителен.
Установить на Mac OS
в видеWindows
Как и операционная система,Docker
заMac OS
Также как настольное приложение (Docker Desktop for Mac
), что относительно просто, начиная сdocker
Скачать с официального сайтаDokcer.dmg
установить, открытьDocker.dmg
,Как показано ниже:
перетащите напрямуюDocker
значок для завершения установки.
для старшегоMac OS
операционная система, также может быть какWindows
то же самое, используйтеDocker Toolbox
, вы можете обратиться к приведенному выше введению.
существуетMac OS
После завершения установки вApplication
найти вDocker
значок, дважды щелкните, чтобы открыть, чтобы начатьDocker
, следующее:
Установить в Linux
существуетLinux
Установка в операционной системе в основном начинается сCentos7
Например, другиеLinux
Релизная версия системы, напримерUbuntu
,Debian
,Fedora
д., вы можете запросить самостоятельноDocker
изофициальная документация.
удалить старую версию докера
может быть, некоторыеLinux
предварительно установленDocker
, но общая версия относительно старая, поэтому вы можете выполнить следующий код, чтобы удалить старую версиюDocker
.
$ sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
Укажите версию установки
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Установить докер с помощью yum
$ sudo yum install docker-ce docker-ce-cli containerd.io
запустить докер-сервер
# 启动docker守护进程
$ sudo systemctl start docker
Проверьте, прошла ли установка успешно
Устанавливал вышеуказанными способамиDocker
После этого мы можем проверить успешность установки следующим методом.
распечатать версию докера
# 打印docker版本
$ docker version
Извлеките образ и запустите контейнер
# 拉取hello-world镜像
docker pull hello-world
# 使用hello-world运行一个容器
docker run hello-world
Если после выполнения вышеуказанной команды есть вывод, как показано на следующем рисунке, установка прошла успешно.
Основные концепции Docker
зеркало (Image
),контейнер(Container
) и склад (Repository
), эти триdocker
Самые основные и основные понятия вdocker
ключ.
Изображение
чтоDocker
зеркало?
Docker
По сути пробегLinux
приложений в операционной системе, в то время какLinux
Операционная система разделена на ядро и пользовательское пространство.Centos
все ещеUbuntu
, все после запуска ядра, путем монтированияRoot
файловая система для предоставления пользовательского пространства,Образ Docker — это корневая файловая система..
Docker
Образ — это специальная файловая система, которая предоставляет программы, библиотеки, ресурсы, конфигурационные и другие файлы, необходимые для запуска контейнера, а также содержит некоторые параметры конфигурации, подготовленные для среды выполнения (такие как анонимные тома, переменные среды, пользователи и т. д.) .
Изображение является статичным понятием, не содержит никаких динамических данных, и его содержание не будет изменено после построения.
Следующие команды представляют собой некоторые основные операции по зеркальному отображению, а именно:
Посмотреть список зеркал
# 列出所有镜像
docker image ls
Так как мы уже вытащилиhello-world
зеркало, поэтому он выведет следующее:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 7 months ago 1.84kB
Следующая команда также может просматривать список локальных зеркал, и ее запись более лаконична.
# 列表所有镜像
docker images
Вытащите образ из репозитория
Мы уже продемонстрировали использованиеdocker pull
команда вытащилаhello-world
Зеркальный, конечно использоватьdocker image pull
Команда та же.
Обычно значение по умолчанию отDocker Hub
Потяните зеркало вверх,Docker Hub
даDocker
Официально предоставленный сервис зеркального репозитория (Docker Registry
), существует большое количество официальных или сторонних зеркал, которые мы можем использовать, например, мы можем ввести следующую команду в командной строке, чтобы напрямую получить одноCentos
Зеркало:
docker pull centos
docker pull
Полное написание команды выглядит следующим образом:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
Вытяните изображение, вам нужно указатьDocker Registry
адрес и номер порта, по умолчаниюDocker Hub
, также необходимо указать имя склада и метку.Имя склада и метка однозначно определяют изображение, и метка может быть опущена.Если опущена, по умолчанию в качестве имени метки используется самая последняя.Кроме того, имя склада составляется имени автора и имени программного обеспечения.
Затем мы используем вышеcentos
, потому что имя автора опущено, имя автораlibrary
,ВыражатьDocker
Официальное зеркало, поэтому приведенная выше команда эквивалентна:
docker pull library/centos:latest
Поэтому, если вы качаете неофициальный сторонний образ, вам необходимо указать полное имя репозитория следующим образом:
docker pull mysql/mysql-server:latest
запустить изображение
использоватьdocker run
командой, вы можете создать контейнер из образа следующим образом:
docker run -it centos /bin/bash
удалить зеркало
Когда есть какие-то локальные образы, которые нам не нужны, мы также можем удалить образ, чтобы сэкономить место для хранения, но следует отметить, что если есть контейнеры, созданные с использованием образа, который не был удален, удаление образа не допускается.
# image_name表示镜像名,image_id表示镜像id
dockere image rm image_name/image_id
Быстрая команда для удаления зеркала:
docker rmi image_name/image_id
хорошо, оDocker
Здесь мы вкратце познакомим с актуальными знаниями о зеркалировании, если будет возможность, напишем отдельную статью, чтобы рассказать о нем, особенно о построенииDocker
Необходимо углубленно изучить соответствующие знания о зеркальной части.
Контейнер
Docker
Изображение используется для создания шаблона контейнера Изображение многоуровневое Отношение между изображением и контейнером — это отношение между классом и объектом в объектно-ориентированном программировании Мы определяем каждый класс, а затем используем класс создать объект, соответствующийDocker
С точки зрения использования, это создание каждого образа, а затем использование образа для создания необходимых нам контейнеров.
Запускать и останавливать контейнеры
Существует два способа запуска контейнера.Один из них мы представили ранее, используяdocker run
Команда создает совершенно новый контейнер из образа следующим образом:
docker run hello-world
Другой способ запустить контейнер — запустить остановленный контейнер:
# container_id表示容器的id
docker start container_id
Чтобы остановить работающий контейнер, вы можете использоватьdocker container stop
илиdocker stop
команда, как показано ниже:
# container_id表示容器的id
docker stop container_id
просмотреть все контейнеры
Если вы хотите просмотреть все контейнеры локально, вы можете использоватьdocker container ls
Заказ:
# 查看所有容器
docker container ls
Просмотр всех контейнеров также имеет краткий способ написания, а именно:
# 查看所有容器
docker ps
удалить контейнер
Мы также можем использоватьdocker container rm
команда или сокращениеdocker rm
команда для удаления контейнера, но нельзя удалить работающий контейнер, поэтому, если вы хотите удалить, вы должны сначала остановить контейнер,
# container_id表示容器id,通过docker ps可以看到容器id
$ docker rm container_id
Когда нам нужно удалить все контейнеры в пакетном режиме, мы можем использовать следующую команду:
# 删除所有容器
docker rm $(docker ps -q)
# 删除所有退出的容器
docker container prune
в контейнер
# 进入容器,container_id表示容器的id,command表示linux命令,如/bin/bash
docker exec -it container_id command
Репозиторий
В предыдущем примере мы использовали два способа сборки образа: после завершения сборки вы можете запустить образ локально для создания контейнера, но что, если вы запустите образ на большем количестве серверов? Очевидно, что в настоящее время нам нужен сервис, который позволит нам централизованно хранить и распространять изображения, точно так же, как Github позволяет нам самим хранить и распространять код.
Docker Hub
Это официальный веб-сайт, предоставляемый Docker для хранения и распространения изображений.Docker Registry
, также по умолчаниюRegistry
, URL-адрес которогоhttps://hub.docker.com
, ранее мы использовалиdocker pull
команда отDocker Hub
Поднимите изображение.
Docker Hub
Есть много высококачественных изображений, предоставленных нам официальными или другими разработчиками.Конечно, если мы хотим загрузить наши собственные созданные изображения наDocker Hub
, нам надоDocker Hub
Зарегистрируйте учетную запись на , а затем отправьте образ, который вы создали локально, наDocker Hub
на складе,Docker Registry
Содержит множество складов, каждому складу соответствует несколько меток, а разные метки соответствуют разным версиям программного обеспечения.
Состав и архитектура Docker
Установил и запустилDocker
После этого мы можем использовать в командной строке для использованияdocker
Команда для работы с докером, например, мы используем следующую команду для печатиdocker
информация о версии.
docker verion
Результат выглядит следующим образом:
На картинке выше мы видим, что набираются две части информации:Client
иServer
.
Это потому чтоDocker
Как и большинство серверного программного обеспечения (например,MySQL
), оба используютC/S
Модель архитектуры , то есть вызов сервера через клиент, но мы просто находимся на одной машине и сервер и клиент.
Таким образом, мы можем использовать следующую схему для представленияDocker
структура,DOCKER_HOST
даDocker server
, а Clinet — это то, что мы используем в командеdocker
Заказ.
Docker Engine
docker server
Предоставляет клиенту такие функции, как контейнеры, образы, тома данных и управление сетью.Фактически эти функции предоставляютсяDocker Engine
быть реализованным.
-
dockerd
: Демон сервера. -
Client docker Cli
: Интерфейс командной строки -
REST API
: В дополнение к интерфейсу командной строки cli вы также можете использоватьREST API
перечислитьdocker
НижеDocker Engine
пример графика:
резюме
Как разработчику, в процессе обучения или разработки всегда необходимо устанавливать различные среды разработки.Кроме того, технической команде часто необходимо унифицировать среду разработки в процессе разработки проекта, что может избежать некоторых проблем, вызванных несоответствия в среде проблема.
Хотя использование виртуальных машин может решить вышеуказанные проблемы, виртуальные машины слишком тяжелы и потребляют слишком много ресурсов хоста.Docker
Вышеуказанные проблемы решаются просто и легко, делая установку среды разработки и развертывание приложения очень простыми, а используяDocker
, что намного проще, чем установка операционной системы на виртуальную машину.
Добро пожаловать, чтобы отсканировать код, чтобы следовать, учиться и прогрессировать вместе