docker compose和Dockerfile不安装drupal

docker compose和Dockerfile不安装drupal,docker,docker-compose,drupal-7,dockerfile,Docker,Docker Compose,Drupal 7,Dockerfile,docker新手,我想用docker安装Drupal 7,以镜像我们的生产服务器环境。(我们正准备升级到Drupal 8-与此问题无关。)当我运行docker compose时,docker容器会创建一个应用程序文件夹,但app/中没有任何内容。然后我在根目录中放置了一个composer.json来运行composer并安装drupal 7。这是可行的,但我认为docker compose的要点是它可以安装所有东西,包括drupal 7。 我做错了什么 跟进问题: 由于我试图在生产服务器环境中镜

docker新手,我想用docker安装Drupal 7,以镜像我们的生产服务器环境。(我们正准备升级到Drupal 8-与此问题无关。)当我运行docker compose时,docker容器会创建一个应用程序文件夹,但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;我总是使用composer来完成这项工作,我认为这是更好的,因为您可以在
composer.json
中管理所需的drupal版本和所需的模块。我只使用docker/docker compose构建环境和容器(数据库/前端/后端/缓存管理器)。

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

在卷标题下,他们讨论了为特定文件夹添加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


回复:您的后续问题-如果您查看同一docker hub页面(或)上的“标签”选项卡,您将看到它实际上列在那里,因此它应该是可用的。

非常好的信息,谢谢!您是否必须将这些卷链接起来(就像使用mysql卷一样),或者这不是必需的?另外,与使用composer相比,将这些文件夹放在这些卷中有什么好处?您不必“创建”它们。添加“卷”只会在主机和容器之间创建一个链接。在这种情况下,将链接相对于项目文件夹/组合文件的文件夹。或者,您可以执行类似于
-db\u data:/var/lib/postgresql/data
的操作,并在撰写文件的末尾定义
卷:\n db\u data:
,这将创建一个名为“db\u data”的卷,该卷位于system/global docker volumes目录中。我通常将第一种类型用于项目文件,而将第二种类型用于保存数据库数据(否则会在启动/部署之间丢失数据)我仍然不理解您在最后提到的部分:
否则会在启动/部署之间丢失数据。什么开始?如果我不使用多个卷,而只使用一个卷(例如drupal),则使用
docker compose up-d
时数据丢失是否是一个问题?谢谢。您是否仍然将Drupal包(版本)放在Dockerfile中,还是不需要?您只是在创建PHP Apache(或等效的)容器吗?我只安装了一个PHP nginx容器(其他容器,如mariadb、phpmyadmin、varnish或memcached)。这样做时,不需要将drupal包放在dockerfile中,只需要放在
composer.json
中。