Here is a little script I made to help me start/stop and remove a MySQL docker instance. The script also points to an init file (docker-entrypoint-initdb.d) for the database where you can put all the creations of init objects needed, eg. CREATE TABLE…, INSERT INTO…, and so on
Usage:
>my-docker-db-script start # Starts MySQL docker instance. Creates it if it does not exist >my-docker-db-script stop # Stops the MySQL docker instance >my-docker-db-script remove # Removes the MySQL instance
Bash script:
#!/bin/bash name="my-mysql-db" command="$1" function start() { state=$(2>/dev/null docker inspect $name --format '{{ .State.Status }}' || echo "") if [[ "$state" == "running" ]]; then echo "Databse already running!" exit 1 fi if [[ "$state" == "exited" ]]; then echo "Database already exists. Starting..." docker start $name && echo " ... database started" else echo "No database exists. Creating..." docker run -d -p 3306:3306 --name $name \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=my_db \ -e MYSQL_USERNAME=myusername \ -e MYSQL_PASSWORD=myuserpassword \ -v $(pwd)/my-mysql-db/mysql-docker-init:/docker-entrypoint-initdb.d \ -d mysql:5.6.51 && echo " ... database created" fi } function stop() { state=$(2>/dev/null docker inspect $name --format '{{ .State.Status }}' || echo "") if [[ "$state" == "" ]]; then echo "Database does not exist!" exit 1 fi echo "Stopping database ..." docker stop $name && echo " ... database stopped" } function remove() { state=$(2>/dev/null docker inspect $name --format '{{ .State.Status }}' || echo "") if [[ "$state" == "" ]]; then echo "Database does not exist!" exit 1 fi echo "Removing database" if [[ "$state" == "running" ]]; then docker stop $name && echo " ...database stopped" fi docker rm $name && echo " ...database removed" } case "$command" in start) start ;; stop) stop ;; remove) remove ;; *) echo "Invalid command: ${command}. Usage $0 (start|stop|remove)" exit 1 esac
Tested on MySQL v5.6.51, OSX 10.15.7 and Docker Desktop 4.3.2