I will get MariaDB and Phpmyadmin running in a docker container. I will reuse folder setup and all files from previous recipe - 02.
Source files can be found here:
https://github.com/ikknd/docker-study in folder recipe-03
1. Modify docker-compose.yml file
Here I do several things:
- create volume -
. This is where all db data will be stored, even if container is restarted, data will be there.mariadb-data - environment variable
- sets root password for mariadb container.MYSQL_ROOT_PASSWORD: qwerty - environment variable
- adds "server" input field to phpmyadmin login page (this way you can use this phpmyadmin with an external MySQL DB, and not just this local setup)PMA_ARBITRARY=1 - environment variable
- told phpmyadmin how to connect to mariadbPMA_HOST=mariadb - map ports for
- this maps inner port 80 from inside the container, to port 8000 on my host machinephpmyadmin - 8000:80 - "
" - prevents container to start before other container, on which it dependsdepends_on
2. Go to /var/www/docker-study.loc/recipe-03/docker/ and execute:
docker-compose up -dI can go to:
myapp.loc/ - and still see phpinfo pagemyapp.loc:8000 - see phpmyadmin, I can login using root/qwerty credentials3. What if I need database to be up and running with some initial DB inside, and not empty?
This can be achieved by modifying
mariadb section with:command: "mysqld --init-file /data/application/init.sql"and
volumes:
- ./init.sql:/data/application/init.sql
- is an existing DB dump.init.sql- using volumes I copy this file to container's
location/data/application/init.sql - using "
" command - I tell mysql to start and import init.sqlmysqld --init-file
4. After I have DB running, how to export/import DB?
To see list of containers and learn container id or name of mariadb container:
docker container lsTo import:
docker exec -i docker_mariadb_1 mysql -uroot -pqwerty DB_NAME < your_local_db_dump.sqlTo export:
docker exec -i docker_mariadb_1 mysqldump -uroot -pqwerty DB_NAME > your_local_db_dump.sql