Setting up a drupal site on docker
This is moby dock
Content off this presentation
- What is Docker?
- The reasons to use (or not use) Docker
- Setting up a site in Docker
- Usefull commands
- Live demo
What is Docker?
Docker is a tool designed to make it easier to create, deploy and run applications (in our case web applications) by using containers.
It's a bit like a virtual machine, but for you don't need to create a whole virtual operating system, and docker does not require the same memory usage as a complete virtual machine.
The reasons to use (or not use) Docker
The reasons to use it
-
New employees don't need to install a complete local environment.
- No more welcome to Dropsolid, your first day will be installing your local environment
-
Everyone has the same version off OS, mysql, php, ...
- Im' the only one on windows/linux, how can I install this?
- But I can't upgrade my php to version 7, I need version 5 for ...
- So it works on my environment, but not on yours?
-
Once a project is done, you can delete it very quick
- No more deleting files, database, solr, other leftover things
- You've bought a new laptop, no more losing time setting up everything.
The reasons not to use it
- Not good for production (less stable)
- Docker doesn't work well with mysql dumps
- At the moment not possible to use with local environment
- First setup is complex?
Setting up a site in Docker
- Installing docker
- Dockerfile
- docker-compose.yml
Download and install Docker
Dockerfile
Creates an image (a filesystem and parameters to use at runtime), this should never change.
Allways named Dockerfile, with capital.
Most common file structure.
Dockerfile
# The base image to start from, can be found on hub.docker.com
FROM php:apache
# Setup variables that can be used in the Dockerfile, and can be changed in the docker-compose.yml
ENV DRUPAL_VERSION 8.2.6
ENV DRUPAL_MD5 57526a827771ea8a06db1792f1602a85
# Execute commands, here it's installing some things
RUN apt-get update && apt-get install -yq \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
libicu-dev
RUN docker-php-ext-install gd json intl pdo pdo_mysql mbstring
# Change the current directory
WORKDIR /var/www/html
# We download the drupal code. and execute it
RUN curl -fSL "https://ftp.drupal.org/files/projects/drupal-${DRUPAL_VERSION}.tar.gz" -o drupal.tar.gz \
&& echo "${DRUPAL_MD5} *drupal.tar.gz" | md5sum -c - \
&& tar -xz --strip-components=1 -f drupal.tar.gz \
&& rm drupal.tar.gz \
&& chown -R www-data:www-data sites modules themes \
dockercompose.yml
Describes a container (running instance of an image) in its running state.
version: '2'
services:
web:
build: .docker/web
ports:
- "80:80"
volumes:
- ./docroot:/var/www/html
drush:
image: drush/drush
volumes_from:
- web
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=demo
- MYSQL_USER=demo
- MYSQL_PASSWORD=demo204125
ports:
- "3306:3306"
version: '2'
services:
web:
build: .docker/web
ports:
- "80:80"
volumes:
- ./docroot:/var/www/html
drush:
image: drush/drush
volumes_from:
- web
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=demo
- MYSQL_USER=demo
- MYSQL_PASSWORD=demo204125
ports:
- "3306:3306"
This is one container
version: '2'
services:
web:
build: .docker/web
ports:
- "80:80"
volumes:
- ./docroot:/var/www/html
drush:
image: drush/drush
volumes_from:
- web
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=demo
- MYSQL_USER=demo
- MYSQL_PASSWORD=demo204125
ports:
- "3306:3306"
Use image from dockerFile
Ports to open from container to local system
Mount the directory /var/www/html to your
pc in the docroot folder.
Use image from hub.docker.com
Use the same volumes as the web container
Overwrite the ENV variables from the Dockerfile
Usefull commands
- "docker-compose build" to create an image from a Dockerfile
- "docker-compose up -d" run the docker-compose.yml file to run your environment, -d is to run in the background
- "docker ps" shows all the running containers on your system
- "docker-compose ps" shows the containers for the current compose file
- "docker-compose run drush" execute drush
- "docker-compose run console" execute drupal console
Removing docker instances
Docker-compose kill *instancename*
Docker rm *instancename*
You can find the instancename with ps.
LIVE DEMO TIME
Setting up a drupal site on docker
By Brent Gees
Setting up a drupal site on docker
- 1,189