docker compose和Dockerfile不安装drupal
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 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 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
中。