Spin up a MSSQL Server in Docker
3 min read
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
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
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