Docker创建多个图像

问题描述 投票:2回答:2

我是Docker的新手,发现有很多图像正在创建(如sudo docker images中所示),并在stackoverflow中的某处找到定期运行sudo docker rmi $(sudo docker images -q)以删除所有图像。为什么要创建这么多图像?我的配置有问题吗?

泊坞窗,compose.yml

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是

FROM nginx:alpine

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

nodejs dockerfile是

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

docker docker-compose dockerfile
2个回答
0
投票

图像是不可变的,因此您所做的任何更改都会导致创建新图像。由于compose文件指定了build命令,因此在启动容器时它将重新运行build命令。如果您使用COPYADD包含的任何文件发生更改,则不再使用现有的图像缓存,它将构建新图像而不删除旧图像。

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

COPY . /usr/src/app

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


0
投票

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

如果你想确保只保留你需要的那个(不必每次都重建所有东西);简单地做(如I detail here):

docker image prune
© www.soinside.com 2019 - 2024. All rights reserved.