Введение в изучение докера
Введение в изучение докера

1. Знакомство с докером

Официальный сайт докера: www.docker.com Официальный сайт dockerhub:hub.docker.com

Официальный сайт документации Docker: docs.docker.com

Docker — это облачный проект с открытым исходным кодом, основанный на языке Go.

DockerОсновная цель –:Создавайте, выпускайте и запускайте любое приложение где угодно (строить,Загружайте любое приложение где угодно),То есть посредством управления жизненным циклом компонентов приложения, таким как инкапсуляция, распространение, развертывание и эксплуатация.,включить пользователяAPPи его операционная среда может сделатьЗеркало один раз, беги повсюду

1.1. Какие проблемы решает докер?

Представьте себе следующую ситуацию, часто ли вы с ней сталкиваетесь?

Эксплуатация и обслуживание/тестирование: Ваша программа не может быть запущена! Развитие: Здесь можно бежать! ! !

(1) Несовместимая среда вызывает множество проблем. Замена машины означает необходимость начинать все заново, а это отнимает много времени и труда. (2)Масштабирование вверх и вниз также является щекотливым вопросом.(Потому что нам нужна одна и та же среда),пересадкаОчень хлопотно。

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

С помощью докера мы можем упаковать исходный код + конфигурацию + окружение + версию прогоняемой программы в один образ. Другими словами, то, что раньше подавалось в разработку, было только исходным кодом, а теперь оно стало исходным кодом + конфигурация + окружение + пакеты зависимостей и т. д. Метафору можно сравнить с переездом. Раньше при переезде приходилось собирать вещи, упаковывать их, перевозить и распаковывать. В ходе этого процесса вы обязательно теряли много вещей. После наличия докера переезд эквивалентен перемещению здания, при этом пересаживается все здание. Примечание. По сути, это похоже на виртуальную машину vmware. Поскольку виртуальная машина может упаковать всю систему, упаковка зависимостей программы здесь, естественно, не является большой проблемой.

На картинке выше. Кит — это докер, а контейнером может быть что угодно, например redis, mysql, mongodb и т.д.

Итак, концепция докера очень ясна:

Зеркало один раз, беги повсюду! ! От переезда к переезду! !

1.2 Традиционная виртуальная машина→технология виртуализации контейнеров.

Традиционная виртуальная машина:

Традиционная технология виртуальных машин основана на системе управления виртуальными машинами (такой как VirtualBox, VMware и т. д.), установленной в основной операционной системе, создании виртуальной машины (виртуализации различного оборудования), установке на виртуальную машину подчиненной операционной системы и установка подчиненной операционной системы на подчиненной операционной системе. Развертывание различных приложений.

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

Linux-контейнер (сокращенно LXC):

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

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

Сравнение функций выглядит следующим образом:

характеристика

контейнер

виртуальная машина

запускать

Второй уровень

Минутный уровень

размер

Обычно Мб

Обычно ГБ

скорость

Близко к родному

относительно медленный

Количество поддержки системы

Одна машина поддерживает тысячи контейнеров

Обычно десятки

1.3 Причины, почему докер работает быстро.

dockerСопоставимыйвиртуальная Машина Меньше слоев абстракции:

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

Docker использует ядро ​​хоста,Нет необходимости загружать ядро ​​операционной системы. При создании нового контейнера,Dockerненужныйивиртуальная машина — это то же самое, что перезагрузка ядра операционной системы. Это позволяет избежать трудоемких и ресурсоемких процессов, таких как загрузка, загрузка ядра операционной системы и возврат. При создании новой виртуальной машиначас,виртуальная Программному обеспечению компьютера необходимо загрузить ОС, и возврат к новому процессу является минутным. уровень еще. Поскольку Docker напрямую использует операционную систему хоста, он пропускает процесс возврата, поэтому создание нового докера занимает всего несколько секунд.

Суть Докерконтейнера — это процесс.

1.4. Влияние докера.

DevOps (разработка, эксплуатация и обслуживание): С помощью докера можно добиться интеграции разработки и эксплуатации.

1.5. Базовый состав докера.

докер. 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.

2. Установите докер в среде Linux.

Инструкцию по установке можно посмотреть на официальном сайте.

Разработка → Начало работы → Узнайте, как установить Docker. Здесь мы хотим установить Docker Engine.

Руководство по установке Centos выглядит следующим образом:

Install Docker Engine on CentOS | Docker Docs

2.1 Убедитесь, что среда установки соответствует требованиям.

Docker не является универсальным инструментом,Он опирается на существующую и работающую среду ядра Linux. также,Для Linux также существуют определенные требования.,Требуется 64-разрядная версия ядра Linux 3.8 или выше. Примечание. Это сильно зависит от среды Linux.,Даже если вы развертываете Docker в Windows, суть состоит в том, чтобы сначала установить виртуальную машину.,Затем установите и запустите Docker в виртуализированном Linux.

Установка выполняется здесь на Centos7. Для установки docker на CentOS 7 требуется, чтобы система была 64-разрядной, а версия ядра системы была 3.8 или выше. Для ее просмотра можно использовать следующую команду.

Язык кода:txt
копировать
uname -r

2.2 Способ установки первый: Установка с использованием репозитория rpm (Установка с использованием репозитория rpm).

Примечание. Это самый популярный метод установки, используйте его.

(1) Удалите старую версию (если она была установлена ​​ранее)

Язык кода:javascript
копировать
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) и настройте репозиторий.

Язык кода:javascript
копировать
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

Следующие инструкции будут выполняться быстрее.

Язык кода:javascript
копировать
yum makecache fast
yum makecache  #centos8

Команда yum makecache fast заранее кэширует информацию о пакете программного обеспечения в локальных индексах, чтобы повысить эффективность поиска и установки программного обеспечения.,предположениеосуществлять Эта команда может улучшитьyumустановленскорость。

Примечание. Для centos8 будет сообщено об ошибке, просто измените его на «yum makecache».

(4) Установите докер engine 1) Установите докер engine,containerd и docker compose

Язык кода:javascript
копировать
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

Язык кода:javascript
копировать
sudo systemctl start docker

(6) Убедитесь, что механизм Docker успешно установлен (вам может потребоваться настроить следующий источник изображения, прежде чем он сможет пройти)

Язык кода:javascript
копировать
sudo docker run hello-world

Эта команда загружает тестовое изображение и запускает его в контейнере. Когда контейнер запускается, он печатает подтверждающее сообщение и завершает работу.

(6) Проверьте статус/версию службы докеров.

Язык кода:javascript
копировать
systemctl status docker
docker version

Следующие инструкции указывают на успешную установку.

Если он соответствует ожиданиям, он будет установлен.

2.3. Удалить докер.

Язык кода:javascript
копировать
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

2.4. Настройте ускорение изображений (быстрее использовать изображения, такие как Tencent Cloud).

После установки программного обеспечения докера вы можете использовать докер Команда pull извлекает изображение. Если источник ускорения изображения не настроен, изображение в dockerhub будет загружено напрямую по умолчанию. Обычно это приемлемо. медленный。 Чтобы решить эту проблему, мы можем настроить ускоритель изображений. Например, здесь можно настроить источник изображений Docker Tencent Cloud для ускорения загрузки. Шаги следующие: vim /etc/docker/daemon.json #У вас может не быть этого файла при первом входе, просто создайте его.

Язык кода:javascript
копировать
{
    "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

Язык кода:javascript
копировать
systemctl daemon-reload
systemctl restart docker

2.5. Используйте службу облачного зеркалирования Tencent.

Введение: Предоставлено 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: Затем вы можете нажать или вытащить изображение.

Язык кода:javascript
копировать
#первый Посмотреть существующие локальные Зеркало Примечание:В нем есть зеркало 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) в нашем хранилище изображений следующим образом:

#Удалить репозиторий докера (скопировать имя в изображениях)

Язык кода:javascript
копировать
docker rm -f ccr.ccs.tencentyun.com/shuozhuo/shuozhuohub/hello-world

3. Инструкции, связанные с Docker

Официальная инструкция:docker | Docker Docs

3.1. Помощь по командам запуска.

Язык кода:javascript
копировать
#запускать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

3.2. Зеркальная команда.

(1)docker images

Список существующих изображений на локальном хосте

Язык кода:javascript
копировать
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 Загрузите изображение. Если ТЕГА нет, значит последняя версия.

Язык кода:javascript
копировать
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。

Язык кода:javascript
копировать
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-пакет (загрузка архива образа — обратная операция);

Язык кода:javascript
копировать
## 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)。

3.3, инструкции по контейнеру

Затем запустите систему Ubuntu с Docker и изучите из нее каждую команду контейнера. Примечание: Centos слишком большой — более 200 МБ, а Ubuntu сравнительно небольшой — более 70 МБ (многие вещи, кроме ядра Linux, были уменьшены, например, инструкции для vim и тому подобное).

(1)Новый+запускатьконтейнер

Язык кода:javascript
копировать
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 определяет несколько различных форм сопоставления портов:

Язык кода:javascript
копировать
● -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)прямойзапускать

Язык кода:javascript
копировать
docker run ubuntu

После выполнения вы обнаружите, что ничего не происходит, по крайней мере, никакого взаимодействия, очевидно, нам нужно взаимодействие;

2)запускатьинтерактивныйконтейнер(нужно иметь Терминалвзаимодействовать)

Язык кода:javascript
копировать
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Демо。

Язык кода:javascript
копировать
#redisfrontстойкаинтерактивзапуск: Нажмите ctrl+c, и он исчезнет, ​​что явно неприемлемо.
docker run -it redis


#redisСтиль фоновой защитызапуск: Это нормально
docker run -d redis


Преимущества очевидны. В будущем установить Redis и другое программное обеспечение будет очень просто! ! ! ! ! ! !

Примечание. Обязательно обратите внимание, что некоторые изображения не могут быть запущены через -d и должны быть -it.

Язык кода:javascript
копировать
docker run -d ubuntu

Например для убунту,осуществлять После приведенной выше команды кажется, чтозапускатьуспех Понятно,ноосуществлять docker ps Когда я проверил, я ничего не нашел (уже вышел).

Примечание. Это проблема механизма докера; «когда докер работает в фоновом режиме, должен быть приоритетный процесс». Если ни один приоритетный процесс не выполняется, контейнер подумает, что делать нечего, и автоматически закроется. Так как же исправить Ubuntu, которая всегда работает в фоновом режиме? docker run -dit ubuntu /bin/bash

(2) Список запущенных контейнеров

Язык кода:javascript
копировать
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)

Язык кода:javascript
копировать
#Вы можете повторно войти в контейнер с помощью следующей команды
docker exec -it идентификатор контейнера /bin/bash

(4)запускатьужеостанавливатьсябегатьизконтейнер

Язык кода:javascript
копировать
docker start контейнерidиликонтейнеримя
docker ps -n 2    #Назначаем идентификатор контейнера
docker start 5930c3d1a376  #сновазапускатьэтотконтейнер

(5)Перезапускконтейнер

Язык кода:javascript
копировать
docker restart контейнерidиликонтейнеримя

(6)останавливатьсяконтейнер

Язык кода:javascript
копировать
docker stop контейнерidиликонтейнеримя

(7)силаостанавливатьсяконтейнер

Язык кода:javascript
копировать
docker kill контейнерidиликонтейнеримя

(8)удалитьужеостанавливатьсяизконтейнер

Язык кода:javascript
копировать
docker rm контейнерid
docker rm -f контейнерid  #силаудалить(прямой Перевернуть стол)

Примечание: rmi удаляет изображения; rm удаляет контейнер. Затем docker ps -n 2 Я больше не могу видеть этот контейнер.

(9)Просмотр журнала контейнеров

Язык кода:javascript
копировать
docker logs контейнерid

Примечание: докер После безуспешного запуска контейнера можно передать команду «docker logs контейнерид», чтобы просмотреть журнал сбоев.

(10) Проверьте процессы, запущенные в контейнере. вверху — просмотр процессов, запущенных в докере хоста Centos; topПроверять鲸鱼набор装箱внутренний(или Вызовконтейнервнутренний)бегатьизпроцесс(Помните: каждый контейнер можно рассматривать как небольшую операционную систему.)。

Язык кода:javascript
копировать
docker top контейнерid

(11) Просмотр внутренних деталей контейнера

Язык кода:javascript
копировать
#Проверьте ситуацию с контейнером подробнее,Будет использован позже
Докер проверяет идентификатор контейнера

(12) Войдите в работающий контейнер и взаимодействуйте с командной строкой.

Язык кода:javascript
копировать
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) Скопируйте файлы из контейнера на хост. Скопируйте важные данные из контейнера на хост

Язык кода:javascript
копировать
docker cp контейнерid:контейнервнутренний путь Путь к целевому хосту

docker cp c7b862397680:/tmp/aa.txt /root/mystudy

(14) Контейнер для импорта и экспорта веськонтейнер Размеры Сделать резервную копию。

Язык кода:javascript
копировать
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 #Восстановление завершено

Примечание. Функция объема данных будет введена позже для передачи/резервного копирования данных контейнер→хост! ! !

3.4. Резюме

4. образ докера

4.1. Файловая система Юнион ФС.

UnionFS (Union File System): Union File System (UnionFS) — это иерархическая, легкая и высокопроизводительная файловая система. Она поддерживает изменения файловой системы, которые накладываются слой за слоем в виде фиксации. В то же время разные каталоги могут быть смонтированы в одной виртуальной файловой системе. Файловые системы Union — это записи образов Docker. Изображения могут наследоваться через запечатывающие слои, а на основе базового изображения можно создавать различные изображения для конкретных приложений. характеристика:в то же времячас Загрузить несколькофайловая система。но Снаружи видно только однофайловая система,Загрузка объединения будет накладывать каждый уровень файловой системы.,Таким образом, окончательная файловая система будет содержать все основные файлы и каталоги.

4.2, загрузочная и rootfs

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.

4.3. Наложение изображений.

Docker поддерживает расширение существующих образов и создание новых образов. Новое изображение создается слой за слоем из базового изображения.

Например, мы можем установить emacs на базовый Debian, а затем установить Apache. Процесс выглядит следующим образом:

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

4.4. Слой изображения и слой контейнера.

DockerЗеркалослой都да只读из,контейнерслойда可写из。 При контейнерзапуске поверх изображения загружается новый слой, доступный для записи. Этот слой часто называют“контейнерслой”,“контейнерслой”Сяду Вызов“Зеркалослой”。

Все изменения в контейнере,включить добавление、удалить、Изменение файлов происходит только на уровне контейнера.

4.5. Создание образов на основе контейнеров (докер-коммит).

Существует два основных способа создания изображений. ①Сделать зеркало на основе контейнера. —— docker commit。 ②Напишите файл docker для создания образа. —— Последующее введение

через докер commitможно представитьконтейнеркопия делает это известнымдля一个новыйиз Зеркало;就да说верноконкретныйизконтейнер Используйте что-то вроде“отражение”изспособ создания шаблона Зеркало。

Язык кода:javascript
копировать
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.

Язык кода:javascript
копировать
#Сначала обновите инструменты управления
apt-get update
#установить ВИМ
apt-get -y install vim

После установки вы можете использовать vim. Здесь мы используем vim для создания файла aa.txt с абсолютным путем /tmp и редактирования некоторых символов. Затем отправьте новое изображение.

Язык кода:javascript
копировать
docker commit -m="add vim cmd" -a="shuozhuo" 7274ef1a61a9 shuozhuo/ubuntuvim:1.0

Затем запустите изображения Docker, чтобы просмотреть локальное изображение следующим образом. Видимо, как и ожидалось.

Далее ставим контейнер 7274ef1a61a9 Остановитесь и заново создайте контейнер с помощью нового образа фиксации, чтобы проверить, имеет ли этот контейнер функциональность vim. Видимо по новой версии Зеркалосоздаватьизэтот全новыйизконтейнер(f3c63bd3753d)Просто возьми этоvimФункцияиз。

думать:очевидно, мы можемсуществоватьновыйиз Зеркалоrunпублично заявитьизконтейнериз Базаначальство继续增强исоздаватьновыйиз Зеркало;这就да分слойвключает в себя привлечениеизвыгода—— Продолжайте складывать.

4.6. Отправьте локальный образ в Tencent Cloud.

Примечание. В качестве региона я выбрал Гуанчжоу! ! !

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

склад、Зеркало、контейнер Отношения передачи следующие:

Войдите в облако Tencent → контейнер Зеркало Служить。Подписаться раньшеиз方式配置好Заказ空间Из类из。

Затем создайте элемент на зеркальном складе для хранения нашей улучшенной системы Ubuntu.

Нажмите на команду ярлыка климата и выполните предложенную команду.

Язык кода:javascript
копировать
#Войдите в 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, можно использовать нормально.

Язык кода:javascript
копировать
первый,будет местныйизоригинальный Зеркало(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.

4.7. Создайте реестр Docker в частном порядке.

Некоторые данные могут быть важными и конфиденциальными, и размещать их непосредственно в Tencent Cloud или Alibaba Cloud небезопасно. В настоящее время вы можете создать частный реестр докеров для хранения образов (например, создать его специально для своей компании). .

Docker Registry — это инструмент, официально предоставляемый Docker для создания частных складов.

Язык кода:javascript
копировать
#скачать Зеркало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

5. объем данных докер-контейнера

5.1. Что это такое? Что ты можешь сделать?

Одним словом: сохраните данные в контейнере на главном диске, чтобы обеспечить постоянное хранение или совместное использование данных в контейнере. Файлы RDB и AOF, похожие на Redis.

Том — это каталог или файл,Может существовать в одном или нескольких контейнерах,Подвешивается докером к контейнеру,Но он не принадлежит объединенной файловой системе. Целью данных тома является сохранение данных.,Это полностью независимо от жизненного цикла контейнера.,поэтомуdockerНе будетсуществоватьконтейнерудалитьчасповлиять на его подвешиваниесуществоватьизобъем данных。 Кроме того, объем данных имеет следующие характеристики: (1) Объемы данных могут совместно использоваться или повторно использоваться между контейнерами. (2) Изменения громкости вступают в силу в режиме реального времени. (3) Изменения объема данных не будут включены в обновление записи. (4) Период репутации тома данных длится до тех пор, пока его никто не использует.

5.2. Запустите контейнер с функцией хранения тома контейнера.

docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер Название изображения

Примечание. Эта команда создаст путь, который по умолчанию не существует на хост-компьютере и в контейнере. 1) Добавьте сопоставление томов контейнера между хостом и контейнером.

Язык кода:javascript
копировать
#Создайте контейнер с помощью следующей команды (что означает изменение пути /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) Проверьте статус привязки (проверка докера)

Язык кода:javascript
копировать
docker inspect контейнерid

docker inspect bcf4f5f29419

Вы можете увидеть информацию о привязке в Mounts.

4)контейнеростанавливатьсяназадсуществовать По пути хостаиз Исправлятьсуществоватьконтейнерсновазапускатьназад Тоже сэкономлюсуществовать。

5.3. Добавление карт с правилами чтения и записи.

По умолчанию обе стороны доступны для чтения и записи (как показано ниже), но мы также можем настроить правила чтения и записи. docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер:rw Название изображения

Если каталог контейнера должен быть доступен только для чтения, то есть контейнер не может быть записан внутри, то конфигурация следующая: ro(read только). docker run -it --privileged=true -v /Host абсолютный путь: каталог /контейнер:ro Название изображения

5.4. Наследование и совместное использование томов.

Сначала мы создаем контейнерubuntu1, который имеет карту на хост-компьютере, затем при создании ubuntu1 указываем том данных контейнера, который наследует ubuntu1; В это время может быть достигнут обмен данными между контейнером Ubuntu1, контейнером Ubuntu2 и хостом.

Язык кода:javascript
копировать
(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, поскольку это два совершенно разных контейнера.

6. Docker устанавливает общие компоненты.

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

6.1. Этапы установки.

①Поиск изображений ②Перетащите изображение ③Просмотр изображения ④запуск зеркала (обратите внимание на сопоставление сервисных портов) ⑤останавливатьсяконтейнер ⑥Удалятьконтейнер

Фактически, мы можем просто выполнить поиск на официальном сайте https://hub.docker.com. Например, для Tomcat выберите официально сертифицированный и нажмите «Вход». Есть инструкции, введение, как пользоваться зеркалом и другая информация.

6.2. Установите кот.

Язык кода:javascript
копировать
#Установить кота
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

6.3. Установка MySQL – простая установка.

Язык кода:javascript
копировать
#Вытаскиваем 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из Данные пропали Понятно? —— смонтирован на томе данных

6.4. Установите MySQL. —— Установка производственной среды

Язык кода:javascript
копировать
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

6.5 Установка mysql - установка набора репликации master-slave.

1. Установите основной сервер

(1)запускатьконтейнер Пример

Язык кода:javascript
копировать
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.

Язык кода:javascript
копировать
[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) Перезапустите экземпляр.

Язык кода:javascript
копировать
docker restart mysql-master

(4) Введите экземпляр контейнера

Язык кода:javascript
копировать
docker exec -it mysql-master /bin/bash

(5) Войдите в MySQL и создайте пользователя синхронизации данных.

Примечание: Только слейвы с этим паролем пользователя могут синхронизировать данные у меня. Нельзя сказать, что кто-то может присваивать значения! !

Язык кода:javascript
копировать
-- Сначала войдите в MySQL
mysql -uroot -p
-- Создать пользователя синхронизации данных
create user 'slave'@'%' identified by '123456';
-- Авторизовать Что можно сделать с помощью Авторизовать
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;
2. Установите подчиненный сервер

(0) запуск также был в /app/mysql-slave/conf хоста. Создать по пути conf.d 、 mysql.conf.d Две папки.

1)запускать Служитьустройство

Язык кода:javascript
копировать
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.

Язык кода:javascript
копировать
[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) После изменения конфигурации перезапустите подчиненный экземпляр.

Язык кода:javascript
копировать
docker restart mysql-slave
3. Проверьте статус синхронизации master-slave в главной базе данных.

(1) Войдите в основную базу данных

Язык кода:javascript
копировать
docker exec -it mysql-master /bin/bash

(2) Подключиться к MySQL

Язык кода:javascript
копировать
mysql -uroot -p

(3) Проверьте состояние синхронизации «главный-подчиненный».

Язык кода:javascript
копировать
show master status;

В основном проверяйте имя файла File и текущую позицию возвращаемых результатов.

4. Настройте репликацию master-slave из контейнера базы данных.

1) Войти из контейнера базы данных

Язык кода:javascript
копировать
docker exec -it mysql-slave /bin/bash

(2)Подключиться к базе данных

Язык кода:javascript
копировать
mysql -uroot -p

(3) Настройте главную базу данных, к которой принадлежит подчиненная база данных.

Язык кода:javascript
копировать
#Формат 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) Проверьте состояние синхронизации «главный-подчиненный».

Язык кода:javascript
копировать
show slave status \G;

Помимо отображения только что настроенной основной информации о базе данных, основное внимание уделяется Slave_IO_Running и Slave_SQL_Running. В настоящее время оба значения должны быть «Нет», что указывает на то, что процесс еще не начался.

(5) Включите синхронизацию главный-подчиненный.

Язык кода:javascript
копировать
start slave;

(6) Еще раз проверьте состояние синхронизации «главный-подчиненный». Снова проверьте статус синхронизации master-slave. Оба параметра Slave_IO_Running и Slave_SQL_Running изменятся на Yes.

5. Проверьте эффект репликации «главный-подчиненный».

(1) Создайте новую библиотеку в основной базе данных, используйте библиотеку, создайте новую таблицу и вставьте данные.

Язык кода:javascript
копировать
create database db01;
use db01;
create table t1 (id int, name varchar(20));
insert into t1 values (1, 'abc');

(2) Используйте библиотеку и просматривайте записи в подчиненной базе данных.

Язык кода:javascript
копировать
show databases;
use db01;
select * from t1;

(3) Эффект следующий: очевидно, данные синхронизируются.

6.6. Создание кластера Redis с 3 главными и 3 подчиненными.

6.6.0, структура следующая
6.6.1. Строительство.

(1)запускать6башняredisконтейнер

Язык кода:javascript
копировать
# запускать Нет.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)

Язык кода:javascript
копировать
docker exec -it redis-node-1 /bin/bash

(3) Постройте отношения «господин-раб».

Язык кода:javascript
копировать
# 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) Проверьте состояние кластера

Язык кода:javascript
копировать
#Введите узел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
6.6.2 Ошибки чтения и записи (следует читать и записывать в кластере)

при использовании redis-cliсоединятьredisнабор群час,Нужно добавить -cпараметр,В противном случае могут возникнуть ошибки чтения и записи.

Язык кода:javascript
копировать
(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]):  
6.6.3 Проверка информации о кластере.

(1) Введите узел1

Язык кода:javascript
копировать
docker exec -it redis-node-1 /bin/bash

(2) Введите адрес любого главного узла для выполнения проверки кластера.

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381
6.6.4. Расширение кластера.

(1)запуск Два новых узла редисконтейнера

Язык кода:javascript
копировать
# запустить Нет.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

Язык кода:javascript
копировать
docker exec -it redis-node-7 /bin/bash

(3) Добавьте 6387 в кластер в качестве мастера.

Язык кода:javascript
копировать
# redis-cli --cluster add-node Адрес этого узла Адрес одного из узлов кластера, к которому необходимо присоединиться.
redis-cli --cluster add-node 10.206.0.11:6387 10.206.0.11:6381

(4) Проверьте текущий статус кластера.

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381

Было обнаружено, что узел 6387 присоединился к кластеру в качестве ведущего, но ему не был назначен слот.

(5)reshard перераспределяет слоты

Язык кода:javascript
копировать
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) После завершения перераспределения вы можете проверить информацию о кластере и просмотреть результаты распространения:

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381

Можно обнаружить, что распределение слотов после перетасовки следующее:

Язык кода:javascript
копировать
Узел 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.

Язык кода:javascript
копировать
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.

6.6.5. Автоматическое переключение кластера Redis (выбор мастера).

(0) В исходном состоянии узел 7 выступает в роли ведущего, а узел 8 — в качестве ведомого.

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381

(1) Искусственный простой узла 7

Язык кода:javascript
копировать
docker stop redis-node-7

(2) Проверьте статус и обнаружите, что узел Node8 успешно стал ведущим.

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381

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

(3) Перезапустите узел node7 и обнаружите, что узел 7 присоединится в качестве подчиненного узла узла 8.

Язык кода:javascript
копировать

docker start redis-node-7

И так далее.

6.6.6. Сокращение кластеров.

Уменьшите емкость с 4 мастеров и 4 слейвов до 3 мастеров и 3 слейвов, то есть удалите node7иnode8 из кластера.

(1) Введите узел контейнера 1.

Язык кода:javascript
копировать
docker exec -it redis-node-1 /bin/bash

(2) Проверьте статус контейнера и получите номер узла 6388.

Язык кода:javascript
копировать
redis-cli --cluster check 10.206.0.11:6381

(3) Удалите 6388 (эту копию) из кластера.

Язык кода:javascript
копировать
redis-cli --cluster del-node 10.206.0.11:6388 5bc1fd38ca7a9063170eb86184a6f0ce74901226

(4) Перераспределить хэш-слоты на узел 7.

1) Перераспределить хеш-слоты в кластер.

Язык кода:javascript
копировать
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 из кластера.

Язык кода:javascript
копировать
redis-cli --cluster del-node 10.206.0.11:6387 341fe8f923673ba24de54c78e5b55db084afae5a

6.7. Установите Нгинкс.

Последующие дополнения

6.8. Установите Монго БД.

6.8.1 Простая установка версии.

Язык кода:javascript
копировать
#Извлечь версию 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 по умолчанию Путь /данные/БД.

Язык кода:javascript
копировать
#Далее запускается с объемом данных
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

6.7. Установите Инфлюксдб.

Не включайте сначала проверку пароля, Создайте пользователя и пароль, войдите после создания пользователя и пароля, измените включенную аутентификацию. = true Перезапустите контейнер, чтобы изменения вступили в силу. Вам потребуется ввести имя пользователя и пароль.

Язык кода:javascript
копировать
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

#Входитьконтейнер

Язык кода:javascript
копировать
docker exec -it shuozhuo1-influxdb /bin/bash

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

Язык кода:javascript
копировать
docker rm -f shuozhuo-influxdb
Язык кода:javascript
копировать
#Новыйизапускатьконтейнер,параметр:-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 Создание фонового работающего контейнера
Язык кода:javascript
копировать
#Следующий шаг — работа 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 Создать таблицу


Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024, приходите и разделите со мной главный приз!

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.