In the previous article, we learnt how Spring boot application can be packaged inside a docker container. The containerization approach helps to quickly spin up an environment and destroy it when not needed. This approach is not just limited to Programming languages but it can be easily be extended for Databases too! Most of the databases including MySQL, PostgreSQL can be easily be containerized. The configuration can be tuned as per application requirements and developers have total freedom to test the changes without impacting the centralized environment. In this article, we will focus on how MySQL database can be containerized. If you do not have Docker setup yet, please refer to this article for docker installation.
Getting started with Container
To quickly get started, let’s pull MySQL container image. The intention is to get familiar with MySQL environment variables and connection details. Execute the following command at the console
docker pull mysql
Note that above instruction will only pull the image in local docker repository. Execute
docker image ls and you should see following output.
You can now start MySQL in Docker using
docker run –name hello_mysql –env=”MYSQL_ROOT_PASSWORD=hello” -p 3306:3306 -d mysql
This will start MySQL inside Docker container. Note that
- we are mapping host port to container port using
-dhas been specified to run the container in the background instead of blocking the console.
- It is also necessary to pass
MYSQL_ROOT_PASSWORDas an environment variable to perform initial setup of the database.
To check if MySQL has successfully started in the container, execute following command in the console.
docker container logs hello_mysql
If you see the following statement, it means that MySQL has successfully started
Use following settings to connect the database
User ID: root
Password: hello (Note this is the same password that we supplied while starting mysql container)
Once you are connected, you should be able to execute the queries against the database.
Let’s access the MySQL container shell
docker container exec -it hello_mysql bash
You should now see a prompt like following
You can now connect to the database using the following command
mysql -u root -p
This will prompt for a password. Enter
hello at the prompt and press enter. You should now be able to access MySQL prompt and can query the database.
While we are able to access the MySQL database using Workbench and console, the data stored in Database will be lost as soon as you will stop or kill the container. This is the default behaviour of the container and useful to quickly spin up an environment and destroy it. But this behavior is not good for storing persistable data. In the next article we will look at how MySQL data can be persisted across container restart.