首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker创建多个镜像

问Docker创建多个镜像
EN

Stack Overflow用户
提问于 2018-03-02 11:24:12
回答 3查看 6.6K关注 0票数 6

我是Docker的新手,我发现有许多镜像正在被创建(如sudo docker images中所见),并在堆栈溢出中的某处找到,以定期运行sudo docker rmi $(sudo docker images -q)来删除所有镜像。为什么会创建这么多镜像?我的配置有问题吗?

docker-compose.yml

代码语言:javascript
复制
nginx:
  build: ./nginx
  restart: always
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - /etc/letsencrypt/:/etc/letsencrypt/
  links:
    - node:node

node:
  build: ./node
  restart: always
  ports:
   - "8080:8080"
  volumes:
    - ./node:/usr/src/app
    - /usr/src/app/node_modules

nginx dockerfile是

代码语言:javascript
复制
FROM nginx:alpine

COPY nginx.conf /etc/nginx/conf.d/default.conf

nodejs dockerfile是

代码语言:javascript
复制
FROM node:9.3.0-alpine

WORKDIR /usr/src/app

COPY package*.json /usr/src/app/

RUN npm install --only=production

COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]

网站/应用程序运行正常。除了定期删除所有容器和图像,然后运行:sudo docker-compose up --build -d。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-03 18:31:41

图像是不可变的,所以您所做的任何更改都会导致创建一个新的图像。因为您的组合文件指定了build命令,所以当您启动容器时,它将重新运行build命令。如果COPY或ADD中包含的任何文件发生更改,则不再使用现有的映像缓存,它将构建一个新映像,而不会删除旧映像。

请注意,我建议在撰写文件中命名您的映像,以便清楚正在重建哪个映像。您可以观察编写构建的第一步的输出,第一步不报告使用缓存来查看发生了什么变化。如果我猜的话,会破坏缓存并导致新图像的代码行是nodejs中的这一行:

代码语言:javascript
复制
COPY . /usr/src/app

如果容器中不需要正在更改并导致重新构建的文件,则使用.dockerignore文件排除不必要的文件。

票数 5
EN

Stack Overflow用户

发布于 2020-05-26 14:46:15

我在构建Dockerfile时也遇到了同样的问题。

我找到了解决方案,使用以下命令构建您的文件:

代码语言:javascript
复制
`docker build --rm -t <tag> .`

选项--rm在成功构建后删除中间容器。

票数 1
EN

Stack Overflow用户

发布于 2018-03-02 13:58:49

不应该创建“这么多图像”。

如果你想确保只保留你需要的(而不是每次都要重新构建所有东西);只需简单地这样做(作为I detail here):

代码语言:javascript
复制
docker image prune
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49062367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档