当开发环境将代码库装入容器时,如何构建docker映像?

当开发环境将代码库装入容器时,如何构建docker映像?,docker,Docker,我将我的应用程序停靠,但为了查看我的更改,我必须重建我的图像,它不会给我应用程序的实时预览 因此,我创建了一个docker compose环境,它将redis链接到我的a节点容器,然后将源代码从主机装载到节点应用程序,并观察其变化。但是,由于该代码不是UnionFS的一部分,因此无法将其容器化 如何设置一个开发环境,该环境可以生成停靠的映像,但不必在每次更改代码库时重新启动?您开发的容器映像和装载目录应与您在别处运行应用程序时生成的映像相同,或者,如果无法实现,至少基于生产映像 以简单节点应用程

我将我的应用程序停靠,但为了查看我的更改,我必须重建我的图像,它不会给我应用程序的实时预览

因此,我创建了一个docker compose环境,它将redis链接到我的a节点容器,然后将源代码从主机装载到节点应用程序,并观察其变化。但是,由于该代码不是UnionFS的一部分,因此无法将其容器化


如何设置一个开发环境,该环境可以生成停靠的映像,但不必在每次更改代码库时重新启动?

您开发的容器映像和装载目录应与您在别处运行应用程序时生成的映像相同,或者,如果无法实现,至少基于生产映像

以简单节点应用程序为例,下面是基本图像:

FROM node:6
ENV NODE_ENV=production
RUN npm install forever -g
COPY docker-entrypoint.sh /entrypoint.sh
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY . /app
EXPOSE 3000
ENTRYPOINT ["/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应用程序,有几个额外的开发更改。环境变量和用于监视/重新启动更改过程的命令。当您在
package.json
中更改依赖项时,还需要使用
docker exec$container npm install
在容器中手动执行
npm安装

开发文档 如果您需要对开发环境进行大量修改,并且不希望手动指定这些修改,则可以从包含开发细节的基础映像创建一个开发映像
<代码>Dockerfile.dev

from myapp:latest
env NODE_ENV=development
volume ["/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

这太完美了!谢谢你,马特!很高兴能帮上忙@amingilani