Введение в концепцию Docker

Оглавление

  1. Что такое Докер?

  2. Каковы сценарии применения Docker?

  3. Каковы преимущества Докера?

  4. В чем разница между Docker и виртуальной машиной?

  5. Каковы три ядра Docker?

  6. Как быстро установить Docker?

  7. Как изменить место хранения Docker?

  8. Каковы распространенные методы управления образами Docker?

  9. Как создать Docker-контейнер?

  10. Каков стандартный процесс работы Docker в фоновом режиме?

  11. Каковы сетевые режимы Docker?

  12. Что такое тома данных Docker

  13. Как построить частный склад Docker

  14. Как Docker переносит резервные копии?

  15. Как развернуть MySQL с помощью Docker?

Предисловие

В этой статье обобщаются распространенные проблемы и подводные камни Docker, и они делятся ими со всеми в форме вопросов и ответов.

1. Что такое Докер?

  • Docker — это контейнерный движок приложений с открытым исходным кодом, разработанный на основе языка Go, использующий протокол Apache2.0 и имеющий открытый исходный код.

  • Docker — это инструмент с открытым исходным кодом для запуска приложений в контейнерах Linux. Это легкая «виртуальная машина».

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

Вы также можете использовать эту яркую метафору:

Логотип Docker выполнен в виде синего кита, перетаскивающего множество контейнеров. Кита можно рассматривать как хост-машину, а контейнеры можно понимать как взаимно изолированные контейнеры. Каждый контейнер содержит свое собственное приложение.

2.Каковы сценарии применения Docker?

  • Автоматизированная упаковка и публикация веб-приложений.

  • Автоматизированное тестирование, непрерывная интеграция и выпуск.

  • Развертывайте и настраивайте базы данных или другие серверные приложения в сервисных средах.

  • Создайте собственную среду PaaS, скомпилировав с нуля или расширив существующую платформу OpenShift или Cloud Foundry.

Здесь я остановлюсь на сценарии Docker как внутренней среды разработки.

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

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

Если вы хотите использовать контейнер в качестве машины разработки, вам необходимо решить проблемы удаленного входа в контейнер и управления процессами внутри контейнера. Хотя Docker изначально был разработан для «микросервисной» архитектуры, исходя из нашего реального опыта, в Docker можно запускать несколько программ, даже sshd или upstart.

3.Каковы преимущества Docker?

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

  • Гибкость: даже самые сложные приложения можно поместить в контейнер.

  • Легкость: контейнеры используют и совместно используют ядро ​​хоста.

  • Взаимозаменяемость: обновления и обновления могут быть развернуты мгновенно.

  • Портативность: может быть собрана локально, развернута в облаке и запущена где угодно.

  • Масштабируемость: можно добавлять копии контейнеров и автоматически распространять их.

  • Стекируемость: сервисы можно штабелировать вертикально и мгновенно.

картина

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

4.В чем разница между Docker и виртуальной машиной?

Добавляя к виртуальной машине уровень гипервизора (средний уровень виртуализации), виртуальное оборудование, такое как сетевые карты, память и процессоры, виртуализируется, а затем поверх них создаются виртуальные машины.Каждая виртуальная машина имеет собственное системное ядро. Контейнер Docker использует изоляцию (namesapce) для изоляции файловых систем, процессов, устройств, сетей и других ресурсов, а затем управляет разрешениями, ресурсами ЦП и т. д. (cgroup), чтобы контейнеры не влияли друг на друга. Не может влиять на хост. машина.

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

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

картина

5.Какие три ядра у Docker?

Зеркало

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

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

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

контейнер

Контейнеры Docker — это запущенные экземпляры, созданные из образов, которые можно запускать, останавливать и удалять. Каждый созданный контейнер изолирован друг от друга и невидим друг для друга, чтобы обеспечить безопасность платформы. Контейнер можно рассматривать как упрощенную версию среды Linux (включая права root-пользователя, зеркальное пространство, пользовательское пространство, сетевое пространство и т. д.) и приложений, работающих в нем.

склад

На сервере регистрации складов часто хранится несколько складов.Каждый склад содержит несколько изображений, и каждое изображение имеет свой тег.

Склады делятся на две формы: склады общего пользования (Public) и частные склады (Private).

Крупнейшим общедоступным репозиторием является Docker Hub: https://hub.docker.com, в котором хранится большое количество изображений, которые пользователи могут загрузить.

Внутренние общедоступные склады включают Alibaba Cloud, NetEase Cloud и т. д.

6. Как быстро установить Docker?

Выполните следующую команду установки, чтобы установить зависимые пакеты

yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager–add-repohttps://download.docker.com/linux/centos/docker-ce.repo[root@centos7 ~] yum -y install docker-ce docker-ce-cli containerd.io[root@centos7 ~]# docker ps --查看docker

картина

​​​​​​
[root@centos7 ~]# systemctl enable docker[root@centos7 ~]# systemctl start docker[root@centos7 ~]# systemctl status docker[root@centos7 ~]# docker ps --查看容器[root@centos7 ~]# docker version --查看版本[root@centos7 ~]# docker info --查看版本

7. Как изменить место хранения Docker?

По умолчанию место хранения Docker: /var/lib/docker.

Посмотреть конкретное местоположение можно с помощью команды: docker info | grep «Docker Root Dir»

Изменить в другие каталоги

Сначала остановите службу Docker:

systemctl stop docker

Затем переместите весь каталог /var/lib/docker по пути назначения​​​​​​

mkdir -p /root/data/dockermv /var/lib/docker /root/data/dockerln -s /root/data/docker /var/lib/docker --快捷方式

8.Каковы распространенные методы управления образами Docker?

Быстрое получение изображений

Формат: ключевое слово поиска Docker.

Получить изображение

Формат: имя склада docker pull [:label] Если при загрузке образа не указать метку, по умолчанию будет загружена последняя версия образа на складе, то есть метка выбирается как самая последняя.

Просмотр информации об изображении

После загрузки образа он по умолчанию сохраняется в /var/lib/docker.

  • РЕПОЗИТОРИЙ: Репозиторий, которому принадлежит изображение.

  • TAG: информация тега изображения, маркировка разных изображений на одном складе.

  • ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ: уникальный идентификационный номер изображения, однозначно идентифицирующий изображение.

  • CREATED: Время создания изображения

  • РАЗМЕР: Размер изображения

картина

Получить подробную информацию об изображении

Формат: Docker проверяет идентификационный номер образа.

Нет необходимости вводить весь идентификационный номер изображения.

картина

Добавьте новый тег к локальному изображению

Формат: тег docker. Имя: [тег]

Удалить изображение

Формат 1: имя склада docker rmi: метка

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

Формат 2: идентификатор образа docker rmi [-f]

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

Сохраните изображение как локальный файл

Формат: docker save -o имя файла хранилища сохраненное изображение​​​​​​​

[root@localhost ~]# docker save -o /opt/nginx.tar nginx:latest#将本地镜像传给另一台主机[root@localhost ~]# scp /opt/nginx.tar 192.168.1.54:/opt

9. Как создать Docker-контейнер? ​​​​​​

#docker images   --镜像docker run -d --name centos7.8 -h centos7.8 \-p 220:22 -p 3387:3389 \--privileged=true \centos:7.8.2003 /usr/sbin/init
#我想拥有一个 linux 8.2 的环境docker run -d --name centos8.2 -h centos8.2 \-p 230:22 -p 3386:3389 \--privileged=true \daocloud.io/library/centos:8.2.2004 init
# 进入容器docker exec -it centos7.8bashdocker exec -it centos8.2 bashcat /etc/redhat-release    --查看系统版本

10.Какой стандартный процесс работы Docker в фоновом режиме?

При использовании docker run для создания контейнера стандартный процесс запуска Docker в фоновом режиме:

  • Проверьте, существует ли указанное изображение локально. Если изображение не существует, оно будет загружено из публичного репозитория;

  • Создайте и запустите контейнер, используя образ;

  • Выделите файловую систему для контейнера и смонтируйте уровень чтения и записи вне уровня образа, доступного только для чтения;

  • Создайте мост между интерфейсом виртуальной машины и контейнером из интерфейса моста, настроенного на хост-узле;

  • Назначьте контейнеру IP-адрес в пуле адресов;

  • Выполнить указанное пользователем приложение.После завершения выполнения контейнер закрывается.

11.Какие сетевые режимы Docker?

режим хоста

режим хоста: указывается с помощью --net=host

Эквивалентно режиму моста в VMware, он находится в той же сети, что и хост, но не имеет независимого IP-адреса.

Docker использует технологию пространства имен Linux для изоляции ресурсов, такую ​​​​как процесс изоляции пространства имен PID, файловую систему изоляции пространства имен монтирования, сеть изоляции сетевого пространства имен и т. д.

Сетевое пространство имен обеспечивает независимую сетевую среду, включая сетевые карты, маршрутизацию, правила iptable и т. д., которые изолированы от других сетевых пространств имен.

Контейнеру Docker обычно выделяется независимое сетевое пространство имен.

Но если вы используете режим хоста при запуске контейнера, контейнер не получит независимое сетевое пространство имен, но будет использовать сетевое пространство имен совместно с хостом. Контейнер не будет виртуализировать собственную сетевую карту, настраивать собственный IP и т. д., а будет использовать IP и порт хоста. На данный момент контейнер больше не имеет изолированного и независимого сетевого стека. Не владение всеми ресурсами порта

картина

режим контейнера

Режим контейнера: используйте –net=contatiner:NAME_or_ID, чтобы указать

Этот режим указывает, что вновь созданный контейнер использует пространство сетевых имен совместно с существующим контейнером, а не с хостом. Вновь созданный контейнер не будет создавать собственную сетевую карту и настраивать собственный IP-адрес, но будет использовать IP-адрес, диапазон портов и т. д. совместно с указанным контейнером.  Сетевые ресурсы можно в определенной степени сэкономить, а в контейнере еще не все порты внутри.

Аналогичным образом, помимо сети, два контейнера также изолированы в других аспектах, таких как файловые системы, списки процессов и т. д.

Процессы двух контейнеров могут взаимодействовать через устройство сетевой карты.

картина

нет режима

нет режима: используйте --net=none, чтобы указать

При использовании режима «Нет» контейнер Docker имеет собственное сетевое пространство имен, но для контейнера Docker не выполняется никакая настройка сети. Другими словами, этот Docker-контейнер не имеет сетевой карты, IP, маршрутизации и другой информации.

В этом сетевом режиме контейнер имеет только сеть Lo Loopback и не имеет других сетевых карт.

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

Контейнер будет полностью независим от сети, и пользователи смогут добавлять в контейнер сетевые карты по мере необходимости. Этот режим владеет всеми портами. (Режим «Нет сети» настраивает сеть). Этот режим используется только в особых случаях и обычно не используется.

режим моста

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

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

Назначьте контейнеру IP-адрес из подсети docker0 и установите IP-адрес docker0 в качестве шлюза по умолчанию для контейнера. Создайте пару виртуальных сетевых карт и пару устройств на хосте. Устройства Veth всегда появляются парами, они образуют канал данных, данные, поступающие с одного устройства, выходят с другого устройства. Поэтому устройства veth часто используются для соединения двух сетевых устройств.

Docker помещает один конец устройства пары veth во вновь созданный контейнер и называет его eth0 (сетевая карта контейнера), а другой конец в хосте, называет его похожим именем, например veth*, и добавляет это сетевое устройство в Сеть docker0 В мосту. Посмотреть его можно с помощью команды brctl show.

Доступ к контейнерам осуществляется через пары veth.

При использовании docker run -p Docker фактически создает правила DNAT в iptables для реализации функции переадресации портов.

Для просмотра вы можете использовать iptables -t nat -vnL.

картина

12.Что такое том данных Docker?

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

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

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

13. Как построить частный склад Docker

1. Получите изображение частного склада​​​​​​​

[root@jeames ~]# docker pull registryUsing default tag: latest

2. Запустите контейнер частного склада​​​​​​​

docker run -di --name registry -p 5000:5000 registrydocker update --restart=always registry   --开机自启动docker ps -a  --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"

Посетите URL-адрес: http://192.168.1.54:5000/v2/_catalog.

3. Установите доверие​​​​​​

[root@jeames ~]# vi /etc/docker/daemon.json{
   
   "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],"insecure-registries":["192.168.1.54:5000"]}
[root@jeames ~]# systemctl restart docker   --重启docker

4. Загрузите локальное изображение​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker tag postgres:11 192.168.1.54:5000/postgres
[root@jeames ~]# docker push 192.168.1.54:5000/postgres

5. Снова вытащите изображение​​​​​​​

[root@jeames ~]# docker rmi 192.168.1.54:5000/postgres[root@jeames ~]# docker images[root@jeames ~]# docker pull 192.168.1.54:5000/postgres

14.Как Docker переносит резервные копии?

1. Сохраните контейнер как изображение​​​​​​​

[root@jeames ~]# docker images[root@jeames ~]# docker ps -adocker ps -a --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"[root@jeames ~]# docker commit redis myredis##使用新的镜像创建容器docker run -di --name myredis myredis

2. Зеркальное резервное копирование

[root@jeames ~]# docker save -o myredis.tar myredis

По умолчанию он помещается в текущий каталог​​​​​​​

[root@jeames ~]# ll[root@jeames ~]# pwd

3. Процесс восстановления

##删除容器docker ps --format "table {
   
   {.ID}}\t{
   
   {.Names}}\t{
   
   {.Status}}"docker stop myredisdocker rm myredis##删除镜像docker imagesdocker rmi myredis[root@jeames ~]# docker load -i myredis.tar

15. Как Docker развертывает MySQL?

1. Загрузите изображение
https://hub.docker.com/ 中搜索mysql[root@jeames ~]# docker pull mysql:5.7.30[root@jeames ~]# docker pull mysql:8.0.20
2. Установка и развертывание

2.1 Создать контейнер

mkdir -p /usr/local/mysql5730/mkdir -p /usr/local/mysql8020/
docker run -d --name mysql5730 -h mysql5730 \-p 3309:3306 \-v /usr/local/mysql5730/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:5.7.30
docker run -d --name mysql8020 -h mysql8020 \-p 3310:3306 \-v /usr/local/mysql8020/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=root -e TZ=Asia/Shanghai \mysql:8.0.20

2.2 Доступ к MySQL

##登陆容器docker exec -it mysql5730 bashmysql -uroot -prootmysql> select user,host from mysql.user
##远程访问mysql -uroot -proot -h192.168.59.220 -P3309

おすすめ

転載: blog.csdn.net/lanwilliam/article/details/132880764