Este artigo terá na sua base o artigo que se encontra na ligação que se segue: https://drupal-up.com/blog/installing-drupal-8-help-composer-and-docker.

Ao que entendemos, do que tivemos oportunidade de ler, por ex. em https://www.drupal.org/docs/develop/using-composer/using-composer-with-…, o Drupal na sua versão 8.x bem como os seus módulos contribuídos encontram-se dependentes de outros programas (dependências) cuja gestão estará à responsabilidade do composer (Gestor de dependências para o PHP).

A ideia será a de instalar, localmente, com a ajuda do composer, o drupal 8.x e depois fazê-lo correr localmente com a ajuda do Docker, através da execução dos serviços necessários para o seu funcionamento, como a linguagem hospedeira, um servidor web e um gestor de base de dados em contentores.

Para a criação dos contentores utilizaremos o projeto docker4drupal (https://github.com/wodby/docker4drupal) cuja documentação pode ser consultada na ligação https://wodby.com/docs/stacks/drupal/local/.

Antes de iniciarmos a instalação propriamente dita temos que garantir que os pacotes seguintes se encontram instalados:
sudo apt update
sudo apt install curl php-cli php-mbstring git unzip php-mcrypt php-intl php-mysql php-curl php-gd php-soap php-xml php-zip -y

Para a instalação do composer executamos o código em baixo (https://getcomposer.org/download/) num terminal, com um utilizador sem direitos administrativos:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Se quisermos utilizar o composer globalmente temos que executar:
sudo mv composer.phar /usr/local/bin/composer

Para criar o novo projeto do drupal começamos por mudar para a pasta onde temos os projetos do drupal e executamos:
composer create-project drupal-composer/drupal-project:8.x-dev nome_projeto --stability dev --no-interaction

No próximo passo iremos clonar do GIT o projeto docker4drupal que nos permitirá, através da utilização de contentores no docker, criar a infraestrutura que utilizaremos para instalar, testar e desenvolver o nosso projeto do Drupal:
git clone https://github.com/wodby/docker4drupal.git drupal_docker_server

Seguidamente removemos a pasta .git e copiamos o conteúdo da pasta drupal_docker_server para a pasta nome_projeto:
rm -rf drupal_docker_server/.git
cp -R drupal_docker_server nome_projeto

Uma vez que vamos utilizar o código do Drupal que criámos com o composer começamos por eliminar o ficheiro docker-compose.override.yml:
rm nome_projeto/drupal_docker_server/docker-compose.override.yml

Depois editamos o ficheiro nome_projeto/drupal_docker_server/docker-compose.yml e alteramos o caminho para os volumes dos contentores relativos ao php e ao nginx (texto a negrito):

php:
image: wodby/drupal-php:$PHP_TAG
container_name: "${PROJECT_NAME}_php"
environment:
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
DB_HOST: $DB_HOST
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_NAME: $DB_NAME
DB_DRIVER: $DB_DRIVER
PHP_FPM_USER: wodby
PHP_FPM_GROUP: wodby
COLUMNS: 80 # Set 80 columns for docker exec -it.
## Read instructions at https://wodby.com/stacks/drupal/docs/local/xdebug/
# PHP_XDEBUG: 1
# PHP_XDEBUG_DEFAULT_ENABLE: 1
# PHP_XDEBUG_REMOTE_CONNECT_BACK: 0
# PHP_IDE_CONFIG: serverName=my-ide
# PHP_XDEBUG_REMOTE_HOST: host.docker.internal # Docker 18.03+ Mac/Win
# PHP_XDEBUG_REMOTE_HOST: 172.17.0.1 # Linux
# PHP_XDEBUG_REMOTE_HOST: 10.254.254.254 # macOS, Docker < 18.03
# PHP_XDEBUG_REMOTE_HOST: 10.0.75.1 # Windows, Docker < 18.03
# PHP_XDEBUG_REMOTE_LOG: /tmp/php-xdebug.log
volumes:
- ../:/var/www/html
## For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
# - ./:/var/www/html:cached # User-guided caching
# - docker-sync:/var/www/html # Docker-sync
## For XHProf and Xdebug profiler traces
# - files:/mnt/files

nginx:
image: wodby/nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
depends_on:
- php
environment:
NGINX_STATIC_OPEN_FILE_CACHE: "off"
NGINX_ERROR_LOG_LEVEL: debug
NGINX_BACKEND_HOST: php
NGINX_SERVER_ROOT: /var/www/html/web
NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
# NGINX_DRUPAL_FILE_PROXY_URL: http://example.com
volumes:
- ../:/var/www/html

Finalmente executamos os contentores:
cd nome_projeto/drupal_docker_server/
docker-compose up -d

Os diferentes serviços são acessíveis a partir dos seguintes endereços, não esquecendo de adicionar à entrada 127.0.0.1 o domínio drupal.docker.localhost no ficheiro /etc/hosts:

nginx/apache http://drupal.docker.localhost:8000
pma http://pma.drupal.docker.localhost:8000
adminer http://adminer.drupal.docker.localhost:8000
mailhog http://mailhog.drupal.docker.localhost:8000
solr http://solr.drupal.docker.localhost:8000
nodejs http://nodejs.drupal.docker.localhost:8000
node http://front.drupal.docker.localhost:8000
varnish http://varnish.drupal.docker.localhost:8000
portainer http://portainer.drupal.docker.localhost:8000
webgrind http://webgrind.drupal.docker.localhost:8000

Instalar docker-compose - https://docs.docker.com/compose/install/
https://drupal-up.com/blog/installing-drupal-8-help-composer-and-docker
https://wodby.com/docs/stacks/drupal/local/
https://vsupalov.com/difference-docker-compose-and-docker-stack/

# Backup
docker exec CONTAINER /usr/bin/mysqldump --default-character-set=utf8mb4 -u root --password=root DATABASE > backup.sql

# Restore
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql --default-character-set=utf8mb4 -u root --password=root DATABASE

https://github.com/bartsolutions/docker-ssh-lamp