如何删除生产和复制的Docker卷?

如何删除生产和复制的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

我有一个简单的Laravel应用程序,Nginx、PHP和MySQL都在自己的容器中。它在我的开发环境中工作得很好,但对于生产环境,我需要删除绑定卷并将内容复制到映像本身。但是我该怎么做呢

我需要单独的
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的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)


来源
1)仅为产品复制数据 只有在使用目标“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的设置肯定不需要它(事实上,它有可能在生产系统上泄漏匿名卷的副作用)


来源

在你的
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文件,但在这一点上,这完全是我的推测。