How to setup MySQL in Docker
mysqldockerWhy you should run databases in docker for local development #
Installing and maintaining a local version of a database can take up a lot of valuable time. Setting up a database in docker can help save that time, and make the the installation a lot more portable, since docker containers can be moved around.
If you have multiple applications that need different versions of MySQL on your local machine, then running each of them in a docker container can make it a trivial task.
If you are new to docker, read up here — https://www.docker.com/products/docker-desktop. Assuming you have docker setup on your machine, following steps illustrate how to setup a MySQL database in a docker container
Create a container running MySQL #
docker run -p <host_machine_port>:3306 --name <container_name> -e MYSQL_ROOT_PASSWORD=<root_password> -e MYSQL_DATABASE=<db_name> -d mysql:<version>
Let us look at all the parameters in the above command
<host_machine_port>
— The port on your local machine that you want the container connected to. For example, if you want the mysql instance on localhost:3310, your <host_machine_port>
would be 3310
<container_name>
— The name of the container that will be created
<root_password>
— The password for the root user on the mysql instance.
<db_name>
— The name of the database that will be created
<version>
— The version of MySQL that you want to run
For example, if you want to create a MySQL instance using the latest version of MySQL with a database called people with a root password = my_password connected to your local machine port 3310, the following command would accomplish that.
docker run -p 3310:3306 --name sql_db -e MYSQL_ROOT_PASSWORD=my_password -e MYSQL_DATABASE=people -d mysql
Verify container status using this command
docker container ls
The above command will display all the docker containers running on your machine, and you should see your newly created container.
Connect to the database instance #
Now you can connect to the mysql instance using the mysql
command if you have it installed on your local machine: mysql --host=127.0.0.1 --port=3310 -uroot -p
. But given the fact that we did not want to install mysql on our local machine in the first place, it would be better if we connect to the database using shell access inside the container.
Get shell access inside the docker container using
docker exec -it <container_name> bash
And then run mysql -p
inside the container.