You plan to build an application that talks to a database, but you're procrastinating the idea because you don't want to go through the hassle of doing all the database setup yourself.
Tadaa.., we have Docker to the rescue. Docker is an example of what we call containerization tool in the technical lingo. Here we are gonna skip through the download and installation of Docker, you can find the detailed instructions depending on your machine type on their getting started page.
Now that we have docker running on our machine, let us go through these simple steps to run a sql server inside docker.
Creating a Docker Compose File
A docker compose file is a simple text file with .yml
extension, where we write all the steps required to get our service(mssql server in our case) up and running inside docker.
- Create a file and name it as sqlserver.yml
- Open the file and paste the following
version: "3" services: sqlserver: image: "mcr.microsoft.com/mssql/server:2019-latest" container_name: sql environment: SA_PASSWORD: "myPassword8" ACCEPT_EULA: "Y" ports: - "1433:1433" volumes: - "sqlservervolume:/var/opt/mssql" volumes: sqlservervolume:
- Set your desired password in SA_PASSWORD
Running the compose file
We will run the docker-compose
command and pass the sqlserver.yml
file as argument.
But before that make sure you have opened a CLI and you are in the same directory as the compose file. Then run the following command
docker-compose -f sqlserver.yml up
Port Mapping
Here we understand the connectivity between host machine and the docker container.
The above command will start up a new container named sql where the server would be running and listening on port 1433
. Now the question is how do we connect to the server running on the port 1433
of the container?
To answer that we will have to understand the concept of port mapping. Let us take a look at our yml file, where we have a ports section in which we have written 1433:1433
what does this do?
This is where port mapping happens. We have instructed docker that the container port 1433
on the right of the colon), should be mapped to 1433
port on the host machine(left hand side of the colon).
This enables us to talk to the database on 1433
port of our machine, as it relays the messages to 1433
port inside the container.
To understand it better, we could have mapped any other free port of our host to 1433
port of the container, like 9034:1433
and it would still run the same, only difference is that now we would connect to the database from our application on port 9034
.
Stopping the server
This is all that you need to do to get started with a running database and get on with your project. Of course you would ask, how to stop the server when you don't want to keep the database running. Since our server is being run inside docker, we will let docker handle the shutdown of the server, by executing the command to stop the container itself.
docker stop sql