# contao-docker-test

#Installation:
- Go to ".docker/contao" folder and create docker containers: `docker-compose up -d`
- Create a database for contao in database container:
  - One way to do so is to open up the "Database"-Tab of PhpStorm
    - Click on "+" -> Data Source -> MariaDB
    - Add a name to configuration e.g. contao-db
    - Host: localhost 
    - Port: 3306
    - User: root (according to database-service in docker-compose.yml)
    - Password: root (according to database-service in docker-compose.yml)
    - Once you're connected go to Query Console (icon at the top "QL") and create the database for contao
      - Enter the following line into the console and press the "play"-button to execute the query:
      - `CREATE DATABASE contao CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`
      - The database name is free to chose but in this example the database name 'contao' is being used
  - Another way is to connect to phpmyadmin via [localhost:8080](http://localhost/8080) 
    as it's configured in docker-compose.yml
  - If you install / create containers for the first time, copy the contao-manager.phar.php from ".docker/contao" folder
    to the folder "app/contao/public" folder
- Open [contao manager](http://localhost/contao/install) in browser after database creation in order to install contao
  - Step through the installation process until you get to enter the database credentials
  - NOTE: the 'host' isn't 'localhost' here, use the name of the database service 'database' as it's configured in
    the docker-compose.yml
  - Finish the installation and have fun :)
  - Contao will be available here: [http://localhost/contao](http://localhost/contao)

# Some important information
- The database content is stored in a container which is bind-mounted to the 'db'-folder of the project
- If you should renew your containers, make sure you don't delete this folder, 
  since all database data is contained in there
- Even if the container will be removed, the database data still exists in this folder and the data will be
  provided for the database container through the bind-mounting if you create a new database container
- If you want to export the database, either do it via phpmyadmin or enter the container and use mysql dump
- To enter a container e.g. the contao container run `docker exec -it contao /bin/bash`.
  - After this you're directly within the container and can browse through it's content via console.  
  - If you did changes e.g. in the composer.json on your host machine (your computer - not within a container) 
    to install or update bundles, then run e.g. `composer install` within the container
  - If you do changes on you host machine, these changes will be also available for the container via bind-mounting
- To exit the container, simply run `exit` and you'll get back to the console of your host machine ;)

# Links:
- https://raphaelstaebler.medium.com/run-contao-4-inside-a-docker-container-96422278ea02
- https://github.com/wsargent/docker-cheat-sheet/blob/master/README.md
- https://docs.tibco.com/pub/mash-local/4.3.0/doc/html/docker/GUID-BD850566-5B79-4915-987E-430FC38DAAE4.html

# Some helpful docker commands:
- `docker-compose up -d`
- `docker-compose down`
- `docker exec -it contao /bin/bash`
- `docker build -t spt-docker-contao .`
- `docker image rm spt-docker-contao`
- `docker ps`
- `docker ps --all`
- `docker container stop $(docker container ls -aq)`
- `docker container rm $(docker container ls -aq)`
- `docker exec b768b668cb75 cat contao/composer.json`
- `docker rmi $(docker images -q)`

# Clean restart of Docker instance
1.  Stop the container(s) using the following command: `docker-compose down`
2.  Delete all containers using the following command: `docker rm -f $(docker ps -a -q)`
3.  Delete all volumes using the following command: `docker volume rm $(docker volume ls -q)`
4.  Restart the containers using the following command: `docker-compose up -d`