我对我的应用程序进行了 dockerized,但为了查看我的更改,我必须重建我的图像并且它不会给我我的应用程序的实时预览。

所以我创建了一个 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

开发 Dockerfile

如果您需要对开发环境进行大量修改并且不想手动指定它们,您可以创建一个开发镜像 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

关于docker - 当我的开发环境将我的代码库安装到容器中时,如何构建 docker 镜像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40914696/

10-16 18:08