paint-brush
MariaDB + Phpmyadmin + Docker: Running Local Databaseby@ifomin
34,416 reads
34,416 reads

MariaDB + Phpmyadmin + Docker: Running Local Database

by Igor FominJanuary 21st, 2020
Read on Terminal Reader
Read this story w/o Javascript

Too Long; Didn't Read

I will get MariaDB and Phpmyadmin running in a docker container. I will reuse folder setup and all files from previous recipe - 02.
featured image - MariaDB + Phpmyadmin + Docker: Running Local Database
Igor Fomin HackerNoon profile picture

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 -
    mariadb-data
    . This is where all db data will be stored, even if container is restarted, data will be there.
  • environment variable
    MYSQL_ROOT_PASSWORD: qwerty
    - sets root password for mariadb container.
  • environment variable
    PMA_ARBITRARY=1
    - 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)
  • environment variable
    PMA_HOST=mariadb
    - told phpmyadmin how to connect to mariadb
  • map ports for
    phpmyadmin - 8000:80
    - this maps inner port 80 from inside the container, to port 8000 on my host machine
  • "
    depends_on
    " - prevents container to start before other container, on which it depends

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 page

myapp.loc:8000
- see phpmyadmin, I can login using root/qwerty credentials

3. 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
  • init.sql
    - is an existing DB dump.
  • using volumes I copy this file to container's
    /data/application/init.sql
    location
  • using "
    mysqld --init-file
    " command - I tell mysql to start and import init.sql

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