当我的开发环境将我的代码库安装到容器中时,如何构build泊坞窗图像?

我dockerized我的应用程序,但为了看到我的变化,我将不得不重build我的形象,它不会给我一个我的应用程序的实时预览。

所以我创build了一个docker-compose环境,将redis链接到我的一个节点容器,然后将源代码从主机挂载到节点app并监视它的变化。 但是,由于代码不是UnionFS的一部分,因此不能装箱。

如何设置一个开发环境,可以生成docker化的图像,但不必每次更改代码库都要重新启动?

您开发的容器映像和装载目录应该与您在其他位置运行应用程序所生成的图像相同,或者至less基于无法实现的生产映像生成。

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

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 

所以我修改了挂载,但基本的图像是一样的。 装入的文件replace容器中的“内置”文件。

在node.js应用程序的情况下,还有一些额外的开发改变。 一个环境variables和用于监视/重新启动进程的命令。 您还需要在docker exec $container npm install的容器中手工执行一个npm install ,当您对package.json的依赖项进行更改时。

开发Dockerfile

如果您需要对开发环境进行一些修改,而不想手动指定它们,则可以FROM包含开发细节的基本映像创build一个开发映像。 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