Dockerize 流星应用程序
Dockerize meteor application
我有一颗流星 application.This 应用程序在 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
有很多方法可以给这只猫蒙皮...让我们假设您已经研究了如何使用容器执行流星应用程序的替代方案,方法是使用自动执行以下设置的工具 - 流星调用他们的这种自动化版本 Galaxy
我建议你 运行 容器外的 meteor 命令用于 运行 你的应用程序,因为 meteor 安装很大,安装速度很慢,而且你可能会引入一些库,或者您的库引入的库可能需要 c 或 c++ 编译器,因此流星及其朋友不需要在每次您想重新编译您的应用程序时都安装到您的应用程序容器中……您的应用程序容器只需要 nodejs 和您的包……当你执行一个 meteor 应用程序时,它不使用 meteor 而是直接使用 nodejs 执行应用程序,因为此时你的代码已经编译成一个包,它是纯 nodejs
是的,您最好将 mongodb
放入其自己的容器中
不,不需要将 MeteorJs
放入您的应用程序容器中,就像 meteor 本身一样,在执行期间不需要那些编译时工具,因此安装 MeteorJs
以及所有其他所需的工具在您的主机上成功构建流星,您可以在主机上执行 meteor build
命令
在你上面的 Dockerfile 中,最后一条语句 EXPOSE 3000
永远不会到达,所以把它放在你的 CMD 节点之前
所以在你的容器外安装 meteor 然后发布
cd /your/webapp/src
meteor build --server https://example.com --verbose --directory /webapp --server-only
以上将把你的 meteor 项目编译成一个位于
的 bundle 目录
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 最初更容易,因为它能够让您从 运行ning 容器中安装软件包,这在开发过程中很好
上面的阴谋是巨大的……上面是从房子的 devops 一侧摘取的快速复制 N 粘贴,其中包含数百个辅助二进制文件 + 脚本、配置模板、tls 证书……这是一个小小的一瞥进入让应用程序执行的世界
@Scott Stensland 的回答很好,因为它解释了如何为 Meteor 手动创建 docker 容器。
有一种更简单的方法使用 Meteor-up (mup) http://meteor-up.com/
EASILY DEPLOY YOUR APP
Meteor Up is a production quality Meteor app deployment tool.
Install with one command:
$ npm install --global mup
您设置了一个简单的配置文件,它负责创建容器、执行 npm 安装、设置 ssl 证书等工作。比手动完成要少得多
我有一颗流星 application.This 应用程序在 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
有很多方法可以给这只猫蒙皮...让我们假设您已经研究了如何使用容器执行流星应用程序的替代方案,方法是使用自动执行以下设置的工具 - 流星调用他们的这种自动化版本 Galaxy
我建议你 运行 容器外的 meteor 命令用于 运行 你的应用程序,因为 meteor 安装很大,安装速度很慢,而且你可能会引入一些库,或者您的库引入的库可能需要 c 或 c++ 编译器,因此流星及其朋友不需要在每次您想重新编译您的应用程序时都安装到您的应用程序容器中……您的应用程序容器只需要 nodejs 和您的包……当你执行一个 meteor 应用程序时,它不使用 meteor 而是直接使用 nodejs 执行应用程序,因为此时你的代码已经编译成一个包,它是纯 nodejs
是的,您最好将 mongodb
放入其自己的容器中
不,不需要将 MeteorJs
放入您的应用程序容器中,就像 meteor 本身一样,在执行期间不需要那些编译时工具,因此安装 MeteorJs
以及所有其他所需的工具在您的主机上成功构建流星,您可以在主机上执行 meteor build
命令
在你上面的 Dockerfile 中,最后一条语句 EXPOSE 3000
永远不会到达,所以把它放在你的 CMD 节点之前
所以在你的容器外安装 meteor 然后发布
cd /your/webapp/src
meteor build --server https://example.com --verbose --directory /webapp --server-only
以上将把你的 meteor 项目编译成一个位于
的 bundle 目录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 最初更容易,因为它能够让您从 运行ning 容器中安装软件包,这在开发过程中很好
上面的阴谋是巨大的……上面是从房子的 devops 一侧摘取的快速复制 N 粘贴,其中包含数百个辅助二进制文件 + 脚本、配置模板、tls 证书……这是一个小小的一瞥进入让应用程序执行的世界
@Scott Stensland 的回答很好,因为它解释了如何为 Meteor 手动创建 docker 容器。
有一种更简单的方法使用 Meteor-up (mup) http://meteor-up.com/
EASILY DEPLOY YOUR APP
Meteor Up is a production quality Meteor app deployment tool.
Install with one command:
$ npm install --global mup
您设置了一个简单的配置文件,它负责创建容器、执行 npm 安装、设置 ssl 证书等工作。比手动完成要少得多