在 Docker 个容器中坚持 Symfony 升级

Persist Symfony upgrade in Docker container

我有一个基于 PHP 的 Docker 容器,其中安装了 Composer 和 Symfony。但每次我启动该容器时,都会出现一条来自 Symfony 的消息,建议下载并安装最新版本(并激活 TLS),我会这样做(两者)。所以我认为升级不会持续,我该如何解决这个问题? (提前致谢)

谢谢大家的回答。 docker-composer.yamlphp/Dockerfile 由法语教程视频制作,由于Youtube 评论部分指出的改进:该视频名为“Un environnement de développement Symfony 5 avec Docker et Docker-compose”,来自 Yoandev Co。这是docker-compose.yaml :

version: "3.8"
services:

  db:
    image: mariadb
    container_name: db_SF_tuto_2
    restart: always
    volumes:
      - db-data2:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    networks:
      - dev2

  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin_SF_tuto_2
    restart: always
    depends_on:
      - db
    ports:
      - 8090:80
    environment:
      PMA_HOST: db
    networks:
      - dev2

  maildev:
    image: maildev/maildev
    container_name: maildev_SF_tuto_2
    command: bin/maildev --web 80 --smtp 25 --hide-extensions STARTTLS
    ports:
      - "8091:80"
    restart: always
    networks:
      - dev2

  www:
    build: php
    container_name: www_SF_tuto_2
    ports:
      - "8742:8000"
    volumes:
      - ./php/vhosts:/etc/apache2/sites-enabled
      - ./:/var/www
    restart: always
    networks:
        - dev2

networks:
  dev2:

volumes:
  db-data2:

…和php/Dockerfile

FROM php:7.4-apache

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
\
    && apt-get update \
    && apt-get install -y --no-install-recommends \
       locales apt-utils git libicu-dev g++ libpng-dev libxml2-dev libzip-dev libonig-dev libxslt-dev unzip \
\
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
    && echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen \
    && locale-gen \
\
    && curl -sS https://getcomposer.org/installer | php -- \
    && mv composer.phar /usr/local/bin/composer \
\
    &&  curl -sS https://get.symfony.com/cli/installer | bash \
    &&  mv /root/.symfony/bin/symfony /usr/local/bin \
\
    && docker-php-ext-configure \
           intl \
    && docker-php-ext-install \
           pdo_mysql gd opcache intl zip calendar xsl \
\
    && pecl install apcu && docker-php-ext-enable apcu

WORKDIR /var/www/

如您所见,容器存储是临时的,当容器被移除时,其中所做的任何更改都将被丢弃。请注意,您可以 停止 一个 运行 容器,并且在您下次启动它时更改仍然存在,但是 docker-compose down 确实会删除它,所以每次您正在从映像重新加载您的 symfony 二进制文件。

如果您希望更新持续存在,您必须创建一个 volume

但是,由于您当前的安装目录已经包含基本映像中的二进制文件,我建议安装到不同的目录并挂载它。

在您的 Dockerfile 中,更改安装目标。由于它是一个新目录,您需要将其添加到当前 $PATH 以便可以执行工具。

FROM php:7.4-apache

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
\
    && apt-get update \
    && apt-get install -y --no-install-recommends \
       locales apt-utils git libicu-dev g++ libpng-dev libxml2-dev libzip-dev libonig-dev libxslt-dev unzip \
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
    && echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen \
    && locale-gen \
\
    && mkdir /opt/bin -p \
    && curl -sS https://getcomposer.org/installer | php -- --install-dir /opt/bin --filename composer \
    && curl -sS https://get.symfony.com/cli/installer | bash -s - --install-dir /opt/bin \
\
    && docker-php-ext-configure \
           intl \
    && docker-php-ext-install \
           pdo_mysql gd opcache intl zip calendar xsl \
\
    && pecl install apcu && docker-php-ext-enable apcu

ENV PATH /opt/bin:$PATH

WORKDIR /var/www/

现在指定在 docker-compose.yml 文件中映射卷的位置:

  www:
    # ...
    volumes:
      # Specify the mount point. 
      # If you use short syntax here, a volume will be created every restart.
      - phptools:/opt/bin

volumes:
  # Declare a named volume so it can be remounted
  phptools:

运行 docker-compose builddocker-compose up.