Помните процесс обхода питов службы развертывания Docker

Docker

Пишу впервые. Позвольте мне представиться...
Привет, меня зовут Жасмин. Почему его назвали Жасмин? эммм ID Жасмин ходит по кругу? Скиньте его, хи-хи-хи. Автор был цыпленком два года (три дня из двух лет). Потому что в компании всего один я и два фронтенда. Так что задача по развертыванию онлайн-сервиса естественным образом легла на мои плечи. Это первый случай использования Docker для формального развертывания службы в производственной среде. Выберитесь из одной ямы и упадите в другую. Просто записывайте ошибки, с которыми столкнулись на этот раз онлайн. Пожалуйста, поправьте меня, если я ошибаюсь. Прости! Хорошо. Не много глупостей. действие!

В этом проекте используется Spring Cloud + Spring Boot + Spring Gateway + MySQL и RabbitMQ. Сервер - центос7. Здесь не хватает котла. На самом деле у меня есть коллега, с которым я работаю уже три месяца. Этот котел уволили за то, что он отпросился на собеседование с начальником, но все равно пошел туда и был уволен.Он строил каркас. Эмммм так "горшок" мне на голову кинули!

Зуул, который он использовал, был заменен вратами. Zuul основан на сервлете 2.5 (с использованием 3.x) и использует блокирующий API. Он не поддерживает никаких постоянных соединений, таких как веб-сокеты. Принимая во внимание, что Gateway построен на Spring Framework 5, Project Reactor и Spring Boot 2 и использует неблокирующий API. Поддерживаются веб-сокеты, и, поскольку они тесно интегрированы со Spring, это упростит разработку. (Этот отрывок скопирован с @https://juejin.cn/post/6844903573831024653)

Служба образов докеров использует службу образов контейнеров Alibaba Cloud. Я спросил своего коллегу и сказал, что использовал контейнерный инструмент Google. Таким образом, Cmd+Shift+F искал стрелу по всему миру. (Простите, это код компании, так что это код кавалерии ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄)

Нажмите, чтобы увидеть

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

Затем я создал пространство имен xxx-prod и создал репозитории для каждой службы в этом пространстве.Частные репозитории. Я выбрал источник кода, чтобы отправить локальный склад на зеркальный склад. Я мало знаю о других.

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

Затем подключитесь к серверу. Создайте папку docker в домашней папке

//在root根目录
//~]# centos7的emmm怎么说呢,就是GitBash和OS系统上面是$ windows下面cmd是>
//home下面创建一个docker文件夹
~]# mkdir /home/docker
//进入创建的docker
~]# cd /home/docker

Затем начните извлекать изображение, которое мы загрузили в Alibaba Cloud. На самом деле любую директорию можно дернуть (тут пропустил первый раз дернуть зеркальный сервис Alibaba, я не читал руководство по эксплуатации, один раз заподозрил, что у моей учетной записи нет разрешения, но я не вошел, а потом я сохранил логин в докере, но не знал, что образ Alibaba Cloud нужно добавить позже (Адрес: register.cn-hangzhou.aliyuncs.com) В консоли управления сервисом изображений Alibaba Cloud щелкните репозиторий образов -> Управление, вы увидите руководство по эксплуатации репозитория образов.

Ввод после извлечения изображения

~]# docker images

Вы можете видеть зеркало, к которому только что потянулись.

Я спросил своего коллегу, почему здесь так много зеркал, и он мне объяснил.
эммм, поехали! Я всегда чувствую, что есть много образов, занимающих память (надеюсь, есть большие парни, которые это знают, спасибо)

начать эврика

~]# docker run -d --name eureka -p 8761:8761 -p 15672:15672 -p 9001:9001  -v /etc/localtime:/etc/localtime registry.cn-hangzhou.aliyuncs.com/xx_xxx_prod/eureka
// -d后台运行 -p绑定端口这里绑定了三个端口,一个是注册中心本身的端口,一个是网关的端口,另外一个是rabbitmq的端口 
//-v打印版本信息 

Поскольку используется rabbitmq, необходимо создать еще один контейнер rabbitmq. Или сначала потяните зеркало

//这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面。
~]# docker pull rabbitmq:management
~]# docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=xxx -e RABBITMQ_DEFAULT_PASS=xxx --network=container:eureka rabbitmq:management
//因为docker容器间是网络隔断的 --network是加入eureka一样的网络环境这样才能被eureka治理下的服务访问到。
//-e是设置默认的账户密码 指令中是xxx,用到的朋友请自行调整。

Затем запустите свой собственный сервис

~]# docker run -d --name xxx -v /home/docker/web-prod/logs:/logs -v /etc/localtime:/etc/localtime --network=container:eureka registry.cn-hangzhou.aliyuncs.com/xx_xxx_prod/xxx 
//-v是将日志挂载到自己制定的目录。 同样--network加入eureka的网络,这里不用绑定端口。
//启动后可以在注册中心的控制台查看服务状态。ip + eureka的端口。

Так работает служба. Другие этапы обслуживания аналогичны. Наконец, добавьте несколько небольших эпизодов, встречающихся на линии. В начале я не знал, что docker-контейнеры разделены сетью, и я не мог подключиться к rabbitmq, потому что --network ранее не использовался, как, например, сеть eureka. Таким образом, localhost в службе не может получить доступ к rabbitmq. Также, если в сервисе используется очередь задержки rabbitmq, необходимо установить плагин для очереди задержки. Этапы установки плагина

打开官网下载:http://www.rabbitmq.com/community-plugins.html
选择相应的对应的版本“3.7.x”点击下载。
~]# docker cp /home/docker/rabbitmq_delayed_message_exchange-20171201-3.7.x.ez rabbit:/plugins
//进入到docker内部
~]# docker exec -it rabbit /bin/bash
//开启插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
//查看安装的所有插件
rabbitmq-plugins list

Установка прошла успешно, как показано на рисунке:

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

В итоге, наверное из-за опыта, я волшебным образом отключил и nginx, и httpd, а потом можно и удалить. Не спрашивайте меня, почему nginx и httpd установлены на одном сервере.Этот проект изначально был проектом php и был развернут ими.Я сам использовал nginx после того, как принял его.

Так же есть очень странная проблема.Хоть она и решена,но я так и не понял,почему она такая. В пользовательской таблице есть last_password_reset_date.Когда пользователь входит в систему, поле времени будет проверено, и токен всегда будет сообщаться как недействительный.После ввода каждого поля в журнале публикуется, что это поле отличается на 10 часов от время в базе данных.В то время я думал, что это проблема часового пояса. Но время другого поля register_date той же таблицы нормальное, поэтому часовой пояс не обрабатывается. После долгих исследований я подумал, что тип времени, принятый java, был неправильным, или что мои коллеги обработали это поле. Это никогда не было сделано. Позже я поставил онлайн-среду для проверки библиотеки и обнаружил, что она нормальная. Наконец, проверьте часовой пояс базы данных тестовой среды. , Восточный Восьмой округ. Онлайн-библиотека является GTM по умолчанию. Наконец, просто измените время официальной библиотеки на Dongba District.

Другим является Redis, потому что существовала общедоступная служба учетных записей, которая использовала Redis, а служба Redis в то время находилась на хосте. Так вот, я думал даже рассмотреть его на хосте сервера, но я не мог сначала подключить его.Позже я изменил файл конфигурации redis, и параметр bind был привязан к интранетовому ip. Затем программа использует IP-адрес интрасети для подключения к Redis.

Ладно, это все. Я использовал время, чтобы писать по частям в течение трех дней, надеясь принести вам небольшую помощь. Пока-пока!