【问题标题】:docker-compose and Dockerfile do not install drupaldocker-compose 和 Dockerfile 不安装 drupal
【发布时间】:2020-11-11 18:02:57
【问题描述】:

docker 新手,我想用 docker 安装 Drupal 7,以镜像我们的生产服务器环境。 (我们正准备升级到 Drupal 8 - 与这里的这个问题无关。)当我运行 docker-compose docker 容器并创建了一个 app 文件夹,但 app/ 内没有任何内容。然后我在根目录中放置了一个composer.json来运行composer并安装drupal 7。这很有效,但我认为docker-compose的重点是它会安装包括drupal 7在内的所有东西。 我做错了什么?

跟进问题: 由于我试图在生产服务器环境中镜像drupal站点,所以我需要安装drupal 7.69版本,但是这个版本没有作为一个包在Docker Hub上列出。所以,我不能安装那个特定的版本?

Docker 19.03.13
MacOS 10.14.6
LAMP
MySQL databases not in volume, but served from Mac development environment

目录结构:

root
|--apache-drupal.conf
|--docker-compose.yml
|--Dockerfile
|--composer.json 

Dockerfile

FROM drupal:7.73-apache

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y \
    automake \
    bsdmainutils \
    build-essential \
    ssh \
    unzip \
    curl \
    libopenmpi-dev \
    openmpi-bin \
    git \
    default-mysql-client \
    vim \
    wget \
    zlib1g-dev

# Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    mv composer.phar /usr/local/bin/composer && \
    php -r "unlink('composer-setup.php');" && \
    ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush

RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini && \
    sed -i -e "s/^ *memory_limit.*/memory_limit = -1/g" /usr/local/etc/php/php.ini && \
    sed -i -e "s/^ *upload_max_filesize.*/upload_max_filesize = 30M/g" /usr/local/etc/php/php.ini

# Install Drush
RUN composer global require drush/drush:8.2 && \
    composer global update

#RUN wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/download/0.4.2/drush.phar && \
#   chmod +x drush.phar && \
#   mv drush.phar /usr/local/bin/drush

# Clean repository
RUN apt-get clean && rm -rf /var/www/html/* && rm -rf /var/lib/apt/lists/*

COPY apache-drupal.conf /etc/apache2/sites-enabled/000-default.conf

WORKDIR /app

docker-compose.yml

version: '2'
services:
  drupal:
    image: userID/website_d7:1.0
    container_name: website_d7
    build: .
    ports:
      - "8033:80"
    extra_hosts:
      - "test.docker:127.0.0.1"
    environment:
      MYSQL_USER: user
      MYSQL_PASS: pass
      MYSQL_DATABASE: website_d7
    volumes:
      - ./app:/app:cached
    restart: always

运行 docker 容器:

docker-compose build
docker-compose up

【问题讨论】:

    标签: docker docker-compose drupal-7 dockerfile


    【解决方案1】:

    我个人从未从 docker / docker-compose 安装过 drupal;我一直使用 composer 来做这件事,我认为这更好,因为您可以在 composer.json 中管理您想要的 drupal 版本和您需要的模块。我只使用 docker / docker-compose 来构建环境和容器(数据库/前端/后端/缓存管理器)。

    【讨论】:

    • 谢谢。您仍然将 Drupal 包(版本)放在 Dockerfile 中还是没有必要?您只是在创建 PHP-Apache(或等效)容器吗?
    • 我只安装了一个 PHP-nginx 容器(+其他容器,例如 mariadb、phpmyadmin、varnish 或 memcached)。这样做时不需要将drupal包放在dockerfile中,只需在composer.json中。
    【解决方案2】:

    volumes: 下,您将本地./app 文件夹安装到容器中,覆盖容器内的/app。因此,如果一开始没有任何内容,那么它不会被您创建的 docker 容器填充。

    Drupal Docker Hub page(在卷标题下)他们谈到为特定文件夹添加 4 个卷挂载,例如:

    volumes:
      - /path/on/host/modules:/var/www/html/modules
      - /path/on/host/profiles:/var/www/html/profiles
      - /path/on/host/sites:/var/www/html/sites
      - /path/on/host/themes:/var/www/html/themes
    

    如果您将所有这些都放入本地的 ./app 文件夹中,您最终可能会得到如下结果:

    volumes:
      - ./app/modules:/var/www/html/modules
      - ./app/profiles:/var/www/html/profiles
      - ./app/sites:/var/www/html/sites
      - ./app/themes:/var/www/html/themes
    

    一般来说,我喜欢使用 docker 来容器化环境/运行时/第三方系统(例如 Drupal,或者在我的情况下更常见的是 WordPress),然后我为特定文件夹设置类似于上面的卷项目(如主题、插件等)。就我而言,我通常做 WordPress 开发,所以我只有一个 ./wp-content:/var/www/html/wp-content 的挂载

    RE:您的后续问题 - 如果您查看同一 docker hub 页面(或 search for 7.69 on there)上的“标签”标签,您会看到它实际上已列在此处,因此应该可用。

    【讨论】:

    • 很棒的信息,谢谢!您是否必须将这些卷链接起来(就像使用 mysql 卷一样)还是没有必要?另外,将这些文件夹放在这些卷中比使用 composer 有什么好处?
    • 您没有“有”来创建它们。添加“卷”只会在您的主机和容器之间创建一个链接。在这种情况下,链接相对于项目文件夹/撰写文件的文件夹。或者,您可以执行- db_data:/var/lib/postgresql/data 之类的操作,同时在撰写文件的末尾定义volumes:\n db_data:,这将在系统/全局 docker 卷目录中创建一个名为“db_data”的卷。我通常将第一种类型用于项目文件,后者用于保存数据库数据等内容(否则您会在启动/部署之间丢失数据)
    • 我还是没看懂你最后提到的部分:otherwise you loose data between starts / deploys。什么开始?如果我不使用多个卷,而只使用一个卷(例如 drupal),losing data 是否会成为问题?
    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多