Search code examples
dockerdocker-composedrupaldrupal-8drupal-9

How to make changes to docker-compose.yml and Drupal 9 project files correctly if containers are already running?


  1. I installed Docker and Docker Compose
  2. I downloaded the latest release Docker-based Drupal stack (there are php, mariadb, apache images etc.) and put it in the my project folder /var/www/html/mydrupaldocker
  3. Next, I made the settings in the .env and docker-compose.yml files and running the containers with the command:
    docker-compose up -d
  4. After running images from this folder, as well as adding the unzip drupal 9 folder to the my project folder, I will start installing drupal 9 in the browser.

And I have questions on two possible situations:


Situation №1:

I made mistakes in the file docker-compose.yml I have the commented code which is responsible for the few images. Accordingly, the containers were not started. And I want to place the project in another place of the computer (not critical, but it is desirable)

I can do:
docker-compose stop
docker-compose rm

Fix everything that I need. And run again:

docker-compose up -d

Is it right to do so? Or do I need something otherwise?


Situation №2:

Everything is set up well, running all the necessary containers, installed the Drupal 9 site in the container. And then I created a sub theme, added content, wrote code in php, js, css files, etc.

How do I commit the changes now? What commands do you need to write in the terminal? For example, in technology such as git, this is done with the commands:
git add.
git commit -m "first"

How is it done in Docker? Perhaps there will be a situation when I need to roll back the container to the version below.


Solution

  • Okay, let's go by each case.

    Situation No.1

    Whenever you make changes to docker-compose.yml, it's fine to restart the service/images so they reflect the new changes. It could be as minor as a simple port switch from 80 to 8080. Hence, you could just do docker-compose stop && docker-compose up -d and docker-cli will restart the containers with the new changes.

    You don't really need to remove the containers/services unless you have used custom Dockerfile and have made changes to it. Although, your below assumption would still give the same result, it's just has an extra step of removing the containers without any changes being done to the actual docker images.

    I can do: docker-compose stop docker-compose rm

    Fix everything that I need. And run again:

    docker-compose up -d

    Situation No.2

    In this you would be committing your entire project to git along with your Dockerfile and docker-compose.yml file from your host machine and not the container. There's no rocket science here.

    You won't be committing your code to git via the containers. The containers are only for deploying and testing your code. You would be committing just the configuration files i.e Dockerfile (if custom is used offcourse) and docker-compose.yml file along with your source code to git. The result would be that, any developer who is collaborating with you in a team, can just take a pull of the project and run docker-compose up -d and the same containers/services running on your machine will be up and running on the host machine of the other dev.

    Regarding how to roll back to old version of docker services, you can just rollback to a previous commit and the docker-compose.yml will be reverted. Then you can just do:

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