Install Drupal with Docker Compose

Updated by Linode Written by Nathan Melehan

Contribute on GitHub

Report an Issue | View File | Edit File

What Are Docker and Docker Compose?

Docker is a system that provides pre-configured, self-contained applications, frameworks, and software stacks, such as WordPress, Golang, or LAMP. Even entire Linux distributions can be run in Docker. When deployed, these software packages are referred to as containers. Docker also allows you to create your own containers that include any custom software you’d like.

Docker Compose is a complementary system which helps you link together individual Docker containers so they can work together. This guide walks through the deployment of a Drupal container and another PostgreSQL container that Drupal will use to store its data. Docker Compose will facilitate the networking between them.

Containers for Drupal and PostgreSQL are available from Docker Hub in the form of images. A Docker image is a static snapshot of a container which is used to create new container instances. Docker Hub is an official repository where individuals and organizations can upload Docker images for public consumption.

Why Use Docker to Run Drupal?

Using the Drupal and PostgreSQL images from Docker Hub offers the following benefits:

  • The configuration of the software has been done for you, which means that you don’t need to follow a step-by-step process for each application to get them running on your system.
  • Updating your software is as simple as downloading the latest images from Docker Hub.
  • Images and containers are self-contained, which means that they are easy to clean up if you decide to remove them.

Installation

Install Docker

These steps install Docker Community Edition (CE) using the official Ubuntu repositories. To install on another distribution, see the official installation page.

  1. Remove any older installations of Docker that may be on your system:

    sudo apt remove docker docker-engine docker.io
    
  2. Make sure you have the necessary packages to allow the use of Docker’s repository:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
    
  3. Add Docker’s GPG key:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
  4. Verify the fingerprint of the GPG key:

    sudo apt-key fingerprint 0EBFCD88
    

    You should see output similar to the following:

    pub   4096R/0EBFCD88 2017-02-22
          Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid                  Docker Release (CE deb) <docker@docker.com>
    sub   4096R/F273FCD8 2017-02-22
    
  5. Add the stable Docker repository:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
  6. Update your package index and install Docker CE:

    sudo apt update
    sudo apt install docker-ce
    
  7. Add your limited Linux user account to the docker group:

    sudo usermod -aG docker exampleuser
    

    You will need to restart your shell session for this change to take effect.

  8. Check that the installation was successful by running the built-in “Hello World” program:

    docker run hello-world
    

Install Docker Compose

  1. Download the latest version of Docker Compose. Check the releases page and replace 1.21.2 in the command below with the version tagged as Latest release:

    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  2. Set file permissions:

    sudo chmod +x /usr/local/bin/docker-compose
    

Set Up Drupal

  1. Create a new directory in your home folder called my_drupal and cd into it:

    mkdir ~/my_drupal/
    cd ~/my_drupal/
    
  2. Create a file named docker-compose.yml in this folder and add the following contents. Set your own password for the POSTGRES_PASSWORD option.

    docker-compose.yml
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    version: '3.3'
    
    services:
      drupal:
        image: drupal:latest
        ports:
          - 80:80
        volumes:
          - drupal_modules:/var/www/html/modules
          - drupal_profiles:/var/www/html/profiles
          - drupal_themes:/var/www/html/themes
          - drupal_sites:/var/www/html/sites
        restart: always
    
      postgres:
        image: postgres:10
        environment:
          POSTGRES_PASSWORD: your_postgres_password
        volumes:
            - db_data:/var/lib/postgresql/data
        restart: always
    
    volumes:
      drupal_modules:
      drupal_profiles:
      drupal_themes:
      drupal_sites:
      db_data:
  3. From the my_drupal directory, start your Docker containers:

    docker-compose up -d
    
  4. The Docker containers will take a minute or two to start up Drupal and PostgreSQL. Afterwards, you can visit your Linode’s IP address in your web browser and you should be directed to the Drupal setup form.

    Drupal setup screen in the web browser - 'Choose language' page

  5. On the Set up database page, select PostgreSQL as the Database type and enter the following values:

    • Database name: postgres

    • Database username: postgres

    • Database password: The password you set in the docker-compose.yml file

    • Host (under Advanced Options): postgres

    Drupal setup screen in the web browser - 'Set up database' page

  6. Complete the other screens in the setup guide. When creating your Drupal user, be sure to enter a password that is different from your PostgreSQL password.

Usage and Maintenance

You do not need to manually start your containers if you reboot your Linode, because the option restart: always was assigned to your services in your docker-compose.yml file. This option tells Docker Compose to automatically start your services when the server boots.

To stop your Drupal application:

cd ~/my_drupal/
docker-compose stop

This will stop the running Drupal and PostgreSQL containers, but will not remove them.

To restart your Drupal application:

cd ~/my_drupal/
docker-compose start

To stop and remove containers, networks and images created by the docker-compose.yml file:

cd ~/my_drupal/
docker-compose down

When a Docker container is taken down, it is also deleted; this is how Docker is designed to work. However, your Drupal files and data will be preserved, as the docker-compose.yml file was configured to create persistent volumes for that data.

If you want to remove this data and start over with your Drupal site, you can add the --volumes flag to the previous command. This will permanently delete the Drupal customizations you’ve made so far.

docker-compose down --volumes

Update Drupal

The docker-compose.yml specifies the latest version of the Drupal image, so it’s easy to update your Drupal version:

docker-compose down
docker-compose pull && docker-compose up -d

Next Steps

More extensive documentation on Docker is available in the Containers section of the Linode Guides & Tutorials site.

More Information

You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

Join our Community

Find answers, ask questions, and help others.

comments powered by Disqus

This guide is published under a CC BY-ND 4.0 license.