MySQL Docker Container Tutorial: How to Set Up & Configure

February 10, 2020

Introduction

MySQL is a well-known open-source relational database management system and one of the most popular web server solutions. It stores and structures data in a meaningful manner, ensuring easy accessibility.

Docker is a set of platform-as-a-service products that support CI/CD development. It allows users to develop and deploy applications inside virtual environments, called containers. With a single image, Docker can boot up an application with all its libraries and dependencies.

In this tutorial, learn how to deploy a MySQL Docker container and start working with the containerized database.

Tutorial on How to Install MySQL Docker Containers

Prerequisites

  • Access to a command line/terminal window
  • A user account with sudo privileges or access to the root account
  • An existing Docker installation

Running a MySQL Docker Container

If you need to set up a database quickly and without using up too many resources, deploying MySQL in a container is a fast and efficient solution. This is only appropriate for small and medium-sized applications. Enterprise-level applications would not find a MySQL Docker container sufficient for their workload.

Using the Docker software for setting up your database is becoming increasingly popular for small-scale apps. Instead of having a separate server for database hosting, you can deploy a MySQL database container.

Multiple containers can run on your computer. The containers share the same kernel and libraries of the host while packaging the deployed application or software into single units. This makes the database extraordinarily lightweight and fast to spin up.

Installing a MySQL Docker Container

Setting up a database in Docker is simply building a container based on a MySQL image. Follow the steps outlined below to get your MySQL container up and running.

Note: This tutorial assumes you already have Docker on your system. If you don't have the software, take a look at one of our articles on how to install Docker on CentOS, installing Docker on Ubuntu, or Docker guides for other operating systems.

Step 1: Pull the MySQL Docker Image

1. Start by pulling the appropriate Docker image for MySQL. You can download a specific version or opt for the latest release as seen in the following command:

sudo docker pull mysql/mysql-server:latest

If you want a particular version of MySQL, replace latest with the version number.

Pull MySQL Docker image for MySQL Docker container.

2. Verify the image is now stored locally by listing the downloaded Docker images:

sudo docker images

The output should include mysql/mysql-server among the listed images.

Checking whether MySQL Docker image is part of local repository.

Step 2: Deploy the MySQL Container

1. Once you have the image, move on to deploying a new MySQL container with:

sudo docker run --name=[container_name] -d [image_tag_name]
  • Replace [container_name] with the name of your choice. If you do not provide a name, Docker generates a random one.
  • The -d option instructs Docker to run the container as a service in the background.
  • Replace [image_tag_name] with the name of the image downloaded in Step 1.

In this example, we create a container named mysql_docker with the latest version tag:

sudo docker run --name=[container_name] -d mysql/mysql-server:latest

2. Then, check to see if the MySQL container is running:

docker ps

You should see the newly created container listed in the output. It includes container details, one being the status of this virtual environment. The status changes from health: starting to healthy, once the setup is complete.

A command for running a MySQL container and checking the container state.

Step 3: Connect to the MySQL Docker Container

1. Before you can connect the MySQL server container with the host, you need to make sure the MySQL client package is installed:

apt-get install mysql-client

2. Then, open the logs file for the MySQL container to find the generated root password:

sudo docker logs [container_name]

For the mysql_docker container, we run:

sudo docker logs mysql_docker

3. Scroll through the output and find the line [Entrypoint] GENERATED ROOT PASSWORD: , copy and paste the password in a notepad or text editor so you can use it later.

Find generated root password for MySQL Docker container.

4. Next, go to the bash shell of the MySQL container by typing:

sudo docker exec -it [container_name] bash

For the container created as an example, we run:

sudo docker -it mysql_docker bash

3. Provide the root password you copied from the logs file, when prompted. With that, you have connected the MySQL client to the server.

A command for connecting to a MySQL Docker container.

4. Finally, change the server root password to protect your information:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[newpassword]';

Replace [newpassword] with a strong password of your choice.

ChangeMySQL root password for MySQL container.

Configure MySQL Container

When you install a MySQL container, you will find its configuration options in the /etc/mysql/my.cnf= directory.

If you need to modify the configuration, create an alternative config file on the host machine and mount them inside the container.

1. First, create a new directory on the host machine:

sudo mkdir -p /root/docker/[container_name]/conf.d

2. Create a custom MySQL config file inside that directory:

sudo nano /root/docker/[container_name]/conf.d/my-custom.cnf

3. Once in the file, you can add lines with the desired configuration.

For example, if you want to increase the maximum number of connections to 250 (instead of the default 151), add the following lines to the configuration file:

[mysqld]
max_connections=250
File changing the configuration of a MySQL container by expanding the maximum number of connections.

4. Save and exit the file.

5. For the changes to take place, you need to remove and rerun the MySQL container. This time, the container uses a combination of configuration settings from the newly created file and the default config files.

To do this, run the container and map the volume path with the command:

docker run \
--detach \
--name=[container_name] \
--env="MYSQL_ROOT_PASSWORD=[my_password]" \
--publish 6603:3306 \
--volume=/root/docker/[container_name]/conf.d:/etc/mysql/conf.d \
mysql

6. To check whether the container loaded the configuration from the host, run the following command:

mysql -uroot -pmypassword -h127.0.0.1 -P6603 -e 'show global variables like "max_connections"';

You should see that the maximum number of connections is now 250.

Manage Data Storage

By default, Docker stores data in its internal volume.

To check the location of the volumes, use the command:

sudo docker inspect [container_name]

You will see the /var/lib/mysql mounted in the internal volume.

List details of MySQL Docker container and data storage location.

You can also change the location of the data directory and create one on the host. Having a volume outside the container allows other applications and tools to access the volumes when needed.

1. First, find an appropriate volume on the host and create a data directory on it:

sudo mkdir -p /storage/docker/mysql-data

2. Now start the container again, mounting the previously made directory:

docker run \
--detach \
--name=[container_name] \
--env="MYSQL_ROOT_PASSWORD=my_password" \
--publish 6603:3306 \
--volume=/root/docker/[container_name]/conf.d:/etc/mysql/conf.d \
--volume=/storage/docker/mysql-data:/var/lib/mysql \
mysql

If you inspect the container, you should see that the MySQL container now stores its data on the host system. Run the command:

sudo docker inspect [container_name]

Note: For more Docker commands, check out the comprehensive list in our article Docker Commands Cheat Sheet.

Start, Stop, and Restart MySQL Container

The container automatically stops when the process running in it stops.

To start the MySQL container run:

sudo docker start [container_name]

Stop the MySQL container, use the command:

sudo docker stop [container_name]

To restart the MySQL container run:

sudo docker restart [container_name]

Delete MySQL Container

Before deleting a MySQL container, make sure you stop it first.

Then, remove the docker container with:

sudo docker rm [container_name]
example of stopping and deleting a MySQL container

Conclusion

After reading this article, you should have successfully deployed a MySQL container.

Combining Docker and MySQL can be an excellent solution for a small-scale application. Now you can start exploring all the possibilities of a MySQL container.

Was this article helpful?
YesNo
Sofija Simic
Sofija Simic is an experienced Technical Writer. Alongside her educational background in teaching and writing, she has had a lifelong passion for information technology. She is committed to unscrambling confusing IT concepts and streamlining intricate software installations.
Next you should read
Docker Image vs Container: Major Differences
May 23, 2024

Docker images and containers are elements in Docker's platform-as-a-service software.
Read more
PostgreSQL Vs MySQL: A Detailed Comparison
March 30, 2023

Explore the differences between the two most widely used database management systems.
Read more
How to Deploy and Manage MongoDB with Docker
February 25, 2020

This tutorial shows you how to use Docker and an official MongoDB container...
Read more
MySQL Docker Container Tutorial: How to Set Up & Configure
February 10, 2020

Deploying MySQL in a container is a fast and efficient solution for small and...
Read more