drush を使用します。 drupalコンテナで実行する必要があります。 drush docker repo もあります。しかし、drupalコンテナ。これは私の最初のドッカーであり、drupalプロジェクトなので、完全に間違っているかもしれません。
このdrupal docker image)でdrushを使用するにはどうすればよいですか? https://hub.docker.com/_/drupal/ dockerで管理できますか?作成しますか?drupalコンテナを拡張しますか?
これは私の docker-compose.yml
:
mysql:
image: mysql:5.5
ports:
- "3306:3306"
environment:
- MYSQL_USER=xxxxx
- MYSQL_PASSWORD=xxxxxx
- MYSQL_ROOT_PASSWORD=xxxxxx
- MYSQL_DATABASE=xxxxxx
drupal:
image: drupal:8.0.4
links:
- mysql
ports:
- "8080:80"
これを機能させるのに時間がかかりすぎました。これが私の発見です。
OPと同様に、drushイメージをローカルDockerネットワークで動作させることはなかったため、drushをcomposer with drupal image(see以下のDockerfile)。
これは多少機能します。コンテナで実行すると、drushステータスを実行できますが、mysqlサーバーに接続できません。これには2つの理由があります。
パッケージmysql-clientは、データベースにリモートで接続するために必要です(これをローカルDockerネットワークで実行しているため)。
Mysqlホスト名は、docker-composeファイル(またはdocker runコマンド)で明示的に設定する必要があります。
これは私のDockerfileです:
FROM drupal:8.3.7-Apache
# Install packages
RUN rm /bin/sh && ln -s /bin/bash /bin/sh && \
apt-get update && apt-get install --no-install-recommends -y \
curl \
wget \
vim \
git \
unzip \
mysql-client
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php && \
mv composer.phar /usr/local/bin/composer && \
ln -s /root/.composer/vendor/bin/drush /usr/local/bin/drush
# Install Drush
RUN composer global require drush/drush && \
composer global update
# Clean repository
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
重要なパッケージはcurl
(明らかに)とmysql-client
です。
そして、これはdocker-compose.ymlの関連部分です:
version: '3.3'
services:
drupal:
image: drupal
build: ./docker/drupal
env_file:
- ./docker/environment.env
ports:
- "8080:80"
depends_on:
- mysql
restart: always
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
volumes:
- ./docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
env_file:
- ./docker/intervention/environment.env
ports:
- "8080:80"
depends_on:
- mysql
restart: always
mysql:
image: mysql
build: ./docker/mysql
env_file:
- ./docker/environment.env
hostname: mysql
ports:
- 3306:3306
volumes:
- mysql-data-d8:/var/lib/mysql
restart: always
volumes:
mysql-data-d8:
上記の2番目の問題は、Drushがsettings.phpの設定を使用してmysqlに接続するため、特に悪質です。しかし、databases配列の「Host」キーは異なる方法で解釈されますbu drupalおよびdrushどうやら。ここにsettings.php
の関連セクションがあります。
$databases = array (
'default' => array (
'default' => array (
'database' => $envs['MYSQL_DATABASE'] ?? '',
'username' => $envs['MYSQL_USER'] ?? '',
'password' => $envs['MYSQL_PASSWORD'] ?? '',
'Host' => 'mysql',//php_sapi_name() === 'cli' ? 'a8597b38be21' : 'mysql',
'port' => '3306',
'driver' => 'mysql',
'prefix' => 'drupal_',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
),
),
);
'Host' => 'mysql'
の後のコメントアウトされた行は、別のSO回答から取られた以前の試みであり、問題を示しています。他のdrupal使用代替ホスト名は、実行中のコンテナーのハッシュIDであり、sqlを実行することで見つけることができます(たとえば、phpmyadminから):
SHOW VARIABLES WHERE Variable_name = 'hostname'
(形式 this )
この値はコンテナが更新されるたびに変更されるため、永続化するために、ホスト名は上記のdocker-compose.yml
に明示的に記述されています。
編集:私はホストに小さなプロジェクトを作成しましたdrupal + drush + phpmyadmin開発環境これに基づいて: https://github.com/glaux/drupal8docker
いつものようにDockerでは、drushを使用するための多くのオプションがあります。ただし、drush to the access to the database(eg mysql)のように、Drupal上のmysqlコンテナーから次のようなボリュームが必要です。
version: '2'
services:
drupal:
image: drupal:8.0.4-Apache
volumes_from:
- mysql
mysql:
image: mysql
volumes:
- /var/lib/mysql
- /usr/bin
...
ここでは最も一般的です。
1)ローカルdrushをDrupalコンテナにマウントします。
version: '2'
services:
drupal:
image: drupal:8.0.4-Apache
volumes:
# Mount local drush to your container.
- /usr/local/bin/drush:/drush/drush
2)drushのデータのみのDockerイメージを作成し、実行可能ファイルをDrupalコンテナーにボリュームします。 https://github.com/RobLoach/drush-docker/issues/32#issuecomment-222321265 の例を参照してください。
3)実行後、DrushをDrupalコンテナーにインストールします。例えば:
$ docker exec -ti <MY_DRUPAL_CONTAINER> \
bash -c 'php -r "readfile('https://s3.amazonaws.com/files.drush.org/drush.phar');" \
> drush && chmod +x drush && mv drush /usr/local/bin'
4)Dockerイメージの作成(Dockerfileを使用)でDrupalにDrushをインストールします。例:
FROM drupal:8.0.4-Apache
MAINTAINER ...
RUN php -r "readfile('https://s3.amazonaws.com/files.drush.org/drush.phar');" > drush \
&& chmod +x drush \
&& mv drush /usr/local/bin
5)docker-compose.ymlを使用して、Drupalコンテナーにdrushを含む別のコンテナーおよびvolume itを使用します。例:
version: '2'
services:
drupal:
image: drupal:8.0.4-Apache
volumes_from:
- drush
drush:
image: drush/drush
volumes:
- /usr/local/bin/drush
- /usr/local/bin/composer
Drushを効果的に動作させるには、Drupalを実行しているコンテナー内から実行するほうがよいでしょう。そのためには、Dockerfileに1つのライナーを追加します。
# Set base Image/tag here.
FROM drupal:8-fpm
# Get a global installation of Drush on the web / drupal container
RUN php -r "readfile('http://files.drush.org/drush.phar');" > drush && chmod +x drush && mv drush /usr/bin/
実際に使用する場合は、コンテナーとホストの両方から(公開鍵SSHを介して)使用するための個別のDrushエイリアスを出荷することをお勧めします。例として、これらのエイリアスを見て、セットアップ全体を参照実装と見なしてください: https://github.com/srijanaravali/docker-blueprint/blob/master/docker-utils/drush /local.aliases.drushrc.php
Dockerfileに次のようなものを含めることで、これらのエイリアスをコンテナに転送できます。
# Push our aliases into the container ~/.drush
ADD /path/to/your/drush-aliases/* ~/.drush/
または-ホストとの共有制御の場合、それをdocker-compose.ymlのボリュームとしてマウントすることを検討できます。
volumes:
- ~/.drush/:/root/.drush/
これで、次のようにコンテナでDrushコマンドを実行できます:docker exec drush @alias <command>
。もちろん、エイリアスをbashして、キーボードに負荷をかけずに済みます。
または、代わりに出荷したSSHエイリアスを呼び出して、ホストからdrushを使用します-drush @alias-ssh <command>
https://github.com/wodby/docker4drupal のようなものを試してください。私にとっては、DockerでDrupalを開発することは非常に便利で柔軟なことです。
Drupal 8-Docker-Drushコンボのソリューションの1つは次のとおりです。
ステップ:〜/ .bashrcファイルに次のようにエイリアスを作成します:
alias dr5='docker-compose run php5 /root/.composer/vendor/bin/drush --root=/var/www/html/docroot';
このエイリアスではDocker composerを使用しますが、シンプルなDockerと同じです。DockerのどこにDrushがあり、Dockerのどこにコードベースがあるかを指定するphp5イメージでDrushコマンドを実行します。このようにして、次のように使用します。
dr5 cr
Cache rebuildコマンドの場合、ローカルコードディレクトリ。
2つのオプションがあると思います。drush/drush
コンテナを個別に作成し、共有保留ボリュームを使用して、drupalが使用するファイルにアクセスできるようにします。
または、drushとdrupalの両方を含む新しいイメージを作成することもできます。 https://docs.docker.com/engine/userguide/containers/dockerimages/ を参照してください
おそらく、drushイメージのDockerfileとdrupalイメージをガイダンスとして使用できます。
私が選択したのは、web
コンテナにcomposerをインストールすることです。
まず、composerをインストールしてから、目的のディレクトリにDrushを必要とします。
Dockerfileの例:
FROM php:7.1-Apache
RUN a2enmod rewrite
# Install dependencies
RUN apt-get update \
&& apt-get install -y git \
&& docker-php-ext-install pdo pdo_mysql \
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
RUN cd /var/www/html \
&& composer require drush/drush
Drushがプロジェクトのcomposer.json内ですでに依存関係にある場合は、composer install
それ。