如何删除生产和复制的Docker卷?
我有一个简单的Laravel应用程序,Nginx、PHP和MySQL都在自己的容器中。它在我的开发环境中工作得很好,但对于生产环境,我需要删除绑定卷并将内容复制到映像本身。但是我该怎么做呢 我需要单独的如何删除生产和复制的Docker卷?,docker,docker-compose,dockerfile,containers,Docker,Docker Compose,Dockerfile,Containers,我有一个简单的Laravel应用程序,Nginx、PHP和MySQL都在自己的容器中。它在我的开发环境中工作得很好,但对于生产环境,我需要删除绑定卷并将内容复制到映像本身。但是我该怎么做呢 我需要单独的docker-compose-prod.yml文件吗?我如何删除用于生产的卷?在部署用于生产时,如何将源代码和配置复制到映像 这是我的docker compose.yml文件 version: '3' networks: laranet: services: nginx: im
docker-compose-prod.yml
文件吗?我如何删除用于生产的卷?在部署用于生产时,如何将源代码和配置复制到映像
这是我的docker compose.yml
文件
version: '3'
networks:
laranet:
services:
nginx:
image: nginx:stable-alpine
container_name: nginxcontainer
ports:
- "80:80"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laranet
mysql:
image: mysql:5.7.22
container_name: mysqlcontainer
ports:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql
networks:
- laranet
php:
build:
context: .
dockerfile: php/Dockerfile
container_name: phpcontainer
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
networks:
- laranet
这是我的php/Dockerfile
FROM php:7.2-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN chown -R www-data:www-data /var/www
RUN chmod 755 /var/www
1) 仅为prod复制数据
只有在使用目标“prod”生成时,才能使用多级生成来复制内容
您的Docker-compose.yml为prod获得了一条新的生产线
php:
build:
context: .
dockerfile: php/Dockerfile
target: prod
container_name: phpcontainer
ports:
- "9000:9000"
networks:
- laranet
2) prod中没有绑定? dev的匿名卷是有效的解决方案吗?e、 g.通过对
VOLUME/var/www/html
的定义,您指定/var/www/html
路径的内容应在容器启动时放入一个卷中。如果docker-compose.yml中未指定任何卷,它将为您创建一个卷。甜蜜的,对吧
旁注 我不建议将您的行为划分为dev和prod 我建议您在整个阶段使用卷。prod中唯一的区别可能是在定义卷之前将内容复制到图像->中,因为定义卷会使文件夹在以下层中不可更改 指出(见评论) 在Dockerfile中放入一个卷通常只会产生令人困惑的副作用,我建议只有在您完全清楚它的含义时才这样做。OP的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)
来源
php:
build:
context: .
dockerfile: php/Dockerfile
target: prod
container_name: phpcontainer
ports:
- "9000:9000"
networks:
- laranet
2) prod中没有绑定? dev的匿名卷是有效的解决方案吗?e、 g.通过对
VOLUME/var/www/html
的定义,您指定/var/www/html
路径的内容应在容器启动时放入一个卷中。如果docker-compose.yml中未指定任何卷,它将为您创建一个卷。甜蜜的,对吧
旁注 我不建议将您的行为划分为dev和prod 我建议您在整个阶段使用卷。prod中唯一的区别可能是在定义卷之前将内容复制到图像->中,因为定义卷会使文件夹在以下层中不可更改 指出(见评论) 在Dockerfile中放入一个卷通常只会产生令人困惑的副作用,我建议只有在您完全清楚它的含义时才这样做。OP的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)
来源
Dockerfile
中放一个卷
,通常只会产生令人困惑的副作用,我建议你只有在完全清楚这意味着什么的情况下才这样做。OP的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)。我还需要为nginx和php复制吗?还是只有php?嗨,Liga,这取决于您的用例。我可以在您的问题中看到,您也在为nginx使用绑定卷。因此,我假设您也需要nginx容器中的数据。您可以为nginx创建一个类似于php的dockerfile来归档相同的行为。但是->请记住david的评论,确保不要在您的prod环境中创建孤立的匿名卷。@ClemensKaserer您能解释一下,为什么我需要nginx和php中的数据吗?Hi Liga,不,基于可用信息,我无法解释为什么。您能解释一下docker-compose.yml中nginx卷/src:/var/www/html
和php卷/src:/var/www/html
背后的原因吗?它包括php和html文件吗?也许你只需要nginx中的html文件和php中的php文件,但在这一点上,这纯粹是我的猜测。在Dockerfile
中放置卷
通常只会产生令人困惑的副作用,我建议你只有在完全清楚它的含义的情况下才这样做。OP的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)。我还需要为nginx和php复制吗?还是只有php?嗨,Liga,这取决于您的用例。我可以在您的问题中看到,您也在为nginx使用绑定卷。因此,我假设您也需要nginx容器中的数据。您可以为nginx创建一个类似于php的dockerfile来归档相同的行为。但是->请记住david的评论,确保不要在您的prod环境中创建孤立的匿名卷。@ClemensKaserer您能解释一下,为什么我需要nginx和php中的数据吗?Hi Liga,不,基于可用信息,我无法解释为什么。您能解释一下docker-compose.yml中nginx卷/src:/var/www/html
和php卷/src:/var/www/html
背后的原因吗?它包括php和html文件吗?也许您只需要nginx中的html文件和php中的php文件,但在这一点上,这完全是我的推测。