Разверните проект nodejs -- egg через Docker.

Node.js
Разверните проект nodejs -- egg через Docker.

Общие команды докера

  • Установитьdockerокружающая обстановка
  • docker --helpПросмотр командной строки докера
  • docker ps -aПросмотреть все запущенные контейнеры
  • docker imagesпосмотреть все
  • Настройте Dockerfile
  • Просмотрите журнал работы контейнера:docker logs -f [containerId]

Изображение упакованного яйца в Docker
  • Создайте новый файл Dockerfile в корневом каталоге проекта и отредактируйте содержимое следующим образом.
# 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:10.13.0

# 配置环境变量
ENV NODE_ENV production

# 这个是容器中的文件目录
RUN mkdir -p /usr/src/app 

# 设置工作目录
WORKDIR /usr/src/app

# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /usr/src/app/package.json

# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --production --registry=https://registry.npm.taobao.org

# 拷贝所有源代码到工作目
COPY . /usr/src/app

# 暴露容器端口
EXPOSE 9000

CMD npm start

  • в яичном проектеpackage.jsonфайл, в начальном элементе автозагрузки,--daemonзапускается в фоновом режиме. При использовании контейнера докеров необходимо удалить--daemon .
  • Войдите в корневой каталог проекта и выполните команду упаковки образа:docker build -t image_name ./
  • После завершения упаковки выполните команду запуска контейнера:docker run -itd --net=host --name container_name -p 8000:8000 image_name
  • -tЭтот параметр очень важен, он означает, что он не будет заходить в контейнер для выполнения команды, если его убрать, команда в CMD запуска Dockerfile будет выполняться внутри контейнера.
  • После того, как выполнение будет завершено, вы можете просмотреть его через команду docker ps, и будет отображаться запущенный контейнер.Если вы обнаружите, что контейнер не запускается нормально, вы можете выполнитьdocker logs -f containerIDкоманда для просмотра журнала выполнения в контейнере.

Проблемы, которые могут возникнуть


  1. Контейнер не может быть запущен нормально: когда это происходит, сначала проверьте правильность команды упаковки контейнера,docker ps -aкоманда для просмотра всех контейнеров, которые вы упаковали.В команде упаковки контейнеров-itdсередина-dЭто эквивалентно выполнению команды CMD в файле Dockerfile внутри контейнера.Мы знаем, что после выполнения команды в nodejs в консоли будет вывод журнала.Вы можете проверить вывод журнала через docker logs -f containerID.
  2. Контейнер запускается нормально, но программа в контейнере не может нормально подключаться к локальным службам, таким как база данных на локальном хосте.Во-первых, мы должны узнать номер порта службы и добавить соответствующее сопоставление портов в команду запуска контейнера, Такие какdocker run -itd --net=host --name container_name -p 8000:8000 -p 9999:9999 image_name это--net=hostПараметр очень важен, он указывает контейнеру и хосту совместно использовать сеть. В это время вы можете получить доступ к локальной службе, как обычно, через номер порта, который вы сопоставили внутри контейнера.
  3. Если вы по-прежнему не можете запустить и получить доступ к службе после выполнения первых двух шагов, рекомендуется перейти в репозиторий github egg.js, чтобы узнать о решениях связанных проблем.egg.js issue