有很多方法可以给这只猫剥皮......假设您已经研究了如何使用容器通过使用自动执行以下设置的工具来执行流星应用程序的替代方案 - 流星调用他们的这个自动化 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 证书......这是对让应用程序执行的世界