我是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
。
图像是不可变的,因此您所做的任何更改都会导致创建新图像。由于compose文件指定了build命令,因此在启动容器时它将重新运行build命令。如果您使用COPY
或ADD
包含的任何文件发生更改,则不再使用现有的图像缓存,它将构建新图像而不删除旧图像。
请注意,我建议在撰写文件中命名您的图像,以便清楚正在重建哪个图像。您可以将构建构建输出观察到第一步,即不使用缓存进行报告以查看正在发生的变化。如果我猜测,破坏缓存并导致新图像的行是nodejs中的这一行:
COPY . /usr/src/app
如果容器中不需要更改文件并导致重建,则使用.dockerignore
文件排除不必要的文件。