MySQL with PHPMyAdmin on Docker¶
This stack will boot a mysql container and a phpmyadmin container
Compose¶
The docker-compose.yml:
version: '3.8'
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: unless-stopped
environment:
- PMA_ARBITRARY=1
- TZ=Africa/Johannesburg
networks:
- public
ports:
- 18080:80
depends_on:
mysql-db:
condition: service_healthy
mysql-db:
image: mysql:8.0
container_name: mysql-db
command: --default-authentication-plugin=mysql_native_password --init-file=/data/application/init.sql
restart: unless-stopped
security_opt:
- seccomp:unconfined
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_USER=ruan
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=my_db
volumes:
- ./data:/var/lib/mysql
- ./init.sql:/data/application/init.sql
healthcheck:
test: ["CMD", "mysql" ,"-h", "mysql-db", "-P", "3306", "-u", "root", "-prootpassword", "-e", "SELECT VERSION()"]
interval: 5s
timeout: 3s
retries: 30
networks:
- public
networks:
public:
name: public
We have a init.sql seed file to seed some dummy data:
CREATE DATABASE IF NOT EXISTS my_db;
CREATE TABLE IF NOT EXISTS my_db.users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT(3) NOT NULL
);
INSERT IGNORE INTO my_db.users (id, name, age) VALUES (1, 'ruan', 34);
INSERT IGNORE INTO my_db.users (id, name, age) VALUES (2, 'stefan', 32);
INSERT IGNORE INTO my_db.users (id, name, age) VALUES (3, 'james', 28);
Boot¶
Boot the stack with docker-compose:
docker-compose up -d
You can access PhpMyAdmin on port 18080 and the mysql hostname will be mysql-db, the root password will be rootpassword.