Goal: This time imagine you're just wanting to learn Drupal's admin and GUI, or maybe you're a software tester and you need to test a new theme for Drupal. When configured properly, this will let you build a custom image and start everything with docker compose up
including storing important db and config data in volumes so the site will remember your changes across Compose restarts.
- Use the compose file you created in the last assignment (drupal and postgres) as a starting point.
- Let's pin image version from Docker Hub this time. It's always a good idea to do that so a new major version doesn't surprise you.
- First you need to build a custom Dockerfile in this directory,
FROM drupal:8.2
- Then RUN apt package manager command to install git:
apt-get update && apt-get install -y git
- Remember to cleanup after your apt install with
rm -rf /var/lib/apt/lists/*
and use\
and&&
properly. You can find examples of them in drupal official image. More on this below under Compose file. - Then change
WORKDIR /var/www/html/themes
- Then use git to clone the theme with:
RUN git clone --branch 8.x-3.x --single-branch --depth 1 https://git.drupal.org/project/bootstrap.git
- Combine that line with this line, as we need to change permissions on files and don't want to use another image layer to do that (it creates size bloat). This dupal container runs as www-data user but the build actually runs as root, so often we have to do things like
chown
to change file owners to the proper user:chown -R www-data:www-data bootstrap
. Remember the fist line needs a\
at end to signify the next line is included in the command, and at start of next line you should have&&
to signify "if first command succeeds then also run this command" - Then, just to be safe, change the working directory back to it's default (from drupal image) at
/var/www/html
- We're going to build a custom image in this compose file for drupal service. Use Compose file from previous assignment for Drupal to start with, and we'll add to it, as well as change image name.
- Rename image to
custom-drupal
as we want to make a new image based on the officialdrupal:8.2
. - We want to build the default Dockerfile in this directory by adding
build: .
to thedrupal
service. When we add a build + image value to a compose service, it knows to use the image name to write to in our image cache, rather then pull from Docker Hub. - For the
postgres:9.6
service, you need the same password as in previous assignment, but also add a volume fordrupal-data:/var/lib/postgresql/data
so the database will persist across Compose restarts.
- Start containers like before, configure Drupal web install like before.
- After website comes up, click on
Appearance
in top bar, and notice a new theme calledBootstrap
is there. That's the one we added with our custom Dockerfile. - Click
Install and set as default
. Then clickBack to site
(in top left) and the website interface should look different. You've successfully installed and activated a new theme in your own custom image without installing anything on your host other then Docker! - If you exit (ctrl-c) and then
docker-compose
down it will delete containers, but not the volumes, so on nextdocker-compose up
everything will be as it was. - To totally clean up volumes, add
-v
todown
command.