Официальный сайт докера: www.docker.com Официальный сайт dockerhub:hub.docker.com
Официальный сайт документации Docker: docs.docker.com
Docker — это облачный проект с открытым исходным кодом, основанный на языке Go.
DockerОсновная цель –:Создавайте, выпускайте и запускайте любое приложение где угодно (строить,Загружайте любое приложение где угодно)
,То есть посредством управления жизненным циклом компонентов приложения, таким как инкапсуляция, распространение, развертывание и эксплуатация.,включить пользователяAPPи его операционная среда может сделатьЗеркало один раз, беги повсюду。
Представьте себе следующую ситуацию, часто ли вы с ней сталкиваетесь?
Эксплуатация и обслуживание/тестирование: Ваша программа не может быть запущена! Развитие: Здесь можно бежать! ! !
(1) Несовместимая среда вызывает множество проблем. Замена машины означает необходимость начинать все заново, а это отнимает много времени и труда. (2)Масштабирование вверх и вниз также является щекотливым вопросом.(Потому что нам нужна одна и та же среда),пересадкаОчень хлопотно。
Поэтому некоторые люди задаются вопросом, можно ли решить проблему фундаментально. Программное обеспечение устанавливается со средой, а это означает, что исходная среда копируется точно во время установки.
С помощью докера мы можем упаковать исходный код + конфигурацию + окружение + версию прогоняемой программы в один образ. Другими словами, то, что раньше подавалось в разработку, было только исходным кодом, а теперь оно стало исходным кодом + конфигурация + окружение + пакеты зависимостей и т. д. Метафору можно сравнить с переездом. Раньше при переезде приходилось собирать вещи, упаковывать их, перевозить и распаковывать. В ходе этого процесса вы обязательно теряли много вещей. После наличия докера переезд эквивалентен перемещению здания, при этом пересаживается все здание. Примечание. По сути, это похоже на виртуальную машину vmware. Поскольку виртуальная машина может упаковать всю систему, упаковка зависимостей программы здесь, естественно, не является большой проблемой.
На картинке выше. Кит — это докер, а контейнером может быть что угодно, например redis, mysql, mongodb и т.д.
Итак, концепция докера очень ясна:
Зеркало один раз, беги повсюду! ! От переезда к переезду! !
Традиционная виртуальная машина:
Традиционная технология виртуальных машин основана на системе управления виртуальными машинами (такой как VirtualBox, VMware и т. д.), установленной в основной операционной системе, создании виртуальной машины (виртуализации различного оборудования), установке на виртуальную машину подчиненной операционной системы и установка подчиненной операционной системы на подчиненной операционной системе. Развертывание различных приложений.
Недостатки: высокое использование ресурсов, множество повторяющихся шагов, медленный запуск.
Linux-контейнер (сокращенно LXC):
Контейнер Linux — это серия процессов, которые отделены от остальной системы, запускаются из другого образа и содержат все файлы, необходимые для поддержки процесса, предоставляемые этим образом. Образ, предоставленный контейнером, содержит все зависимости приложения, что делает его переносимым и согласованным от разработки до тестирования и производства.
Вместо того, чтобы моделировать всю операционную систему, контейнер Linux изолирует процессы.。Понятноконтейнер,Вы можете упаковать все ресурсы, необходимые для запуска программного обеспечения, в изолированный контейнер. контейнер отличается от виртуальной машины,Нет необходимости связывать всю операционную систему,Требуются только ресурсы библиотеки и настройки, необходимые для работы программного обеспечения.。Таким образом, система становится эффективной и легкой и обеспечиваетразвертывать Программное обеспечение стабильно работает в любой среде。
Сравнение функций выглядит следующим образом:
характеристика | контейнер | виртуальная машина |
---|---|---|
запускать | Второй уровень | Минутный уровень |
размер | Обычно Мб | Обычно ГБ |
скорость | Близко к родному | относительно медленный |
Количество поддержки системы | Одна машина поддерживает тысячи контейнеров | Обычно десятки |
dockerСопоставимыйвиртуальная Машина Меньше слоев абстракции:
Так как докеру не требуется гипервизор(виртуальная машина)Внедрить виртуализацию аппаратных ресурсов.,Программы, работающие на Docker, напрямую используют аппаратные ресурсы реальной физической машины.,Таким образом, докер имеет очевидные преимущества в использовании процессора и памяти.
Docker использует ядро хоста,Нет необходимости загружать ядро операционной системы. При создании нового контейнера,Dockerненужныйивиртуальная машина — это то же самое, что перезагрузка ядра операционной системы. Это позволяет избежать трудоемких и ресурсоемких процессов, таких как загрузка, загрузка ядра операционной системы и возврат. При создании новой виртуальной машиначас,виртуальная Программному обеспечению компьютера необходимо загрузить ОС, и возврат к новому процессу является минутным. уровень еще. Поскольку Docker напрямую использует операционную систему хоста, он пропускает процесс возврата, поэтому создание нового докера занимает всего несколько секунд.
Суть Докерконтейнера — это процесс.
DevOps (разработка, эксплуатация и обслуживание): С помощью докера можно добиться интеграции разработки и эксплуатации.
докер. Docker сам по себе является работающим носителем и механизмом управления. В его состав входят следующие три элемента:
①Изображение.это шаблон, доступный только для чтения。Зеркаломожет быть использован для созданияDockerконтейнер,Одно изображение может создать множество контейнеров. Шаблон, эквивалентный контейнеру,По аналогии с C++, Зеркало — это шаблон класса. ②контейнер(container)。проходить Зеркало Создан работающий экземпляр。контейнердля Зеркало Обеспечивает стандартную и изолированную операционную среду.,его можно создать、начинать、останавливаться、удалить,Каждый контейнер изолирован друг от друга,Как контейнеры на ките. По аналогии с C++ контейнер эквивалентен экземплярам новых шаблонов классов.
могу поставитьконтейнеррассматривается как одинПростая версия среды Linux(технологическое пространство、пользовательское пространство, киберпространство) и приложения, работающие на нем. ③Склад (хранилище).наборсерединамагазин Зеркалорасположение файла。Аналогично хранению различныхgitпроектgithub、Аналогично хранению различныхjarзавернутыйMaven。DockerОфициально предоставлено компаниейregistryназываетсядляDocker Центр. Склады делятся на две формы: общественные (Public) склады и частные (Private) склады. В настоящее время крупнейшим общедоступным хранилищем является hub.docker.com , внутренние общественные склады включают Alibaba Cloud, NetEase Cloud и т. д. Большое количество изображений хранится для загрузки пользователями. Частные склады — это склады, построенные самими людьми или компаниями.
Ниже приведена архитектура входной версии докера:
Docker также представляет собой типичную архитектуру клиент-сервер. Бэкэнд представляет собой архитектуру поиска, и многие модули выполняют свои собственные функции. Основной процесс работы докера выглядит следующим образом:
(1) Пользователь использует докер Клиент устанавливает связь с dockerdaemon и отправляет последнему запрос. (2)docker В качестве основной части архитектуры докера демон сначала предоставляет докер. В течение периода функционирования сервера он может принять запрос клиента. (3)docker Движок выполняет ряд задач внутри докера, и каждая задача существует в форме задания. (4) Если во время выполнения задания требуется изображение, оно запускается из докера. Загрузите образ из реестра и погоните Graph через управление образами. Драйвер сохраняет загруженное изображение в виде Graph. (5) Когда вам нужно создать сетевое окружение для докера, управляйте сетью через управление сетью. Драйвер создает и настраивает сетевое окружение контейнера докеров. (6) Если вам нужно ограничить ресурсы докера или выполнить пользовательские команды и другие операции, используйте Exec драйвер для завершения. (7)libcontainer — это независимый пакет управления Newwork. водитель и руководитель Драйвер реализует определенные операции с контейнером через libcontainer.
Инструкцию по установке можно посмотреть на официальном сайте.
Разработка → Начало работы → Узнайте, как установить Docker. Здесь мы хотим установить Docker Engine.
Руководство по установке Centos выглядит следующим образом:
Install Docker Engine on CentOS | Docker Docs
Docker не является универсальным инструментом,Он опирается на существующую и работающую среду ядра Linux. также,Для Linux также существуют определенные требования.,Требуется 64-разрядная версия ядра Linux 3.8 или выше. Примечание. Это сильно зависит от среды Linux.,Даже если вы развертываете Docker в Windows, суть состоит в том, чтобы сначала установить виртуальную машину.,Затем установите и запустите Docker в виртуализированном Linux.
Установка выполняется здесь на Centos7. Для установки docker на CentOS 7 требуется, чтобы система была 64-разрядной, а версия ядра системы была 3.8 или выше. Для ее просмотра можно использовать следующую команду.
uname -r
Примечание. Это самый популярный метод установки, используйте его.
(1) Удалите старую версию (если она была установлена ранее)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#yum установка, связанная с gcc
yum -y install gcc
yum -y install gcc-c++
Примечание. Моя одноядерная машина работает немного слабо. Если она не отвечает, просто перезапустите ее и повторите попытку.
(2) Настройте репозиторий Установите пакет yum-utils (он предоставляет утилиту yum-config-manager) и настройте репозиторий.
sudo yum install -y yum-utils
#Примечание: Ссылка на внешнюю сеть может не работать. В это время переключитесь на внутренний склад, выполнив следующие действия:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#Внешняя сеть может не работать
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Позвольте мне объяснить это Сяобаю. Здесь мы хотим использовать yum-config-manager для загрузки и добавления файла docker-ce.repo в путь /etc/yum.repos.d/. Однако yum-config-manager не установлен по умолчанию. Он находится в yum-utils, поэтому сначала установите yum-utils.
(3)yum makecache fast
Следующие инструкции будут выполняться быстрее.
yum makecache fast
yum makecache #centos8
Команда yum makecache fast заранее кэширует информацию о пакете программного обеспечения в локальных индексах, чтобы повысить эффективность поиска и установки программного обеспечения.,предположениеосуществлять Эта команда может улучшитьyumустановленскорость。
Примечание. Для centos8 будет сообщено об ошибке, просто измените его на «yum makecache».
(4) Установите докер engine 1) Установите докер engine,containerd и docker compose
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Если будет предложено принять ключ GPG, убедитесь, что отпечаток пальца соответствует 060A. 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 соответствует, пожалуйста, примите, если он совпадает. Эта команда устанавливаетDocker,Но не запускать Docker. Он также создает группу докеров.,Но по умолчанию в эту группу не добавляются пользователи.
Вот как узнать имена docker-ce и docker-ce-cli.
Примечание. Предположим, вы нашли его самостоятельно, а не копировали и вставляли напрямую. (1) Сначала установите .repo (2) После установки выполните поиск по известному вам ключевому слову, а именно «docker», и выполните «yum search docker». Вывод следующий: Удалите .x86_64 в конце, чтобы получить полное имя программного обеспечения (т. е. «docker-ce», «docker-ce-cli»).
(5)запускатьdocker
sudo systemctl start docker
(6) Убедитесь, что механизм Docker успешно установлен (вам может потребоваться настроить следующий источник изображения, прежде чем он сможет пройти)
sudo docker run hello-world
Эта команда загружает тестовое изображение и запускает его в контейнере. Когда контейнер запускается, он печатает подтверждающее сообщение и завершает работу.
(6) Проверьте статус/версию службы докеров.
systemctl status docker
docker version
Следующие инструкции указывают на успешную установку.
Если он соответствует ожиданиям, он будет установлен.
systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
После установки программного обеспечения докера вы можете использовать докер Команда pull извлекает изображение. Если источник ускорения изображения не настроен, изображение в dockerhub будет загружено напрямую по умолчанию. Обычно это приемлемо. медленный。 Чтобы решить эту проблему, мы можем настроить ускоритель изображений. Например, здесь можно настроить источник изображений Docker Tencent Cloud для ускорения загрузки. Шаги следующие: vim /etc/docker/daemon.json #У вас может не быть этого файла при первом входе, просто создайте его.
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
#Несколько экземпляров параметра конфигурации
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
#сновазапускатьdocker
systemctl daemon-reload
systemctl restart docker
Введение: Предоставлено Tencent Cloudконтейнер Зеркало Услуги облачного хостинга。С одной стороны, на нем имеется множество сертификатов Tencent Cloud.Зеркалоисточник;С другой стороны, вы также можете создать свой собственный личный Зеркалосклад(Нажмите свой собственный Зеркало Поднимись)。
См. рекомендации Tencent Cloud: https://cloud.tencent.com/document/product/1141/63910
Шаг 1. Войдите в учетную запись Tencent Cloud. Шаг 2. Активируйте службу зеркала контейнера. Шаг 3. Инициализируйте службу личной версии.
Инициализируйте пароль для личной версии репозитория изображений. Имя пользователя: 100011009150 Пароль: Zs+qq
Шаг 4. Создайте пространство имен, вот шуочжуо. Шаг 5. Создайте зеркало (обратите внимание, что оно здесь не создается). Примечание. Под пространством имен находится список зеркал.
Шаг 6: Затем вы можете нажать или вытащить изображение.
#первый Посмотреть существующие локальные Зеркало Примечание:В нем есть зеркало hello-world Его снесли, когда мы бежали выше.
docker images
#Вы также можете указать имя напрямую, что эквивалентно добавлению условияwhere.
docker images hello-world
#pushhello-worldэто зеркало в хранилище приватных зеркал
sudo docker tag hello-world:latest ccr.ccs.tencentyun.com/shuozhuo/hello-world:latest
sudo docker push ccr.ccs.tencentyun.com/shuozhuo/hello-world:latest
Примечание: docker Функция тега — изменить локальный hello-world:latestэто зеркало воссоздало тег с именем ccr.ccs.tencentyun.com/shuozhuo/hello-world:latest. До и после казничерез докер изображения, вы можете увидеть эффект и все.
Затем вы можете увидеть соответствующую запись (изображение hello-world) в нашем хранилище изображений следующим образом:
#Удалить репозиторий докера (скопировать имя в изображениях)
docker rm -f ccr.ccs.tencentyun.com/shuozhuo/shuozhuohub/hello-world
Официальная инструкция:docker | Docker Docs
#запускатьdocker
systemctl start docker
#стопдокер
systemctl stop docker
#Перезапускаем докер
systemctl restart docker
#Просмотр статуса докера
systemctl status docker
#Открыть с момента запуска (после настройки запуска Linux-сервера используйте запускdocker, если он не подходит для Linux, необходимо запустить docker вручную)
systemctl enable docker
#Просмотр сводной информации
docker info
#Просмотреть общую справочную документацию по Docker
docker --help
#Просмотреть справочную документацию по команде docker
docker run/pull/…… --help
(1)docker images
Список существующих изображений на локальном хосте
docker images
#Значение каждого предмета следующее
репозиторий: источник зеркального хранилища
tag: Версия образа (по умолчанию — последняя версия).
image id:Идентификатор изображения
создано: время создания изображения
size:Зеркалоразмер
(2)docker search xxx_imagename
Искать есть ли зеркало на зеркальном складе
① Как правило, вы найдете множество записей, таких как Redis; обычно это зеркала, созданные разными организациями/частными лицами. ②Мы просто выбираем тот, который был официально сертифицирован (ОФИЦИАЛЬНЫЙ — тот, который в порядке), обычно первый. ③Добавьте --limit 5, мы просто проверим 5 лучших, набравших наибольшее количество лайков.
docker search hello-world docker search redis docker search --limit 5 redi
(3)docker pull Загрузите изображение. Если ТЕГА нет, значит последняя версия.
docker pull imagename[:TAG]
docker pull imagename
docker pull hello-world
docker pull ubuntu
docker pull redis:6.0.8
(4)docker system df Проверять Зеркало/контейнер/Пространство, занимаемое томом данных;Подсчитайте, сколько вещей несет кит。
(5)docker stats
Проверьте, сколько процессора, памяти и сети занимает каждое изображение.
(6)docker rmi xxx_imagename/image_id Чтобы удалить изображение, «rmi» означает «удалить». image。
docker rmi hello-world
docker rmi -f hello-world #-f принудительное удаление
docker rmi -f image1:TAG image2:TAG #Удалить несколько изображений одновременно
docker rmi -f $(docker images -qa) #Комбинированные команды,Эффектудалитьвсе
(7)docker save/load
Команда docker save используется для сохранения образа Docker в tar-пакет (загрузка архива образа — обратная операция);
## docker Функция сохранения — зеркалирование архива; docker Функция загрузки – восстановление изображения. Полный процесс использования выглядит следующим образом:
#использовать докер Команда pull извлекает образ Centos.
docker pull centos
#указанный докер фотографии Посмотреть в зеркало
docker images
#использовать докер save архивирует образ Centos в файл и записывает его локально
docker save -o my_centos.tar 67fa590cfc1c
#Просмотр локальных файлов (уже заархивированных как локальные файлы)
ls
#использовать докер Команда загрузки загружает архивный файл изображения в образ.
docker load -i haicoder_centos.tar
(9) Поговорим о виртуальном образе докера? отвечать:складимя、Теги все<none>из Зеркало,Широко известный как Сюйсуань Зеркало(dangling image)。
Затем запустите систему Ubuntu с Docker и изучите из нее каждую команду контейнера. Примечание: Centos слишком большой — более 200 МБ, а Ubuntu сравнительно небольшой — более 70 МБ (многие вещи, кроме ядра Linux, были уменьшены, например, инструкции для vim и тому подобное).
(1)Новый+запускатьконтейнер
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#Указываем несколько сопоставлений портов
docker run -p 80:80/tcp -p 80:80/udp ...
Примечание: докер Обязательно выполните докер после запуска psПосмотри, правда ли этоиззапускать Понятно。
Описание ОПЦИИ (обычно используемые): Некоторые из них «-», некоторые «--».
-name="контейнерновыйимя Характер" Укажите имя контейнера (если не указано, имя будет присвоено случайным образом). -d: Запустить контейнер в фоновом режиме и вернуть идентификатор контейнера, то есть запустить контейнер в стиле демона (запустить в фоновом режиме). -i: Запустить контейнер в интерактивном режиме, обычно используется с -t -t: Переназначает псевдотерминал входа в контейнер, обычно используется с -i. То есть запустить интерактивный контейнер (на стойке регистрации стоит псевдотерминал, ожидающий взаимодействия) -P: Случайное отображение портов, заглавная P -p: Укажите сопоставление портов, строчная буква p Примечание: Обычно это используется чаще. --restart=always: Укажите, что после перезапуска докера в целом изменения также будут перезапущены.
-p определяет несколько различных форм сопоставления портов:
● -p hostPort:containerPort: сопоставление портов, например -p 8080:80 #Примечание:Просто воспользуйтесь этим
● -p ip:hostPort:containerPort: настройте адрес прослушивания, например -p 10.0.0.1:8080:80
● -p ip::containerPort: случайное назначение портов, например -p 10.0.0.1::80
● -p hostPort1:containerPort1 -p хост Порт2:контейнер Порт2: укажите несколько сопоставлений портов, например -p 8080:80 -p 8888:3306
Вот небольшое объяснение относительно сопоставления портов. Раньше, когда мы обращались к Redis, установленному непосредственно на машине, мы могли напрямую получить доступ к порту 6349 этой машины. Пользователи, которые хотят получить доступ к порту 80 контейнера, но не могут получить прямой доступ к контейнеру, могут сначала получить доступ только к хосту "-p; 8080:80» означает, что когда пользователь обращается к порту 8080 хоста, Docker автоматически сопоставляет его с портом 80 контейнера.
1)прямойзапускать
docker run ubuntu
После выполнения вы обнаружите, что ничего не происходит, по крайней мере, никакого взаимодействия, очевидно, нам нужно взаимодействие;
2)запускатьинтерактивныйконтейнер(нужно иметь Терминалвзаимодействовать)
docker run -it ubuntu /bin/bash #Нет произвольного имени
docker run -it --name myubuntu1 ubuntu bash #Пользовательское имя
-i: интерактивная операция
-t: Терминал
ubuntu: зеркало убунту
/bin/bash: Ставь после Зеркало это команда,Надеюсь здесь есть интерактивная оболочка,Поэтому используйте /bin/bash
Очевидно, что в настоящее время он находится в системе Ubuntu (управляет другой системой, Ubuntu, через докер).
Редактировать
3)запускать Стиль Стражаконтейнер
В большинстве сценариев мы хотим, чтобы служба докеров работала в фоновом режиме. На данный момент мы можем пройти мимо. -d Спецификация инструкцииконтейнеризназадбашнябегатьмодель。здесь сredisДемо。
#redisfrontстойкаинтерактивзапуск: Нажмите ctrl+c, и он исчезнет, что явно неприемлемо.
docker run -it redis
#redisСтиль фоновой защитызапуск: Это нормально
docker run -d redis
Преимущества очевидны. В будущем установить Redis и другое программное обеспечение будет очень просто! ! ! ! ! ! !
Примечание. Обязательно обратите внимание, что некоторые изображения не могут быть запущены через -d и должны быть -it.
docker run -d ubuntu
Например для убунту,осуществлять После приведенной выше команды кажется, чтозапускатьуспех Понятно,ноосуществлять docker ps Когда я проверил, я ничего не нашел (уже вышел).
Примечание. Это проблема механизма докера; «когда докер работает в фоновом режиме, должен быть приоритетный процесс». Если ни один приоритетный процесс не выполняется, контейнер подумает, что делать нечего, и автоматически закроется. Так как же исправить Ubuntu, которая всегда работает в фоновом режиме? docker run -dit ubuntu /bin/bash
(2) Список запущенных контейнеров
docker ps #Запускаем еще один Терминал под Linux-машиной, изучаем,а не вubuntuсерединаосуществлять()。
docker ps -n 2 #Просмотреть два последних докера запуска(Просмотреть неудачный контейнерочень запускать полезно)
Посмотреть больше параметров docker ps --help
docker ps -n 3 #Просмотрзапускающего неудачного контейнера очень полезно
На этом этапе вы можете увидеть два работающих контейнера.,все основаны назеркало убунтусоздаватьиздваконтейнерidдругойизконтейнер。
(3)покидатьконтейнер
1)exit runвходитьконтейнер,exitпокидатьконтейнер Также подписаноостанавливаться
2)ctrl+p+q запустите, чтобы войти в контейнер, ctrl+p+q для выхода, контейнер не останавливается (мой Mac сейчас: windows+p+q)
#Вы можете повторно войти в контейнер с помощью следующей команды
docker exec -it идентификатор контейнера /bin/bash
(4)запускатьужеостанавливатьсябегатьизконтейнер
docker start контейнерidиликонтейнеримя
docker ps -n 2 #Назначаем идентификатор контейнера
docker start 5930c3d1a376 #сновазапускатьэтотконтейнер
(5)Перезапускконтейнер
docker restart контейнерidиликонтейнеримя
(6)останавливатьсяконтейнер
docker stop контейнерidиликонтейнеримя
(7)силаостанавливатьсяконтейнер
docker kill контейнерidиликонтейнеримя
(8)удалитьужеостанавливатьсяизконтейнер
docker rm контейнерid
docker rm -f контейнерid #силаудалить(прямой Перевернуть стол)
Примечание: rmi удаляет изображения; rm удаляет контейнер. Затем docker ps -n 2 Я больше не могу видеть этот контейнер.
(9)Просмотр журнала контейнеров
docker logs контейнерid
Примечание: докер После безуспешного запуска контейнера можно передать команду «docker logs контейнерид», чтобы просмотреть журнал сбоев.
(10) Проверьте процессы, запущенные в контейнере. вверху — просмотр процессов, запущенных в докере хоста Centos; topПроверять鲸鱼набор装箱внутренний(или Вызовконтейнервнутренний)бегатьизпроцесс(Помните: каждый контейнер можно рассматривать как небольшую операционную систему.)。
docker top контейнерid
(11) Просмотр внутренних деталей контейнера
#Проверьте ситуацию с контейнером подробнее,Будет использован позже
Докер проверяет идентификатор контейнера
(12) Войдите в работающий контейнер и взаимодействуйте с командной строкой.
1)docker execВходитьконтейнер
docker exec -it контейнерid /bin/bash
2)docker attacheВходитьконтейнер
docker attache контейнерid
Вопрос: докер execиdocker В чем разница между Attache? отвечать:attacheпрямой Входитьконтейнерзапускать Заказиз Терминал,Не будетзапускатьновыйизпроцесс。Очевидно, эточасиспользоватьexitпокидатьизслова приведут кконтейнеростанавливаться。execдасуществоватьконтейнерсередина打开一个новыйиз Терминал,запустить начал новый процесс. Выход с помощью команды exit не приведет к остановке контейнера. команда docker exec,потому чтодляпокидать Терминал Не будетпривести кконтейнеростанавливаться。
Как показано ниже. ①Через докер выполнить запуск в контейнер Redis ②Подключитесь к серверу Redis через клиент. ③Установите данные и прочитайте их.
(13) Скопируйте файлы из контейнера на хост. Скопируйте важные данные из контейнера на хост
docker cp контейнерid:контейнервнутренний путь Путь к целевому хосту
docker cp c7b862397680:/tmp/aa.txt /root/mystudy
(14) Контейнер для импорта и экспорта веськонтейнер Размеры Сделать резервную копию。
docker export контейнерid > имя_файла.tar
cat имя_файла.tar | docker import Зеркало пользователя/Название изображение: Номер версии зеркала
#Конкретный процесс работы выглядит следующим образом: docker export c7b862397680 > ubuntubak.tar #верноконтейнер c7b862397680 Сделать резервную копию docker rm -f c7b862397680 #Принудительно удалить этот контейнер cat ubuntubak.tar | docker import - shuozhuo/ubuntu:3.9 docker images #найду больше shuozhuo/ubuntu это зеркало docker run -it Идентификатор изображения /bin/bash #Восстановление завершено
Примечание. Функция объема данных будет введена позже для передачи/резервного копирования данных контейнер→хост! ! !
UnionFS (Union File System): Union File System (UnionFS) — это иерархическая, легкая и высокопроизводительная файловая система. Она поддерживает изменения файловой системы, которые накладываются слой за слоем в виде фиксации. В то же время разные каталоги могут быть смонтированы в одной виртуальной файловой системе. Файловые системы Union — это записи образов Docker. Изображения могут наследоваться через запечатывающие слои, а на основе базового изображения можно создавать различные изображения для конкретных приложений. характеристика:в то же времячас Загрузить несколькофайловая система。но Снаружи видно только однофайловая система,Загрузка объединения будет накладывать каждый уровень файловой системы.,Таким образом, окончательная файловая система будет содержать все основные файлы и каталоги.
bootfs(boot file система) в основном включает в себя bootloader и ядро, загрузчик в основном занимается загрузкой kernel,LinuxТолькозапускатьчасзагрузитbootfsфайловая система。
существоватьDockerЗеркалоизнижнийслойда引导файловая системаbootfs。Вот этотслойтипичный для насизLinux/Unix系统да一样из,Содержит загрузчик и ядро. После загрузки загрузки все ядро оказывается в памяти.,В это время использование памяти уже передано bootfs ядру, и в это время система также удалит bootfs.
rootfs(root file система). Помимо bootfs, что включено в типичную систему Linux /dev
、/proc
、/bin
、/etc
и другие стандартные каталогиидокумент。rootfs就да各种другойиз Распространение операционной системы,Такие как Ubuntu, CentOS и т. д.
Базовый слой образа докера:
Для оптимизированной ОС,rootfs может быть очень маленьким,Он должен включать только самые основные команды, инструменты и библиотеки.,Поскольку нижний уровень напрямую использует ядро хоста.,Вам нужно только предоставить rootfs самостоятельно. так,Для разных дистрибутивов Linux,bootfs в принципе такой же,rootfs будет другим,Различные дистрибутивы могут использовать общие bootfs.
Docker поддерживает расширение существующих образов и создание новых образов. Новое изображение создается слой за слоем из базового изображения.
Например, мы можем установить emacs на базовый Debian, а затем установить Apache. Процесс выглядит следующим образом:
Преимущества многоуровневого изображения. Одним из самых больших преимуществ многоуровневого изображения является совместное использование ресурсов, упрощение копирования, миграции и повторного использования.
DockerЗеркалослой都да只读из,контейнерслойда可写из。 При контейнерзапуске поверх изображения загружается новый слой, доступный для записи. Этот слой часто называют“контейнерслой”,“контейнерслой”Сяду Вызов“Зеркалослой”。
Все изменения в контейнере,включить добавление、удалить、Изменение файлов происходит только на уровне контейнера.
Существует два основных способа создания изображений. ①Сделать зеркало на основе контейнера. —— docker commit。 ②Напишите файл docker для создания образа. —— Последующее введение
через докер commitможно представитьконтейнеркопия делает это известнымдля一个новыйиз Зеркало;就да说верноконкретныйизконтейнер Используйте что-то вроде“отражение”изспособ создания шаблона Зеркало。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -m="Информация описания" -a="автор" контейнерid Цель создания Название изображения:[TAG]
#Утверждение следующее
docker commit -m="add vim cmd" -a="shuozhuo" 7274ef1a61a9 shuozhuo/ubuntuvim:1.0
Мы знаем, что Ubuntu по умолчанию на официальном сайте представляет собой минималистическую версию, которая даже проще, чем vim. Следующее, что нам нужно сделать, это установить vim на основе официального сайта Ubuntu и упаковать его в новую версию образа с помощью vim.
#Сначала обновите инструменты управления
apt-get update
#установить ВИМ
apt-get -y install vim
После установки вы можете использовать vim. Здесь мы используем vim для создания файла aa.txt с абсолютным путем /tmp и редактирования некоторых символов. Затем отправьте новое изображение.
docker commit -m="add vim cmd" -a="shuozhuo" 7274ef1a61a9 shuozhuo/ubuntuvim:1.0
Затем запустите изображения Docker, чтобы просмотреть локальное изображение следующим образом. Видимо, как и ожидалось.
Далее ставим контейнер 7274ef1a61a9 Остановитесь и заново создайте контейнер с помощью нового образа фиксации, чтобы проверить, имеет ли этот контейнер функциональность vim. Видимо по новой версии Зеркалосоздаватьизэтот全новыйизконтейнер(f3c63bd3753d)Просто возьми этоvimФункцияиз。
думать:очевидно, мы можемсуществоватьновыйиз Зеркалоrunпублично заявитьизконтейнериз Базаначальство继续增强исоздаватьновыйиз Зеркало;这就да分слойвключает в себя привлечениеизвыгода—— Продолжайте складывать.
Примечание. В качестве региона я выбрал Гуанчжоу! ! !
После создания полезного изображения опубликуйте его (опубликуйте в Tencent Cloud здесь), чтобы другие люди могли использовать его и служить широкой публике.
склад、Зеркало、контейнер Отношения передачи следующие:
Войдите в облако Tencent → контейнер Зеркало Служить。Подписаться раньшеиз方式配置好Заказ空间Из类из。
Затем создайте элемент на зеркальном складе для хранения нашей улучшенной системы Ubuntu.
Нажмите на команду ярлыка климата и выполните предложенную команду.
#Войдите в Tencent Cloudконтейнер Зеркало Служить(Docker Registry)
docker login ccr.ccs.tencentyun.com --username=100011009150
#К Registry нажать изображение
docker tag d27d7fcb0280 ccr.ccs.tencentyun.com/shuozhuo/myubuntu:1.0
docker push ccr.ccs.tencentyun.com/shuozhuo/myubuntu:1.0
Наблюдая за целевым хранилищем Tencent Cloud, мы обнаружили, что соответствующие данные действительно имеются.
Затем убедитесь, что тот, который опубликован на частном складе Tencent Cloud, можно использовать нормально.
первый,будет местныйизоригинальный Зеркало(shuozhuo/ubuntuvim d27d7fcb0280) удалить
docker rmi -f d27d7fcb0280
проверятьудалить После того, как все будет правильно, следуйте инструкциям, чтобы получить Tencent Cloud Private.складиз Зеркало
docker pull ccr.ccs.tencentyun.com/shuozhuo/myubuntu:1.0
#docker Изображения показали, что они действительно были получены локально.
docker images
#Используйте это зеркало, чтобы запустить контейнер
docker run -it d27d7fcb0280 /bin/bash
#Было подтверждено, что это действительно расширенная версия Ubuntu с установленным vim.
Некоторые данные могут быть важными и конфиденциальными, и размещать их непосредственно в Tencent Cloud или Alibaba Cloud небезопасно. В настоящее время вы можете создать частный реестр докеров для хранения образов (например, создать его специально для своей компании). .
Docker Registry — это инструмент, официально предоставляемый Docker для создания частных складов.
#скачать Зеркалоdocker Зарегистрируйтесь на местном
docker pull registry
#Запускаем реестр частной библиотеки
docker run -d -p 5000:5000 -v /app/myregistry/:/tmp/registry --privileged=true registry
По умолчанию хранилище будет создано в каталоге /var/lib/registry; рекомендуется использовать сопоставление томов контейнера самостоятельно, чтобы облегчить совместную отладку хоста.
Левая сторона — это путь к хост-компьютеру, а правая — это путь внутри контейнера.
Это означает, что данные в контейнере сохраняются на хост-компьютере (важное сопоставление данных), а данные в контейнере копируются и сохраняются в каталоге текущего хост-компьютера.
#Запросите нашу библиотеку, чтобы узнать, какие там зеркала (обычно сначала ничего)
curl http://192.168.xxx.xxx:5000/v2/_catalog
#использовать докер Отметьте местного shuozhuo/myubuntu:1.1это зеркало изменено на 192.168.xxx:5000:myubuntu:1.1
docker tag shuozhuo/myubuntu:1.1 192.168.xxx.xxx:5000/shuozhuo/myubuntu:1.1
#Включить докер для запуска push-изображения по http (не разрешено по умолчанию) через конфигурацию /etc/docker/daemon.json чтобы снять это ограничение. Если это не подействует, перезапустите службу Docker.
добавлен insecure-регистрирует этот элемент. Обратите внимание на запятую! ! !
{
"registry-mirros": ["https://xxxx.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.xxx.xxx:5000"]
}
#Отправить на локальный
docker push 192.168.xxx.xxx:5000/shuozhuo/myubuntu:1.1
#Проверьте каталог зеркального хранилища, чтобы убедиться, что оно уже существует
curl http://192.168.xxx.xxx:5000/v2/_catalog
Одним словом: сохраните данные в контейнере на главном диске, чтобы обеспечить постоянное хранение или совместное использование данных в контейнере. Файлы RDB и AOF, похожие на Redis.
Том — это каталог или файл,Может существовать в одном или нескольких контейнерах,Подвешивается докером к контейнеру,Но он не принадлежит объединенной файловой системе. Целью данных тома является сохранение данных.,Это полностью независимо от жизненного цикла контейнера.,поэтомуdockerНе будетсуществоватьконтейнерудалитьчасповлиять на его подвешиваниесуществоватьизобъем данных。 Кроме того, объем данных имеет следующие характеристики: (1) Объемы данных могут совместно использоваться или повторно использоваться между контейнерами. (2) Изменения громкости вступают в силу в режиме реального времени. (3) Изменения объема данных не будут включены в обновление записи. (4) Период репутации тома данных длится до тех пор, пока его никто не использует.
docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер Название изображения
Примечание. Эта команда создаст путь, который по умолчанию не существует на хост-компьютере и в контейнере. 1) Добавьте сопоставление томов контейнера между хостом и контейнером.
#Создайте контейнер с помощью следующей команды (что означает изменение пути /tmp/docker_data в контейнере Путь, сопоставленный с хостом /tmp/host_data)
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ubuntu1 3db8720ecbf5
#Одна команда может одновременно связать несколько каталогов. В этом случае достаточно нескольких опций -v.
2) Проверьте эффект существоватьконтейнерсерединаtouch aa.txt bb.txt; Просматривая путь к хосту, мы обнаружили, что эти два файла тоже существуют. наоборот.
3) Проверьте статус привязки (проверка докера)
docker inspect контейнерid
docker inspect bcf4f5f29419
Вы можете увидеть информацию о привязке в Mounts.
4)контейнеростанавливатьсяназадсуществовать По пути хостаиз Исправлятьсуществоватьконтейнерсновазапускатьназад Тоже сэкономлюсуществовать。
По умолчанию обе стороны доступны для чтения и записи (как показано ниже), но мы также можем настроить правила чтения и записи. docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер:rw Название изображения
Если каталог контейнера должен быть доступен только для чтения, то есть контейнер не может быть записан внутри, то конфигурация следующая: ro(read только). docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер:ro Название изображения
Сначала мы создаем контейнерubuntu1, который имеет карту на хост-компьютере, затем при создании ubuntu1 указываем том данных контейнера, который наследует ubuntu1; В это время может быть достигнут обмен данными между контейнером Ubuntu1, контейнером Ubuntu2 и хостом.
(1) Сначала создайте хост с отображением контейнера ubuntu1.
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=ubuntu1 3db8720ecbf5
(2) Убедитесь, что нет проблем с обменом данными между хостами иконтейнерubuntu1.
(3) Затем создайте контейнерubuntu2, который при создании наследует том контейнера ubuntu1.
docker run -it --privileged=true --volumes-from ubuntu1 --name=ubuntu2 3db8720ecbf5
(4) Было проверено, что данные трех сторон действительно являются общими.
Примечание: ubuntu2 наследует правила тома ubuntu1. Сбой u1 вообще не повлияет на u2, поскольку это два совершенно разных контейнера.
Примечание. В производственной среде том контейнера должен быть смонтирован, чтобы гарантировать, что контейнер исчез, но данные все еще находятся там.
①Поиск изображений ②Перетащите изображение ③Просмотр изображения ④запуск зеркала (обратите внимание на сопоставление сервисных портов) ⑤останавливатьсяконтейнер ⑥Удалятьконтейнер
Фактически, мы можем просто выполнить поиск на официальном сайте https://hub.docker.com. Например, для Tomcat выберите официально сертифицированный и нажмите «Вход». Есть инструкции, введение, как пользоваться зеркалом и другая информация.
#Установить кота
docker run -itd -p 8080:8080 tomcat
#Введите кота
docker exec -it ab4ec80ae7b9 /bin/bash
Примечание: Очень странно, что веб-приложения в новой версии tomcat пусты, а все файлы помещены в webapps.dist.
rm -rf webapps
mv webapps.dist webapp
#Проверьте, легко ли его использовать (затем проверьте это)
Прямой доступ через браузер 118.195.1xx.xx:8080
#Вытаскиваем MySQL
docker pull mysql:5.7
#бегатьконтейнер
docker run -p 3306:3306 --name=testmysql -e MYSQL_ROOT_PASSWORD=123456 -itd mysql
#Входитьконтейнер
docker exec -it 04e70f2be7d9 /bin/bash
#Подключаем MySQL
mysql -uroot -p
Примечание 1. По умолчанию китайский язык не может быть вставлен. Решение. Используйте следующую команду в MySQL, чтобы проверить набор символов базы данных и обнаружить, что все они имеют набор символов Latin1, поэтому сообщается об ошибке. показывать переменные типа «символ%»;
На что следует обратить внимание2:удалитьконтейнерназадmysqlиз Данные пропали Понятно? —— смонтирован на томе данных
docker run -d -p 3306:3306 \
--privileged=true \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql
Создайте новый в /app/mysql/conf. my.cnf, синхронизируйте следующую конфигурацию с экземпляром MySQL через том контейнера, чтобы решить проблему искаженных китайских символов.
(копировать конфигурацию файла конфигурации следующим образом my.cnf середина)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
Перезапустите контейнер mysql, заставив контейнер перезагрузить файл конфигурации:
docker restart mysql
(1)запускатьконтейнер Пример
docker run -p 3307:3306 \
--name mysql-master \
--privileged=true \
-v /app/mysql-master/log:/var/log/mysql \
-v /app/mysql-master/data:/var/lib/mysql \
-v /app/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
Примечание: докер runИзназадчерез докер ps обнаружил, что докер действительно не запустился logs нашел следующие журналы.
Причина: Вероятно, это означает, что он не найден.
/etc/mysql/conf.d
эта папка. #Сначала создайте простой экземпляр контейнера и посмотрите, что находится по пути. docker run -p 3306:3306 --name sample-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 #Войдите и посмотрите /etc/mysql папку и нашел только две пустые папки conf.d、 mysql.conf.d docker exec -it 065cb34b4b0b /bin/bash #копироватьконтейнер /etc/mysql Содержимое папки в /app/mysql-master/conf docker cp sample-mysql:/etc/mysql/. /app/mysql-master/conf Примечание. На самом деле это также может быть /app/mysql-master/conf Создано отдельно в conf.d 、 mysql.conf.d Две папки (т.к. пришёл кп - тоже две пустые папки). Тогда вы сможете добиться успеха! !
(2) Введите /app/mysql-master/conf и создайте новый файл конфигурации my.cnf.
[mysqld]
## Установите server_id, Должен быть уникальным в одной локальной сети.
server_id=101
## Укажите имя базы данных, которую не нужно синхронизировать
binlog-ignore-db=mysql
## Включить функцию двоичного протоколирования
log-bin=mall-mysql-bin
## Установить размер памяти использования двоичного журнала (транзакция)
binlog_cache_size=1M
## Установите используемый формат двоичного журнала (смешанный, операторный, строковый)
binlog_format=mixed
## Время очистки двоичного журнала по истечении срока его действия. Значение по умолчанию — 0, что означает отсутствие автоматической очистки.
expire_logs_days=7
## Пропустить все ошибки или ошибки указанных типов, возникающие при копировании главный-подчиненный, чтобы избежать прерываний копирования на подчиненной стороне.
## Например: ошибка 1062 относится к дублированию некоторых первичных ключей, а ошибка 1032 относится к несогласованности данных базы данных «главный-подчиненный».
slave_skip_errors=1062
(3) Перезапустите экземпляр.
docker restart mysql-master
(4) Введите экземпляр контейнера
docker exec -it mysql-master /bin/bash
(5) Войдите в MySQL и создайте пользователя синхронизации данных.
Примечание: Только слейвы с этим паролем пользователя могут синхронизировать данные у меня. Нельзя сказать, что кто-то может присваивать значения! !
-- Сначала войдите в MySQL
mysql -uroot -p
-- Создать пользователя синхронизации данных
create user 'slave'@'%' identified by '123456';
-- Авторизовать Что можно сделать с помощью Авторизовать
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;
(0) запуск также был в /app/mysql-slave/conf хоста. Создать по пути conf.d 、 mysql.conf.d Две папки.
1)запускать Служитьустройство
docker run -p 3308:3306 \
--name mysql-slave \
--privileged=true \
-v /app/mysql-slave/log:/var/log/mysql \
-v /app/mysql-slave/data:/var/lib/mysql \
-v /app/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
(2) Войдите в каталог /app/mysql-slave/conf и создайте файл конфигурации my.cnf.
[mysqld]
## Установите server_id, Должен быть уникальным в пределах одной локальной сети.
server_id=102
## Укажите имя базы данных, которую не нужно синхронизировать
binlog-ignore-db=mysql
## Включить функцию двоичного протоколирования,Подготовитьslaveделатьдля Другие базы данных ПримеризMasterчас使использовать
log-bin=mall-mysql-slave1-bin
## Установить размер памяти использования двоичного журнала (транзакция)
binlog_cache_size=1M
## Установите используемый формат двоичного журнала (смешанный, операторный, строковый)
binlog_format=mixed
## Время очистки двоичного журнала по истечении срока его действия. Значение по умолчанию — 0, что означает отсутствие автоматической очистки.
expire_logs_days=7
## Пропустить все ошибки или ошибки указанных типов, возникающие при копировании главный-подчиненный, чтобы избежать прерываний копирования на подчиненной стороне.
## Например: ошибка 1062 относится к дублированию некоторых первичных ключей, а ошибка 1032 относится к несогласованности данных базы данных «главный-подчиненный».
slave_skip_errors=1062
## Relay_log настроить журнал ретрансляции
relay_log=mall-mysql-relay-bin
## log_slave_updates указывает, что ведомое устройство записывает события в свой двоичный журнал.
log_slave_updates=1
## Параметр подчиненного устройства доступен только для чтения (кроме пользователей с суперразрешениями).
read_only=1
(3) После изменения конфигурации перезапустите подчиненный экземпляр.
docker restart mysql-slave
(1) Войдите в основную базу данных
docker exec -it mysql-master /bin/bash
(2) Подключиться к MySQL
mysql -uroot -p
(3) Проверьте состояние синхронизации «главный-подчиненный».
show master status;
В основном проверяйте имя файла File и текущую позицию возвращаемых результатов.
1) Войти из контейнера базы данных
docker exec -it mysql-slave /bin/bash
(2)Подключиться к базе данных
mysql -uroot -p
(3) Настройте главную базу данных, к которой принадлежит подчиненная база данных.
#Формат change master to master_host='IP-адрес хоста (внутренняя сеть, а не внешняя сеть)',master_user='Главный и подчиненный копировать имя пользователя, настроенное в главной базе данных',master_password='Главный и подчиненный копировать пароль пользователя, настроенный в главной базе данных',master_port =Порт основной базы данных хоста,master_log_file='Имя файла Файл состояния синхронизации между главной и подчиненной базой данных',master_log_pos=Положение статуса синхронизации между главной и подчиненной базой данных,master_connect_retry=Интервал повторной попытки сбоя соединения (в секундах);
change master to master_host='10.206.0.11',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=769,master_connect_retry=30;
(4) Проверьте состояние синхронизации «главный-подчиненный».
show slave status \G;
Помимо отображения только что настроенной основной информации о базе данных, основное внимание уделяется Slave_IO_Running и Slave_SQL_Running. В настоящее время оба значения должны быть «Нет», что указывает на то, что процесс еще не начался.
(5) Включите синхронизацию главный-подчиненный.
start slave;
(6) Еще раз проверьте состояние синхронизации «главный-подчиненный». Снова проверьте статус синхронизации master-slave. Оба параметра Slave_IO_Running и Slave_SQL_Running изменятся на Yes.
(1) Создайте новую библиотеку в основной базе данных, используйте библиотеку, создайте новую таблицу и вставьте данные.
create database db01;
use db01;
create table t1 (id int, name varchar(20));
insert into t1 values (1, 'abc');
(2) Используйте библиотеку и просматривайте записи в подчиненной базе данных.
show databases;
use db01;
select * from t1;
(3) Эффект следующий: очевидно, данные синхронизируются.
(1)запускать6башняredisконтейнер
# запускать Нет.1башняузел
# --net host Использовать IP и порт хоста по умолчанию
# --cluster-enabled yes Запустить кластер Redis
# --appendonly yes Включить сохранение Redis
# --port 6381 Настроить номер порта Redis
#Примечание: выше "cluster-enabled" Параметры все redis.conf параметры конфигурации, которые существуют в .
wget http://download.redis.io/redis-stable/redis.conf //Скачиваем файл конфигурации Redis
vim redis.conf //Вы можете увидеть, какие параметры есть
docker run -d --name redis-node-1 --net host --privileged=true -v /app/redis-cluster/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
# запускать Нет.2башняузел
docker run -d --name redis-node-2 --net host --privileged=true -v /app/redis-cluster/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
# запускать Нет.3башняузел
docker run -d --name redis-node-3 --net host --privileged=true -v /app/redis-cluster/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
# запускать Нет.4башняузел
docker run -d --name redis-node-4 --net host --privileged=true -v /app/redis-cluster/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
# запускать Нет.5башняузел
docker run -d --name redis-node-5 --net host --privileged=true -v /app/redis-cluster/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
# запускать Нет.6башняузел
docker run -d --name redis-node-6 --net host --privileged=true -v /app/redis-cluster/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
(2) Введите любой контейнер (введите здесь контейнер1)
docker exec -it redis-node-1 /bin/bash
(3) Постройте отношения «господин-раб».
# IP-адрес хоста (IP-адрес внутренней сети): порт
# --cluster-replicas 1 : указывает, что для каждого главного узла требуется 1 подчиненный узел.
Примечание. См. следующие команды обслуживания кластера Redis.
https://blog.csdn.net/cj_eryue/article/details/132811758
redis-cli --cluster create 10.206.0.11:6381 10.206.0.11:6382 10.206.0.11:6383 10.206.0.11:6384 10.206.0.11:6385 10.206.0.11:6386 --cluster-replicas 1
Эффект от исполнения следующий.
(4) Введите «да» при появлении запроса на подтверждение информации о конфигурации.
Очевидно, что из вышеизложенного мы видим выделение 16384 слотов данных.
(5) Проверьте состояние кластера
#Введите узел1
docker exec -it redis-node-1 /bin/bash
#Подключаем redis-node-1
redis-cli -p 6381
#cluster информация для просмотра состояния кластера
cluster info
Среди них количество выделенных хэш-слотов Cluster_slots_assigned — 16 384, а количество узлов кластера cluster_known_nodes — 6.
#Просмотр информации об узле кластера
cluster nodes
при использовании redis-cli
соединятьredisнабор群час,Нужно добавить -c
параметр,В противном случае могут возникнуть ошибки чтения и записи.
(1) Введите контейнер местоположения node1
docker exec -it redis-node-1 /bin/bash
(2) Используйте redis-cli для подключения (без параметра -c)
redis-cli -p 6381
(3) Добавьте следующие пары ключ-значение в redis
set k1 v1
Ошибка: рассчитанный хеш-слот k1 — 12706, но подключенный в данный момент Redis-сервер — 6381 (т. е. узел 1), а его хэш-слот: [0,5460] (при создании отношений главный-подчиненный Redis имеет Tip, ты тоже можешь пройти cluster представление узлов), поэтому будет сообщено об ошибке, поскольку ее невозможно сохранить.
осуществлять set k2 v2 может добиться успеха, поскольку хеш-слот, рассчитанный k2, находится в диапазоне [0–5460].
(4) Используйте параметр -c для подключения
redis-cli -p 6381 -c
(5) На данный момент все данные могут быть вставлены обычным образом.
set k1 v1
Будет подсказка, хеш-слот 12706, перенаправление на 6383 (то есть узел 3, хеш-слот [10923, 16383]):
(1) Введите узел1
docker exec -it redis-node-1 /bin/bash
(2) Введите адрес любого главного узла для выполнения проверки кластера.
redis-cli --cluster check 10.206.0.11:6381
(1)запуск Два новых узла редисконтейнера
# запустить Нет.7башняузел
docker run -d --name redis-node-7 --net хост --privileged=true -v /app/redis-cluster/share/redis-node-7:/data redis:6.0.8 --cluster-enabled да --appendonly да --порт 6387
# запустить Нет.8башняузел
docker run -d --name redis-node-8 --net хост --privileged=true -v /app/redis-cluster/share/redis-node-8:/data redis:6.0.8 --cluster-enabled да --appendonly да --порт 6388
(2) Войдите внутрь узла7
docker exec -it redis-node-7 /bin/bash
(3) Добавьте 6387 в кластер в качестве мастера.
# redis-cli --cluster add-node Адрес этого узла Адрес одного из узлов кластера, к которому необходимо присоединиться.
redis-cli --cluster add-node 10.206.0.11:6387 10.206.0.11:6381
(4) Проверьте текущий статус кластера.
redis-cli --cluster check 10.206.0.11:6381
Было обнаружено, что узел 6387 присоединился к кластеру в качестве ведущего, но ему не был назначен слот.
(5)reshard перераспределяет слоты
redis-cli --cluster reshard 10.206.0.11:6381
Например, теперь у нас есть 4 мастера, и мы хотим выделить 4096 (16384/4) слотов для узла 7, чтобы на каждом узле было по 4096 слотов. После ввода 4096 вам будет предложено ввести идентификатор узла для получения этих хэш-слотов. Просто введите идентификатор узла node7. (Это длинная шестнадцатеричная строка в информации об узле). Затем вам будет предложено спросить, каким узлам вы хотите выделить несколько слотов, чтобы составить 4096 для Node7. Обычно выбирают все, то есть все слоты предыдущих трех мастер-узлов отдаются Node7, чтобы количество слотов на каждом узле было равным и сбалансированным. После ввода всех Redis отобразит план, согласно которому некоторые слоты из трех предыдущих мастеров будут автоматически выделены слотам Node7. Вам необходимо подтвердить план распределения. После ввода «да» для подтверждения Redis автоматически перетасует карты и выделит слоты для Node7.
(6) После завершения перераспределения вы можете проверить информацию о кластере и просмотреть результаты распространения:
redis-cli --cluster check 10.206.0.11:6381
Можно обнаружить, что распределение слотов после перетасовки следующее:
Узел 1: [1365-5460] (для 4096 слотов), до распределения это [0-5460] (всего 5461 слот)
Узел 2: [6827-10922] (всего 4096 слотов),,, [5461-10922] (всего 5461 слот) перед распределением.
Узел 3: [12288-16383] (всего 4096 слотов),,, [10923-16383] (всего 5462 слота) перед распределением.
Узел 7: [0-1364], [5461-6826], [10923-12287] (всего 4096 слотов), часть каждого узла равномерно распределяется по узлу 7.
Поскольку ключи уже могут храниться в некоторых слотах, стоимость полной перестановки и перераспределения слишком высока, поэтому Redis решает выровнять некоторые из первых трех узлов до узла 7. Такой подход очень разумен.
(7) Назначьте подчиненный узел 6388 главному узлу 6387.
redis-cli --cluster add-node 10.206.0.11:6388 10.206.0.11:6381 --cluster-slave --cluster-master-id 341fe8f923673ba24de54c78e5b55db084afae5a
Redis отправит сообщение на 6388, чтобы он присоединился к кластеру и стал подчиненным узлом 6387.
(8) Выполните проверку, чтобы убедиться в эффекте.
Очевидно, что 6388 использовался как вторичный узел 6387.
(0) В исходном состоянии узел 7 выступает в роли ведущего, а узел 8 — в качестве ведомого.
redis-cli --cluster check 10.206.0.11:6381
(1) Искусственный простой узла 7
docker stop redis-node-7
(2) Проверьте статус и обнаружите, что узел Node8 успешно стал ведущим.
redis-cli --cluster check 10.206.0.11:6381
# Проверьте, не зависает ли он, и повторно выберите мастера. Подождите несколько секунд.
(3) Перезапустите узел node7 и обнаружите, что узел 7 присоединится в качестве подчиненного узла узла 8.
docker start redis-node-7
И так далее.
Уменьшите емкость с 4 мастеров и 4 слейвов до 3 мастеров и 3 слейвов, то есть удалите node7иnode8 из кластера.
(1) Введите узел контейнера 1.
docker exec -it redis-node-1 /bin/bash
(2) Проверьте статус контейнера и получите номер узла 6388.
redis-cli --cluster check 10.206.0.11:6381
(3) Удалите 6388 (эту копию) из кластера.
redis-cli --cluster del-node 10.206.0.11:6388 5bc1fd38ca7a9063170eb86184a6f0ce74901226
(4) Перераспределить хэш-слоты на узел 7.
1) Перераспределить хеш-слоты в кластер.
redis-cli --cluster reshard 10.206.0.11:6381
2) После того, как Redis проверит слоты, он предложит количество слотов, которые необходимо выделить. Если мы хотим напрямую выделить все 4096 хэш-слотов узла node7 узлу, мы можем ввести 4096 напрямую. При вводе 4096 будет запрошен идентификатор узла, который будет получать эти хеш-слоты. Если мы хотим выделить эти 4096 слотов для Node1, просто введите номер узла node1 напрямую. Затем вам будет предложено спросить, каким узлам вы хотите выделить несколько слотов, чтобы составить 4096 для Node1. Здесь мы вводим номер узла node7, нажимаем Enter и вводим готово.
3) Убедившись, что на узле 7 нет хэш-слота, вы можете удалить узел 7 из кластера.
redis-cli --cluster del-node 10.206.0.11:6387 341fe8f923673ba24de54c78e5b55db084afae5a
Последующие дополнения
6.8.1 Простая установка версии.
#Извлечь версию mongodb4.0
docker pull mongo:4.0
#бегатьконтейнер
docker run -d -p 27017:27017 --name=zsmognodb \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
mongo:4.0
#Входитьконтейнер
docker exec -it 4e48c5135ed7 /bin/bash
#Сначала попробуйте подключиться к базе данных внутри контейнера (да)
mongo --host localhost -u root
#Пытаемся удаленно подключиться к базе данных
./mongo --host 118.195.193.69 --port 27017 -u "root" -p "123456"
Примечание: Не забудьте снять ограничение на порт 27017 в правилах группы безопасности, иначе подключение будет невозможно.
6.8.2. Установка практического уровня.
Фактически, речь в основном идет о развертывании томов данных и наборов репликации.
Для объемов данных соответствующие примеры есть в инструкциях, связанных с монго, на сайтеhub.docker.com (поиск «-v»), следуйте инструкциям, чтобы узнать, что данные контейнера базы данных mongdb по умолчанию Путь /данные/БД.
#Далее запускается с объемом данных
docker run -d -p 27017:27017 --name=zsmognodb \
-e MONGO_INITDB_ROOT_USERNAME=корневой \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
-v /data/app/mongodb/data:/data/db \
монго: 4.0
Не включайте сначала проверку пароля, Создайте пользователя и пароль, войдите после создания пользователя и пароля, измените включенную аутентификацию. = true Перезапустите контейнер, чтобы изменения вступили в силу. Вам потребуется ввести имя пользователя и пароль.
docker run -d --name shuozhuo-influxdb \
-p 8086:8086 \
-p 8083:8083 \
-p 2003:2003 \
-e INFLUXDB_GRAPHITE_ENABLED=true \
-v /data/influxdb/conf/influxdb.conf:/etc/influxdb/influxdb.conf \
-v /data/influxdb:/var/lib/influxdb \
-v /etc/localtime:/etc/localtime \
influxdb
#Входитьконтейнер
docker exec -it shuozhuo1-influxdb /bin/bash
#Удалить изображение
docker rm -f shuozhuo-influxdb
#Новыйизапускатьконтейнер,параметр:-i Запустить в интерактивном режиме контейнер -t; дляконтейнерсновавыделить псевдовходить Терминал;--name Дайте контейнеру имя
docker run -i -t --name mycentos Название название изображения/идентификатор зеркала
#назадбашнязапускатьконтейнер,параметр:-d Охраняемый путь запускаконтейнер
docker run -d mycentos
#запускатьконецконтейнер
docker start контейнерid
# Перезапускконтейнер
docker restart контейнерid
# закрытиеконтейнер
docker kill контейнерid
docker stop контейнерid
-t параметрпозволятьDockerвыделить псевдо Терминали привязать кконтейнеризстандартныйвходитьначальство
-i Параметр оставляет стандартный вход в контейнер открытым.
-c Параметр используется для назначения значения общих ресурсов процессора работающему контейнеру.
-m Параметр используется для ограничения информации о памяти в контейнере. B、K、M、G как единица
-v Этот параметр используется для монтирования тома. Вы можете использовать несколько параметров -v для одновременного монтирования нескольких томов.
-p Параметр используется для предоставления порта контейнера порту хоста. Формат: хост_порт:контейнер_порт или host_ip:host_port:container_port
--name контейнеримясказать
--net Сети, используемые контейнером
-d Создание фонового работающего контейнера
#Следующий шаг — работа influxdb! !
#Создаем пользователя и пароль
create user "admin" with password 'admin' with all privileges
create user "admin" with password 'beyond_2021' with all privileges
auth admin admin Авторизоваться
show databases; отображать базу данных
create database demo Создать таблицу