gpt4 book ai didi

docker - 如何删除用于生产和复制的 Docker 卷?

转载 作者:行者123 更新时间:2023-12-02 19:52:51 25 4
gpt4 key购买 nike

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

我需要单独的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”进行构建时,才能使用多阶段构建来复制内容。

FROM php:7.2-fpm-alpine as base
RUN docker-php-ext-install pdo pdo_mysql
RUN chown -R www-data:www-data /var/www
RUN chmod 755 /var/www

FROM base as dev
VOLUME /var/www/html

FROM base as prod
COPY data /var/www/html
VOLUME /var/www/html

你的 Docker-compose.yml 得到一个新的 prod 行
php:
build:
context: .
dockerfile: php/Dockerfile
target: prod

container_name: phpcontainer
ports:
- "9000:9000"
networks:
- laranet

2)产品中没有绑定(bind)?

dev 的匿名卷会是一个有效的解决方案吗?例如通过 VOLUME /var/www/html 的定义您指定 /var/www/html 的内容路径应在容器启动时放入卷中。如果 docker-compose.yml 中没有指定卷,它将为您创建一个卷。甜吗?

边注

我不建议在开发和产品之间划分你的行为。

我建议您在整个阶段都使用卷。 prod 的唯一区别可能是您将内容复制到图像中 -> 在定义 VOLUME 之前,因为定义 VOLUME 会使文件夹在以下层中不可更改。

david-maze指出(见评论)

在你的 Dockerfile 中添加一个 VOLUME 只会产生令人困惑的副作用,我建议只有在你完全清楚它的含义时才这样做。 OP 的设置绝对不需要它(实际上有 在生产系统上泄漏匿名卷的可能副作用 )

来源
  • multi-stage build in docker compose?
  • https://docs.docker.com/engine/reference/builder/#volume
  • 关于docker - 如何删除用于生产和复制的 Docker 卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59443306/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com