This page explains how to run MySQL and phpMyAdmin with Docker.
MySQL is a popular open-source relational database management system (RDBMS) that is commonly used in web applications. It stores data in tables and uses Structured Query Language (SQL) to access and manipulate that data.
phpMyAdmin is a free and open-source web-based tool that is used to manage MySQL databases. It provides a user-friendly interface that allows users to create and manage databases, users, and privileges, as well as to execute SQL statements and manage data.
Let's use Docker to run both MySQL and phpMyAdmin by creating a docker-compose.yml file.
First line of docker-compose.yml, let's specify the version :
version: '3'
phpMyAdmin must reach the MySQL database.
To avoid complex configurations, we will create a network that will be common to MySQL and phpMyAdmin:
The mysql-phpmyadmin network uses the bridge to be reachable from the host machine:
networks:
    mysql-phpmyadmin:
        name: mysql-phpmyadmin
        # use the bridge driver
        driver: bridge
Here I want the database to be stored in the user's folder.
To do this, let's create a volume mysqldata and specify that this volume is in host machine folder.
volumes:
  mysqldata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '${HOME}/server/mysql-phpmyadmin/data'
Now let's configure the MySQL container.
image is the version of the MySQL image.container_name is the name of the container.environment are the environment variables (database identifiers).ports are the ports on the host side first and on the container side second.volumes is the volume where the data are stored.network is the network to which our container will be attached.Here is the MySQL configuration:
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: database_name
      MYSQL_USER: user_name
      MYSQL_PASSWORD: user_password
    ports:
      - "6033:3306"
    volumes:
      - mysqldata:/var/lib/mysql
    networks:
      mysql-phpmyadmin:
        aliases:
          - mysql
In the same way, let's now configure the container for phpMyAdmin:
image is the version of the phpMyAdmin image.container_name is the name of the container.environment are the environment variables (link to the MySQL database).ports are the ports on the host side first and on the container side second.network is the network to which the container will be attached.Here is the configuration of phpMyAdmin :
    phpmyadmin:
        image: phpmyadmin:5.2.0
        container_name: phpmyadmin
        links:
            - mysql
        environment:
            PMA_HOST: mysql
            PMA_PORT: 3306
        ports:
            - 8081:80
        networks:
        mysql-phpmyadmin:
            aliases:
                - phpmyadmin
Here is the entire docker-compose.yml file:
version: '3'
networks:
    mysql-phpmyadmin:
        name: mysql-phpmyadmin
        # use the bridge driver
        driver: bridge
volumes:
    mysqldata:
        driver: local
        driver_opts:
            type: 'none'
            o: 'bind'
            device: '${HOME}/server/mysql-phpmyadmin/data'
services:
    mysql:
        image: mysql:8.0
        container_name: mysql
        environment:
            MYSQL_ROOT_PASSWORD: root_password
            MYSQL_DATABASE: database_name
            MYSQL_USER: user_name
            MYSQL_PASSWORD: user_password
        ports:
            - "6033:3306"
        volumes:
            - mysqldata:/var/lib/mysql
        networks:
            mysql-phpmyadmin:
                aliases:
                - mysql
    phpmyadmin:
        image: phpmyadmin:5.2.0
        container_name: phpmyadmin
        links:
            - mysql
        environment:
            PMA_HOST: mysql
            PMA_PORT: 3306
        ports:
            - 8081:80
        networks:
            mysql-phpmyadmin:
                aliases:
                - phpmyadmin
To launch the containers, you just have to type the following command in the folder of the docker-compose.yml file:
docker compose up -d
The -d option allows to launch the container in the background.
If everything goes well, the networks and the volume should be created, then the containers:
$ docker compose up -d
[+] Running 3/3
 ⠿ Network mysql-phpmyadmin  Created                                                              0.1s
 ⠿ Container mysql           Started                                                              0.6s
 ⠿ Container phpmyadmin      Started
The following command stops the containers:
docker compose down
In your favorite browser, go to `http://localhost:8081/``
The phpMyAdmin home page should display:

You have two options to connect to it:
These are obviously the identifiers specified in the docker-compose.yml file.
In the first case, you will be administrator of the MySQL database.
In the second case, you will only be able to administrate the database_name database
From the host machine, you can also connect to the MySQL database from the command line:
To connect as root (password root_password)
mysql --host=127.0.0.1 --port=6033 -u root -p
As an administrator, you will be able to manage all databases:
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0,01 sec)
Or as a user:
mysql --host=127.0.0.1 --port=6033 -u user_name -p
You will only have access to the databases to which your user has privileges:
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| database_name      |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0,00 sec)
You can download the complete file below.
Note that you have to rename it docker-compose.yml to start the containers :
mysql-phpmyadmin-docker-compose.yml