Running MySQL in a Docker container is a fairly straight-forward task. In this article, I will take an opportunity to use this task to explain a few basic concepts about how Docker works.
Docker machine
The first step is to create a droplet in DigitalOcean. And then install Docker engine in it. Thankfully, docker-machine
does both with a single command.
docker-machine create --driver digitalocean --digitalocean-access-token <accesstoken> mysql-droplet
We specify the driver as DigitalOcean to create our droplet. Then, we provide an access token. Create an access token in the API section of DigitalOcean.
With the above command, a droplet by name mysql-droplet
is created. Go to the droplet console and type docker version
.
Running MySQL container
Before we get to run MySQL container, let me explain what a container is. A container is a docker process which runs an application which we call image. In our case, we want to run the MySQL application. MySQL application is available as an image in Docker Hub or the public Docker registry. We create a MySQL container as follows.
docker container run --name mysql_server --publish 3306:3306 --env MYSQL_ROOT_PASSWORD=root --detach mysql
As you can see, there is a lot going in the background. First, the command pulls the mysql
image from Docker Hub. Next, it creates a new container (or process) with a name mysql_server
. It forwards traffic coming in through port 3306 of the droplet to port 3306 of the container. It sets the MySQL root password with an environment variable. Finally, it runs the process in background mode using the --detach
option. Quite a lot for a single command!
Verify if the container is running using docker container ls
command.
Running the database scripts
Database script is not like application code. While application code makes an application, database script creates a database which is data. Data should not reside within the container but outside of it. Docker has a mechanism to deal with data associated with containers using Docker volume. The official mysql
image makes use of volume to store the database information.
To run the database scripts, we connect to the MySQL server using MySQL workbench from your local Mac or Windows. In the Host, provide the IP address of droplet. And leave the default port 3306 as such. Connect to the server using root password as root. Once inside, create a new schema as you normally do. Then run the database initialization script.
You are all set to use MySQL container in DigitalOcean now.