我对应用程序进行了docker化处理,但是要查看我的更改,我必须重建图像,并且不能为我提供应用程序的实时预览。
因此,我创建了一个docker- compose环境,该环境将redis链接到我的节点容器,然后将源代码从主机挂载到节点应用程序并监视其更改。但是,由于代码不是UnionFS的一部分,因此无法进行容器化。
如何设置一个开发环境,该环境可以生成dockerized映像,但是每次更改代码库时都不必重新启动?
您用来开发和安装目录的容器映像应该与您在其他地方运行应用程序时生成的映像相同,或者如果无法实现,则至少基于生产映像。
以一个简单的节点应用程序为例,以下是基本图像:
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应用程序,还有一些额外的开发更改。环境变量和用于监视/重启更改的命令。更改中的依赖项时,还需要npm install在容器中手动执行。docker exec $container npm install``package.json
npm install
docker exec $container npm install``package.json
如果您需要对开发环境进行大量修改,并且不想手动指定它们,则可以FROM在包含开发细节的基础映像中创建一个开发映像。Dockerfile.dev:
FROM
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