最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Dockerfile env依赖的起点

IT培训 admin 4浏览 0评论

Dockerfile env依赖的起点

提起Docker,演出晚了一点,但总比没有好。

[跟随一些在线教程,我登陆了一个docker文件并为我的第一个微服务节点+ mongo docker-compose。

开发人员的糟糕设置,所以现在将实现可信任的pm2:

生产需要以下内容,但开发人员希望pm2实例mgr在文件更改时重新启动。。

但是我现在明显的问题是如何在Dockerfile中区分dev和prod?

Dockerfile

FROM node:12-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm i
COPY . /usr/src/app
EXPOSE 3000
CMD node ./build/server.js

搬运工-撰写

version: "3"

services:

  ms-authentication-service:
    image: "ms-authentication-image"
    depends_on:
      - mongodb
    build:
      dockerfile: Dockerfile
      context: .
    links:
      - mongodb
    networks:
      - default
    ports:
      - "8080:8000"
    restart: always

  mongodb:
    image: mongo:4.2
    container_name: "ms-authentication-mongo-image"
    environment:
      MONGO_INITDB_ROOT_USERNAME: bob
      MONGO_INITDB_ROOT_PASSWORD: bob
    networks:
      - default
    ports:
      - 27017:27017
回答如下:

通常,基于ENV来管理诸如登台或生产之类的环境是一种常见的做法,但是在Docker的情况下,最佳方法是tag

对于Docker,最好将tag用作dev, stage and production。原因有很多,原因之一是开发环境中的mount code很好,但在生产环境中不推荐使用。

[构建图像时,请始终tag使用有用的标签进行编码版本信息,预期目标(prod or test, for instance),稳定性或在以下情况下有用的其他信息在不同的环境中部署应用程序。 不要依赖自动创建的最新标签

Docker App development best-practices

但是如果仍然想使用ENV方法,则可以使用docker-entrypoint脚本。

Dockerfile

FROM node:alpine
RUN npm install pm2 -g
COPY . /app
WORKDIR /app
ENV NODE_ENV=development
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT  ["sh","docker-entrypoint.sh"]

多克尔-入口点

 #!bin/sh 
     if [ $NODE_ENV = development ]; then
     pm2 start server.js
     else
     node server.js
    fi

因此,您很好,您将能够在Dockerfile或运行时中更改它

 docker run --env NODE_ENV=production -it --rm node:production

 docker run --env NODE_ENV=development -it --rm dev

Dockerfile env依赖的起点

提起Docker,演出晚了一点,但总比没有好。

[跟随一些在线教程,我登陆了一个docker文件并为我的第一个微服务节点+ mongo docker-compose。

开发人员的糟糕设置,所以现在将实现可信任的pm2:

生产需要以下内容,但开发人员希望pm2实例mgr在文件更改时重新启动。。

但是我现在明显的问题是如何在Dockerfile中区分dev和prod?

Dockerfile

FROM node:12-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm i
COPY . /usr/src/app
EXPOSE 3000
CMD node ./build/server.js

搬运工-撰写

version: "3"

services:

  ms-authentication-service:
    image: "ms-authentication-image"
    depends_on:
      - mongodb
    build:
      dockerfile: Dockerfile
      context: .
    links:
      - mongodb
    networks:
      - default
    ports:
      - "8080:8000"
    restart: always

  mongodb:
    image: mongo:4.2
    container_name: "ms-authentication-mongo-image"
    environment:
      MONGO_INITDB_ROOT_USERNAME: bob
      MONGO_INITDB_ROOT_PASSWORD: bob
    networks:
      - default
    ports:
      - 27017:27017
回答如下:

通常,基于ENV来管理诸如登台或生产之类的环境是一种常见的做法,但是在Docker的情况下,最佳方法是tag

对于Docker,最好将tag用作dev, stage and production。原因有很多,原因之一是开发环境中的mount code很好,但在生产环境中不推荐使用。

[构建图像时,请始终tag使用有用的标签进行编码版本信息,预期目标(prod or test, for instance),稳定性或在以下情况下有用的其他信息在不同的环境中部署应用程序。 不要依赖自动创建的最新标签

Docker App development best-practices

但是如果仍然想使用ENV方法,则可以使用docker-entrypoint脚本。

Dockerfile

FROM node:alpine
RUN npm install pm2 -g
COPY . /app
WORKDIR /app
ENV NODE_ENV=development
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT  ["sh","docker-entrypoint.sh"]

多克尔-入口点

 #!bin/sh 
     if [ $NODE_ENV = development ]; then
     pm2 start server.js
     else
     node server.js
    fi

因此,您很好,您将能够在Dockerfile或运行时中更改它

 docker run --env NODE_ENV=production -it --rm node:production

 docker run --env NODE_ENV=development -it --rm dev

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论