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 -d
I 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 ls
To import:
docker exec -i docker_mariadb_1 mysql -uroot -pqwerty DB_NAME < your_local_db_dump.sql
To export:
docker exec -i docker_mariadb_1 mysqldump -uroot -pqwerty DB_NAME > your_local_db_dump.sql