您用来开发和安装目录的容器映像应该与您在其他地方运行应用程序时生成的映像相同,或者如果无法实现,则至少基于生产映像。
以一个简单的节点应用程序为例,以下是基本图像:
FROM node:6ENV NODE_ENV=productionRUN npm install forever -gCOPY docker-entrypoint.sh /entrypoint.shWORKDIR /appCOPY package.json /app/RUN npm installCOPY . /appEXPOSE 3000ENTRYPOINT ["/entrypoint.sh"]CMD ["node", "/app/index.js"]
生产
docker run --detach --restart always --publish 3000:3000 myapp
发展历程
docker run --publish 3000:3000 --volume .:/app --env NODE_ENV=development myapp forever -w /app/index.js
所以我修改了挂载,但是基本映像是相同的。挂载的文件替换了容器中的“内置”文件。
对于node.js应用程序,还有一些额外的开发更改。环境变量和用于监视/重启更改的命令。更改中的依赖项时,还需要
npminstall在容器中手动执行。
docker exec $container npm install``package.json
开发Dockerfile
如果您需要对开发环境进行大量修改,并且不想手动指定它们,则可以
FROM在包含开发细节的基础映像中创建一个开发映像。
Dockerfile.dev:
from myapp:latestenv NODE_ENV=developmentvolume ["/app"]command ["forever", "-w", "--watchDirectory", "/app" "/app/index.js"]
然后,开发细节将存储在新映像中,但仍链接到您的真实映像。
docker build -f Dockerfile.dev -t myapp-dev .docker run -p 3000:3000 -v .:/app myapp-dev



