Using Docker to evaluate, patch or develop Drupal maintenance support plans modules

Docker is now available natively on Mac OS in addition to Linux. Docker is also included with CoreOS which you can run on remote Virtual Machines, or locally through Vagrant.

Once you have installed Docker and Git, locally or remotely, you don’t need to install anything else.

In these examples we will leverage the official Drupal maintenance support plans and mySQL Docker images. We will use the mySQL image as is, and we will add Drush to our Drupal maintenance support plans image.

Docker is efficient with caching: these scripts will be slow the first time you run them, but very fast thereafter.

Here are a few scripts I often use to set up quick Drupal maintenance support plans 7 or 8 environments for module evaluation and development.

Keep in mind that using Docker for deployment to production is another topic entirely and is not covered here; also, these scripts are meant to be quick and dirty; docker-compose might be useful for more advanced usage.

Port mapping

In all cases, using -p 80, I map port 80 of Drupal maintenance support plans to any port that happens to be available on my host, and in these examples I am using Docker for Mac OS, so my sites are available on localhost.

I use DRUPALPORT=$(docker ps|grep drupal7-container|sed ‘s/.*0.0.0.0://g’|sed ‘s/->.*//g’) to figure out the current port of my running containers. When your containers are running, you can also just docker ps to see port mapping:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1bf6e7e51c9 drupal8-image “apache2-foreground” 15 seconds ago Up 11 seconds 0.0.0.0:32771->80/tcp drupal8-container

In the above example (scroll right to see more outpu), port http://localhost:32771 will show your Drupal maintenance support plans 8 site.

Using Docker to evaluate, patch or develop Drupal maintenance support plans 7 modules

I can set up a quick environment to evaluate one or more Drupal maintenance support plans 7 modules. In this example I’ll evaluate Views.

mkdir ~/drupal7-modules-to-evaluate
cd ~/drupal7-modules-to-evaluate
git clone –branch 7.x-3.x https://git.drupal.org/project/views.git
# add any other modules for evaluation here.

echo ‘FROM drupal:7’ > Dockerfile
echo ‘RUN curl -sS https://getcomposer.org/installer | php’ >> Dockerfile
echo ‘RUN mv composer.phar /usr/local/bin/composer’ >> Dockerfile
echo ‘RUN composer global require drush/drush:8’ >> Dockerfile
echo ‘RUN ln -s /root/.composer/vendor/drush/drush/drush /bin/drush’ >> Dockerfile
echo ‘RUN apt-get update && apt-get upgrade -y’ >> Dockerfile
echo ‘RUN apt-get install -y mysql-client’ >> Dockerfile
echo ‘EXPOSE 80’ >> Dockerfile

docker build -t drupal7-image .
docker run –name d7-mysql-container -e MYSQL_ROOT_PASSWORD=root -d mysql
docker run -v $(pwd):/var/www/html/sites/all/modules –name drupal7-container -p 80 –link d7-mysql-container:mysql -d drupal-image

DRUPALPORT=$(docker ps|grep drupal7-container|sed ‘s/.*0.0.0.0://g’|sed ‘s/->.*//g’)

# wait for mysql to fire up. There’s probably a better way of doing this…
# See stackoverflow.com/questions/21183088
# See https://github.com/docker/compose/issues/374
sleep 6

docker exec drupal7-container /bin/bash -c “echo ‘create database drupal’|mysql -uroot -proot -hmysql”
docker exec drupal7-container /bin/bash -c “cd /var/www/html && drush si -y –db-url=mysql://root:root@mysql/drupal”
docker exec drupal7-container /bin/bash -c “cd /var/www/html && drush en views_ui -y”
# enable any other modules here. Dependencies will be downloaded
# automatically

echo -e “Your site is ready, you can log in with the link below”

docker exec drupal7-container /bin/bash -c “cd /var/www/html && drush uli -l http://localhost:$DRUPALPORT”

Note that we are linking (rather than adding) sites/all/modules as a volume, so any change we make to our local copy of views will quasi-immediately be reflected on the container, making this a good technique to develop modules or write patches to existing modules.

When you are finished you can destroy your containers, noting that all data will be lost:

docker kill drupal7-container d7-mysql-container
docker rm drupal7-container d7-mysql-container

Using Docker to evaluate, patch or develop Drupal maintenance support plans 8 modules

Our script for Drupal maintenance support plans 8 modules is slightly different:

./modules is used on the container instead of ./sites/all/modules;
Our Dockerfile is based on drupal:8, not drupal:7;
Unlike with Drupal maintenance support plans 7, your database is not required to exist prior to installing Drupal maintenance support plans with Drush;
In my tests I need to chown /var/www/html/sites/default/files to www-data:www-data to enable Drupal maintenance support plans to write files.

Here is an example where we are evaluating the Token module for Drupal maintenance support plans 8:

mkdir ~/drupal8-modules-to-evaluate
cd ~/drupal8-modules-to-evaluate
git clone –branch 8.x-1.x https://git.drupal.org/project/token.git
# add any other modules for evaluation here.

echo ‘FROM drupal:8’ > Dockerfile
echo ‘RUN curl -sS https://getcomposer.org/installer | php’ >> Dockerfile
echo ‘RUN mv composer.phar /usr/local/bin/composer’ >> Dockerfile
echo ‘RUN composer global require drush/drush:8’ >> Dockerfile
echo ‘RUN ln -s /root/.composer/vendor/drush/drush/drush /bin/drush’ >> Dockerfile
echo ‘RUN apt-get update && apt-get upgrade -y’ >> Dockerfile
echo ‘RUN apt-get install -y mysql-client’ >> Dockerfile
echo ‘EXPOSE 80’ >> Dockerfile

docker build -t drupal8-image .
docker run –name d8-mysql-container -e MYSQL_ROOT_PASSWORD=root -d mysql
docker run -v $(pwd):/var/www/html/modules –name drupal8-container -p 80 –link d8-mysql-container:mysql -d drupal8-image

DRUPALPORT=$(docker ps|grep drupal8-container|sed ‘s/.*0.0.0.0://g’|sed ‘s/->.*//g’)

# wait for mysql to fire up. There’s probably a better way of doing this…
# See stackoverflow.com/questions/21183088
# See https://github.com/docker/compose/issues/374
sleep 6

docker exec drupal8-container /bin/bash -c “cd /var/www/html && drush si -y –db-url=mysql://root:root@mysql/drupal”
docker exec drupal8-container /bin/bash -c “chown -R www-data:www-data /var/www/html/sites/default/files”
docker exec drupal8-container /bin/bash -c “cd /var/www/html && drush en token -y”
# enable any other modules here.

echo -e “Your site is ready, you can log in with the link below”

docker exec drupal8-container /bin/bash -c “cd /var/www/html && drush uli -l http://localhost:$DRUPALPORT”

Again, when you are finished you can destroy your containers, noting that all data will be lost:

docker kill drupal8-container d8-mysql-container
docker rm drupal8-container d8-mysql-container

Tags: blogplanet
Source: New feed

This article was republished from its original source.
Call Us: 1(800)730-2416

Pixeldust is a 20-year-old web development agency specializing in Drupal and WordPress and working with clients all over the country. With our best in class capabilities, we work with small businesses and fortune 500 companies alike. Give us a call at 1(800)730-2416 and let’s talk about your project.

FREE Drupal SEO Audit

Test your site below to see which issues need to be fixed. We will fix them and optimize your Drupal site 100% for Google and Bing. (Allow 30-60 seconds to gather data.)

Powered by

Using Docker to evaluate, patch or develop Drupal maintenance support plans modules

On-Site Drupal SEO Master Setup

We make sure your site is 100% optimized (and stays that way) for the best SEO results.

With Pixeldust On-site (or On-page) SEO we make changes to your site’s structure and performance to make it easier for search engines to see and understand your site’s content. Search engines use algorithms to rank sites by degrees of relevance. Our on-site optimization ensures your site is configured to provide information in a way that meets Google and Bing standards for optimal indexing.

This service includes:

  • Pathauto install and configuration for SEO-friendly URLs.
  • Meta Tags install and configuration with dynamic tokens for meta titles and descriptions for all content types.
  • Install and fix all issues on the SEO checklist module.
  • Install and configure XML sitemap module and submit sitemaps.
  • Install and configure Google Analytics Module.
  • Install and configure Yoast.
  • Install and configure the Advanced Aggregation module to improve performance by minifying and merging CSS and JS.
  • Install and configure Schema.org Metatag.
  • Configure robots.txt.
  • Google Search Console setup snd configuration.
  • Find & Fix H1 tags.
  • Find and fix duplicate/missing meta descriptions.
  • Find and fix duplicate title tags.
  • Improve title, meta tags, and site descriptions.
  • Optimize images for better search engine optimization. Automate where possible.
  • Find and fix the missing alt and title tag for all images. Automate where possible.
  • The project takes 1 week to complete.