предисловие
что такое япи?
YApi — это локально развертываемая платформа управления визуальным интерфейсом, которая объединяет внешний и внутренний интерфейсы, а также контроль качества.
Статья будет перемежаться некоторыми соответствующими пунктами знаний, которые могут сэкономить вам время на лазание по яме, и все они вылезают шаг за шагом.
От идеи индивидуальной конструкции, оптимизации, реализации позиции и заинтересованных друзей, чтобы спуститься~~~
-
yapi(Docker Hub): crper/yapi
-
Адрес на гитхабе:yapi-docker
визуализация
Авторизоваться
Авторизация успешна
Площадь проекта
япи контейнер
уже встроенныйbash
По умолчаниюshell
, vim также настраивает некоторые общие параметры
- пресеты vim
предварительный фундамент
Запас знаний
Docker
/Linux
/Node
Основа, такая как Linux и Docker Обычно используемые команды,shell
письмо и т.д.
Создайте базовую среду
-
Docker version 18.03.1-ce
- на основе
alpine
,alpine
очень легкийLinux
, голая версия всего 5M
- на основе
-
Docker Compose
(отpip3
установленная версия по умолчанию)
Цели сборки: возможность использования/обновления, независимость от базы данных, первая сборка по запросуПоследняя версия!!!!
Практическая наука
если идтиDocker Hub
Автоматическая сборка, так как она построена на чужом сервере, проблем с медленными нет,
Следующие используются только при локальной сборке
Общеизвестно, что иностранные ресурсы работают относительно медленно, поэтому мы отдаем приоритет тем, которые предоставляются в Китае.
Источник HKUST для зеркального источника Linux
alpine
Список складов, официальный запрос и запрос в службу поддержки
Минимизируйте конфигурацию, насколько это возможно, поэтому не настраивайте ничего персонализированного, напримерoh my zsh
,neovim
Эти
Из этой статьи вы, как правило, узнаетеdocker
простое развертывание, базовыйdockerfile
Пишите, а как опубликовать свой собственный контейнер
Образ yapi, который я предоставил, собирается автоматически, поэтому внутренние зависимости по-прежнему являются международными источниками, и они не упакованы локально, поэтому медлительности не будет.
Так что для тех, кто хочет тянуть, просто подумайтеdocker
Просто вытащите источник
Построить япы как обычно
Я выбираю здесь на основеalpine
строить, строить позы много,
Получить его можно из пустой тары или из чужой расфасованнойnode
контейнер
Функции зеркального отображения должны быть максимально простыми, что способствует оркестровке.
Если образ предоставляет несколько сервисов, его сложнее поддерживать.
Особенно при обновлении или необходимости приостановки определенных служб необходимо учитывать множество факторов.
Версия 1: Посредственно
Dockfile
# 基于 alpine镜像构建
FROM alpine:3.8
# 镜像维护者的信息
LABEL MAINTAINER = 'crper@outlook.com(https://github.com/crper)'
# 基础环境构建
# - 替换国内源,速度杠杠的
# - 更新源
# - 安装基础环境包
# - 更改用户的默认shell , 因为容器只是给yapi用,所以就不考虑创建用户组和独立用户这种东西,所以只有root用户了
# ,若是容器包括多功能就需要用户组这些好一些(不推荐容器有太多功能),尽可能保持容器功能的单一性
# - 最后是删除一些缓存
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk update \
&& apk add --no-cache shadow git nodejs nodejs-current-npm bash vim tar curl python python-dev py-pip gcc libcurl make\
&& usermod -s /bin/bash root \
&& rm -rf /var/cache/apk/*
# 克隆项目以及初始化项目
# yapi 官方的内网部署教程: https://yapi.ymfe.org/devops/index.html
# install-server会初始化数据库索引和管理员账号,管理员账号名可在 config.json 配置
RUN npm i -g node-gyp --registry https://registry.npm.taobao.org \
&& npm install -g yapi-cli --registry https://registry.npm.taobao.org \
&& mkdir /yapi && cd /yapi \
&& git clone https://github.com/YMFE/yapi.git vendors \
&& cd vendors \
&& npm install --production --registry https://registry.npm.taobao.org
# 工作目录
WORKDIR /yapi/vendors
# 配置yapi的配置文件
COPY config.json /yapi/
# 复制执行脚本到容器的执行目录
COPY entrypoint.sh /usr/local/bin/
# 向外暴露的端口
EXPOSE 3000
# 指定配置文件
ENTRYPOINT ["entrypoint.sh"]
entrypoint.sh
#!/bin/sh
# yapi初始化后会有一个init.lock文件
lockPath="/yapi/init.lock"
# 如果初始化文件文件存在,则直接运行,否则初始化
if [ ! -f "$lockPath" ]; then
node /yapi/vendors/server/install.js
else
node /yapi/vendors/server/app.js
fi
.dockerignore
Этот файл - хорошая вещь, с.gitignore
Так же специально используется для игнорирования присланных файлов, чтобы не дать нам занести на зеркало какие-то ненужные вещи
.git/
node_modules/
После того, как я упаковал образ локально, я обнаружил, что, хотя его можно использовать, есть две проблемы (объем, скорость сборки).
Поэтому я думаю о том, можно ли его оптимизировать,
Версия 2: уменьшить размер образа и время сборки
Выберите хороший родительский контейнер, один из них — уменьшить количество слоев сборки, другой — уменьшить пакет зависимостей.
Первый шаг изменить нельзя, хотя естьnode-alpine
Они могут начинаться только с двух последних
Dockfile
# 基于 alpine镜像构建
FROM alpine:3.8
# 镜像维护者的信息
LABEL MAINTAINER = 'crper@outlook.com(https://github.com/crper)'
# 基础环境构建
# - 替换国内源,速度杠杠的
# - 更新源
# - 安装基础环境包
# - 更改用户的默认shell , 因为容器只是给yapi用,所以就不考虑创建用户组和独立用户这种东西,所以只有root用户了
# ,若是容器包括多功能就需要用户组这些好一些(不推荐容器有太多功能),尽可能保持容器功能的单一性
# - 最后是删除一些缓存
# - 克隆项目
# !! yapi 官方的内网部署教程: https://yapi.ymfe.org/devops/index.html
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk update \
&& apk add --no-cache shadow git nodejs nodejs-current-npm bash vim tar curl python python-dev py-pip gcc libcurl make\
&& usermod -s /bin/bash root \
&& rm -rf /var/cache/apk/* \
&& mkdir /yapi && cd /yapi && git clone https://gitee.com/mirrors/YApi.git vendors
# 工作目录
WORKDIR /yapi/vendors
# 配置yapi的配置文件
COPY config.json /yapi/
# 复制执行脚本到容器的执行目录
COPY entrypoint.sh /usr/local/bin/
# 写好的vim配置文件复制进去
COPY .vimrc /root/
# 向外暴露的端口
EXPOSE 3000
# 指定配置文件
ENTRYPOINT ["entrypoint.sh"]
# `shadow`: `alpine`默认不集成`usermod`,所以需要这个额外包,因为要用来更改默认`shell`
# `vim` : 编辑神器
# `tar` : 解压缩
# `make`: 编译依赖的
# `gcc`: GNU编译器套装
# `python`: `python python-dev py-pip`这三个包包括了基本开发环境
# `curl` 可以测试连接也能下载内容的命令行工具
# `git` : 不用说了
# `nodejs` : node
# `nodejs-current-npm` : `alpine`Linux版本需要依赖这个版本,才能让`npm`识别到
entrypoint.sh
#!/bin/sh
# yapi初始化后会有一个init.lock文件
lockPath="/yapi/init.lock"
# 设置源为淘宝源
npm config set registry http://registry.npm.taobao.org/;
# 进入yapi项目
cd /yapi/vendors
# 如果初始化文件文件存在,则直接运行,否则初始化
if [ ! -f "$lockPath" ]; then
# 全局安装用来更新yapi的cli
npm i -g node-gyp yapi-cli;
# 安装初始化的依赖模块
npm i --production;
# 启动Yapi初始化
node server/install.js
else
node server/app.js
fi
От размера изображения более 500 МБ до более 400, 20% все еще впечатляют, можно ли его еще оптимизировать !!!
vim
,tar
,bash
,shadow
,py-pip
могут быть удалены, а другие необходимы для строительства (например,yapi
Инициализация зависит от python)эмм..... удалите это, упакуйте и уменьшите40Больше M, или восстановите его, оптимизируйте время сборки
Версия 3: уменьшить вероятность сбоя инициализации
потому что используетсяdockerhub 的自动化构建
,такnpm
Выберите официальный источник непосредственно при сборке
Dockerfile
# 基于 alpine镜像构建
FROM alpine:latest
# 镜像维护者的信息
LABEL MAINTAINER = 'crper@outlook.com(https://github.com/crper)'
# 基础环境构建
# - 更新源
# - 安装基础环境包
# - 不用更改默认shell了,只要进入的镜像的时候指定shell即可
# - 最后是删除一些缓存
# - 克隆项目
# - 采用自动化构建不考虑国内npm源了 , 可以降低初始化失败的概率
# !! yapi 官方的内网部署教程: https://yapi.ymfe.org/devops/index.html
RUN apk update \
&& apk add --no-cache git nodejs nodejs-current-npm bash vim python python-dev gcc libcurl make\
&& rm -rf /var/cache/apk/* \
&& mkdir /yapi && cd /yapi && git clone https://github.com/YMFE/yapi.git vendors \
&& npm i -g node-gyp yapi-cli \
&& cd /yapi/vendors && npm i --production;
# 工作目录
WORKDIR /yapi/vendors
# 配置yapi的配置文件
COPY config.json /yapi/
# 复制执行脚本到容器的执行目录
COPY entrypoint.sh /usr/local/bin/
# 写好的vim配置文件复制进去
COPY .vimrc /root/
# 向外暴露的端口
EXPOSE 3000
# 指定配置文件
ENTRYPOINT ["entrypoint.sh"]
# `vim` : 编辑神器
# `tar` : 解压缩
# `make`: 编译依赖的
# `gcc`: GNU编译器套装
# `python`: `python python-dev py-pip`这三个包包括了基本开发环境
# `curl` 可以测试连接也能下载内容的命令行工具
# `git` : 不用说了
# `nodejs` : node
# `nodejs-current-npm` : `alpine`Linux版本需要依赖这个版本,才能让`npm`识别到
entrypoint.sh
#!/bin/sh
# yapi初始化后会有一个init.lock文件
lockPath="/yapi/init.lock"
# 进入yapi项目
cd /yapi/vendors
# 如果初始化文件文件存在,则直接运行,否则初始化
if [ ! -f "$lockPath" ]; then
# 启动Yapi初始化
node server/install.js
else
# 运行yapi管理系统
node server/app.js
fi
образ пакета
Формат:docker build [option] tagName path
docker build -t yapi .
;
Без дефолта:
Приходите к независимому номеру версии и упакуйте его какlatest
Это означает, что в текущем каталоге на основеDockfile
создать образ,
Вы также можете создать свой номер версии обслуживания самостоятельно, например
docker build -t yapi:0.0.1 .
Если вам нужно сжать изображение какgz
отформатировать, принести--compress
выпускное зеркало
Регулярный ручной выпуск терминала
Вход в учетную запись
Аккаунт здесьdocker
Официально зарегистрированные аккаунты, общий процесс очень похожgit
- Открыть терминал ->
docker login
-
commit
: отправьте свои собственные или вторичные настроенные изображения.
Технические характеристики:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] [flags]
-
push
: передать изображение на удаленныйdocker hub
ах, это неправильно?
Подскажите у нас нет разрешения, почему такая проблема,
docker hub
Спецификация отправки требует, чтобы мы начали с собственного имени пользователя и изменили его.
Размер изображения версии 1
Размер зеркала версии 2
я отправилcompress
версии, так что вы находитесь вdocker hub
видеть только такой большой
После этого шага ваша работа может бытьDock Hubпила
Вы можете строить напрямую на основе локально собранного образа,
Если вы делаете вторую сборку на основе собственного пакета, вам не нужно переходитьcommit
Этот шаг также возможен, просто измените его напрямуюpush
просто хорошо
Автоматизируйте выпуски сборок
Docker Hub
при условииautomated build
короче, автоматизированные сборки,
мы можем связатьgithub
репозиторий для сборки,bitbucket
Также работает, но я этим не пользуюсь;
Либо отсюда, либо из управления пользователями, нужно заранее привязатьgithub
(уполномоченный)
После авторизации вы можете прочитать свой список складов.Выберите склад для постройки, требования к складу, основной каталог выглядит следующим образом
├── .dockerignore //docker打包忽略的文件
├── .gitignore //git提交忽略的文件
├── Dockerfile //docker 构建配置文件
├── README.md // 不用多说了
├── config.json // yapi的配置文件
└── entrypoint.sh // 构建入口的脚本
Инициализация может установить, какие ветки будут запускать сборку или запускатьendpoint
строить,
Самое глупое - проверить мониторpush
Событие создается автоматически
Если вы хотите загрузить зеркальное изображение на внутренний阿里云
,dao
Эти,
Некоторым необходимо зарегистрировать учетную запись разработчика и отправить ее в соответствии с требованиями документации.
Развертывание образа
Забавно, если готовую работу нельзя развернуть, теперь следуйте за мной, чтобы развернуть свой образ и инициализировать его;
развернуть япи
Последняя версия, извлеченная по умолчанию, инициализируется в первый раз, поэтому нет необходимости указывать версию.
еслиyapi
Код не строгий, и даже инициализация новой версии сообщит об ошибке, но решения нет!
создать объем
docker volume create yapi-mongo
Создайте том хранилища для выделенного хранилищаyapi
в использованииmongodb
Данные
Почему вы хотите быть независимым? Это ради будущих обновлений. База данных зарезервирована. Просто свяжите ее при запуске.
запустить монгодб
docker run -d --name yapi-mongo -v yapi-mongo:/data/db mongo
Зачем начинать первымmongodb
,потому чтоyapi
Зависит от инициализацииmongodb
, такие как создание пользовательских таблиц
Что означает эта команда?
-d : 是启动的时候输出容器的id
--name : 是给容器设置一个名字,方便我们控制,比如start,stop
-v : 指定关联的卷 => 本地卷:容器内储存位置 , 就是映射数据保存的地方
Если вам нужно управлять базой данных извне, лучше также открыть порт.mongodb
Контейнер также по умолчанию предоставляет порт 27017.
docker run -d --name yapi-mongo -v yapi-mongo:/data/db -p 27017:27017 mongo
Инициализируйте Yapi и запустите Yapi
- инициализировать yapi
docker run -d --name yapi -p 3000:3000 --link yapi-mongo crper/yapi
Еще один параметр здесь, чем выше, это--link
, используемый для связи между контейнерами, устаревшие команды, официально объявленные устаревшими
- начать япи
docker restart yapi
Доступны процессыdocker logs details 容器ID或者name
чтобы увидеть, что внутри
то естьshell
Процесс выполнения, например, этот проект может видеть пароль инициализированной учетной записи (успех) при его инициализации
не важно какmongo
ещеcrper/yapi
, когда вы запрашиваете несуществующий контейнер,
постараюсьdockhub
Найдите выше, потяните зеркало по умолчаниюlatest
версии, если не найдено, будет сообщено об ошибке
Ниже приведена основная информация об инициализации.
访问链接: 127.0.0.1:3000
默认的账户名: config.json => adminAccount 这个字段的值
密码: ymfe.org
-----И возможная ошибка в том, что npm зависает------
Во время инициализации выполнить
docker logs --details 容器ID
Глядя на процесс выполнения внутреннего терминала, некоторые источники npm не обязательно надежны.
Если будет предложеноnpm
Установка сообщает об ошибке, нужно зайти и поменять на другой источник
начать первымcrper/yapi
Зеркальное отражение, а затем следуйте инструкциям, чтобы перейти
// npm config set registry [url]
// npm ---- https://registry.npmjs.org/
// cnpm --- http://r.cnpmjs.org/
// taobao - http://registry.npm.taobao.org/
// eu ----- http://registry.npmjs.eu/
// au ----- http://registry.npmjs.org.au/
// sl ----- http://npm.strongloop.com/
// nj ----- https://registry.nodejitsu.com/
// 进入到vendors目录
// 若是有node_modules目录,
// 我们都应该先干掉node_modules
// 这样重新安装依赖才会比较干净
// 进到vendors目录, 比如设置回官方源
npm config set registry https://registry.npmjs.org/;
// 安装全局升级工具和依赖编译的npm模块
npm i -g node-gyp yapi-cli \
npm i --production;
// 初始化 yapi
node server/install.js
После завершения установки вы можете повторно инициализировать его, а затем перезапустить контейнер.
Введите контейнерную операцию
-
docker ps
: см. список информации о запуске контейнеров из вашего образа из этого -
docker exec -it 容器ID bash
: Это предложение состоит в том, чтобы войти в контейнер неинвазивно и вызватьshell
дляbash
,этоexit
не сушит контейнер
docker attach
Используйте эту команду с осторожностью, она остановит контейнер, если он выйдет из терминала, эта команда используется в зависимости от ситуации!!!!
обновить япи
Потому что это не связано с обработкой контейнера. Это просто замена файла, официальный также предлагает решение, котороеcli
Уже интегрирован в контейнер по умолчанию
// https://yapi.ymfe.org/devops/index.html
cd {项目目录}
yapi ls //查看版本号列表
yapi update //升级到最新版本
yapi update -v v1.1.0 //升级到指定版本
Перезагрузка после обновленияnode
Программу или перезагрузить контейнер можно!!
Адрес на гитхабе:yapi-docker
База данных управления графическим интерфейсом
Мы открыли порт 27017, поэтому наш хост может использовать инструменты для связи с внутренней базой данных,
У редиски и зелени есть своя любовь, рендеры
То же самое относится и к тем, кто любит использовать командную строку.
Сводка ошибок
Построитьyapi
некоторые ошибки в процессе
-
/bin/sh: npm: not found
, устанавливается во время сборкиnodejs-current-npm
-
usermod not found
: установить во время сборкиshadow
-
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
- это инициализация
yapi
встретились, нужно доделатьpython
Базовая среда, добавьте соответствующий установочный пакет при сборке
- это инициализация
-
mongodb
Нет доступа, то есть при настройке параметров файла127.0.0.1
когда..- существует
docker
, имя контейнера по умолчанию сопоставляет IP-адрес доступа к контейнеру, поэтомуconfig.json
В качестве имени контейнера нужно указать mongo (эта яма тратит много времени, и иностранные сообщества перерыли ее, в основном то, что они говорят--network
Эти)
- существует
Есть еще некоторые ошибки, я забыл сделать скриншоты
------------Советы------------
почему ты увиделdockerfile
использовал много\
связывать команды,
это потому, чтоRUN
Один из них — создать образ, а затем передать его следующему вторичному расположению на основе этого:
Если он используется многоRUN
, это эквивалентно построению большого количества слоев от начала до конца вашего изображения (объем также станет больше)... Официальная рекомендация - не более семи слоев!!
Слоев сборки в настоящее время не может быть больше 127!
для--link
Чтобы связать контейнеры (для доступа друг к другу), этоdocker
Официальный больше не рекомендуется, это устаревшая функция, новый сетевой режим очень надежен,
Предоставляет режимы моста, хостинга и подсети, но они не применяются к--link
комбинировать
Поэтому для многоконтейнерной оркестровки рекомендуется использоватьdocker-compose
Для настройки есть много настраиваемых вещей и простота обслуживания, например, последняя версия 3.6.
Портал:docs.docker.com/V17.09/comp…
Суммировать
Много времени ушло на то, чтобы написать различные скриншоты этой статьи, и воспроизвести процесс (модифицировать файлы, запаковать, запустить и отладить их по очереди) (заняло неделю до и после),
Почему существует это руководство, я чувствую, что оно может очень помочь, и хочу проверить водуdocker
приятель,
Так называемые «микросервисы» основаны наdocker
Для достижения этой цели сохраняйте функцию контейнера единой, простой в обслуживании и тестировании.
Я хотел продолжить писать на основеdocker-compose
версия, поэтому длина статьи слишком велика... найдите время, чтобы написать еще одну
docker-compose
Написание развертывания очень элегантно, конфигурация ясна с первого взгляда, и можно выполнить более сложную оркестровку контейнеров...
кто-нибудь обязательно упомянетKubernetes
, Этот продукт очень популярен, если вы заинтересованы, вы можете пойти и посмотреть его.Как правило, этот продукт используется для эксплуатации и обслуживания крупных заводов.
Если что-то не так или есть план улучшения, пожалуйста, оставьте сообщение вовремя, и оно будет исправлено и улучшено вовремя.Спасибо за чтение~~~