【问题标题】:Dockerize meteor applicationDockerize 流星应用程序
【发布时间】:2019-06-17 03:09:32
【问题描述】:

我有一个流星应用程序。这个应用程序在Centos7 VM 上运行良好。
我需要创建这个应用程序的 docker 容器,并在其他虚拟机上安装或导入这个容器。
ِdocker 文件需要在另一个VM 上保存和加载容器吗?
NodeJs?
Mongodb?
MeteorJs

我不应该将Mongodb 文件存储在 Docker 容器中吗?

这是我的 docker 文件:

# Pull base image.
FROM node:8.11.4
# Install build tools to compile native npm modules
RUN npm install -g node-gyp
RUN apt-get install curl -y
RUN curl https://install.meteor.com/ | sh
# Create app directory
RUN mkdir -p /usr/app
COPY . /usr/app
RUN cd /usr/app/programs/server
RUN npm install
WORKDIR /usr/app
CMD ["node", "main.js"]
EXPOSE 3000

【问题讨论】:

  • 你的意思是你想要 dockerize 流星应用程序与所有依赖项?比如mongodb文件,nodejs文件和meteorjs文件?
  • 是的,我想要。

标签: node.js docker meteor centos7


【解决方案1】:

有很多方法可以给这只猫剥皮......假设您已经研究了如何使用容器通过使用自动执行以下设置的工具来执行流星应用程序的替代方案 - 流星调用他们的这个自动化 Galaxy 版本

我建议您在用于运行您的应用程序的容器之外运行meteor 命令,因为meteor 安装量很大,安装速度很慢,并且您可能引入的一些库或您的库引入的库可能需要c或 c++ 编译器,因此流星和它的朋友不需要每次你想重新编译你的应用程序时都安装到你的应用程序容器中......你的应用程序容器只需要 nodejs 和你的包......当你执行它不使用的流星应用程序时meteor 而不是直接使用 nodejs 执行应用程序,因为此时您的代码已被编译成一个纯 nodejs 的包

是的,您最好将mongodb 放入自己的容器中

不,不需要将MeteorJs 放入您的应用程序容器中,就像meteor 本身一样,在执行期间不需要那些编译时工具,因此请安装MeteorJs 以及成功构建meteor 所需的所有其他工具执行meteor build 命令的主机

在您上面的 Dockerfile 中,最后一条语句 EXPOSE 3000 永远不会到达,所以将它放在您的 CMD 节点之前

所以在你的容器外面安装流星然后发出

cd /your/webapp/src
meteor build --server https://example.com  --verbose  --directory /webapp --server-only 

上面会将你的流星项目编译成一个捆绑目录

ls -la /webapp/bundle/

然后将您的 Dockerfile 等复制到新剪切的包目录中:

.bashrc
Dockerfile
bundle/

然后创建你的容器

docker build --tag localhost:5000/hygge/loudweb-admin --no-cache . 
docker push localhost:5000/hygge/loudweb-admin

这是一个精简的 Dockerfile

cat Dockerfile

#  normal mode - raw ubuntu run has finished and base image exists so run in epoc mode

FROM ubuntu:18.04

ENV DEBIAN_FRONTEND noninteractive
ENV TERM linux

ENV NODE_VER=v8.11.4
ENV NODE_NAME=node-${NODE_VER}
ENV OS_ARCH=linux-x64
ENV COMSUFFIX=tar.gz

ENV NODE_PARENT=/${NODE_NAME}-${OS_ARCH}
ENV PATH=${NODE_PARENT}/bin:${PATH}
ENV NODE_PATH=${NODE_PARENT}/lib/node_modules

RUN apt-get update && apt-get install -y wget   && \
    wget -q https://nodejs.org/download/release/${NODE_VER}/${NODE_NAME}-${OS_ARCH}.${COMSUFFIX} && \
    tar -xf ${NODE_NAME}-${OS_ARCH}.${COMSUFFIX}

ENV MONGO_URL='mongodb://$MONGO_SERVICE_HOST:$MONGO_SERVICE_PORT/meteor'
ENV ROOT_URL=https://example.com

ENV PORT 3000
EXPOSE 3000

RUN which node

WORKDIR /tmp

# CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf" ]
#  I strongly suggest you wrap below using supervisord
CMD ["node", "main.js"]

启动您的容器问题

docker-compose -f /devopsmicro/docker-compose.yml pull loudmail  loud-devops  nodejs-enduser
docker-compose -f /devopsmicro/docker-compose.yml up -d 

这是一个精简的 docker compose yaml 文件

version: '3'
services:

  nodejs-enduser:
    image: ${GKE_APP_IMAGE_ENDUSER}
    container_name: loud_enduser
    restart: always
    depends_on:
      - nodejs-admin
      - loudmongo
      - loudmail
    volumes:
      - /cryptdata6/var/log/loudlog-enduser:/loudlog-enduser
      - ${TMPDIR_GRAND_PARENT}/curr/loud-build/${PROJECT_ID}/webapp/enduser/bundle:/tmp
    environment:
      - MONGO_SERVICE_HOST=loudmongo
      - MONGO_SERVICE_PORT=$GKE_MONGO_PORT
      - MONGO_URL=mongodb://loudmongo:$GKE_MONGO_PORT/test
      - METEOR_SETTINGS=${METEOR_SETTINGS}
      - MAIL_URL=smtp://support@${GKE_DOMAIN_NAME}:blah@loudmail:587/
    links:
      - loudmongo
      - loudmail
    ports:
     - 127.0.0.1:3000:3000
    working_dir: /tmp
    command: /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf

一旦您的应用程序使用容器执行,您就可以停止使用 ubuntu 作为您的容器基础,并使用更小、更简单的 docker 基础映像,如 nodejs、busybox 等,但是最初使用 ubuntu 更容易,因为它能够让您从正在运行的容器中安装包,这在开发过程中很不错

上面的阴谋是巨大的......上面是从房子的 devops 一侧提取的快速复制 N 粘贴,其中包含数百个帮助二进制文件 + 脚本、配置模板、tls 证书......这是对让应用程序执行的世界

【讨论】:

  • 非常详细和好的答案。
  • 谢谢 关于这条线的另一个问题! “不,无需将MeteorJs 放在您的应用程序容器中,而是将其安装在外部,然后当流星构建发生时,它将成为捆绑包的一部分”您的意思是它不需要目标VM 中的流星。例如:虚拟机 A :这里安装了流星和容器导出。虚拟机B:容器必须导入到这个。虚拟机 B:需要在输出容器中安装流星吗?虚拟机B:需要在输出容器中安装mongodb
【解决方案2】:

@Scott Stensland 的回答很好,因为它解释了如何为 Meteor 手动创建一个 docker 容器。

有一种更简单的方法使用 Meteor-up (mup) http://meteor-up.com/

轻松部署您的应用

Meteor Up 是一款生产质量的 Meteor 应用部署工具。

使用一个命令安装:

$ npm install --global mup

您设置了一个简单的配置文件,它负责创建容器、执行 npm 安装、设置 ssl 证书等。比手工完成的工作要少得多

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2016-07-10
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多