Dogs and cats living together, mass hysteria!
The answer (and an increasingly common answer, I might add) is Docker. Here are the steps that worked for me.
Install and configure Docker
If you don't already have Docker installed, you'll need to download and install it.
Next step, you'll need to increase Docker's available memory to 4GB or more.
- Docker -> Preferences
- Increase Memory to at least 4GB
- Click Apply & Restart
Get the Docker image
Open a Terminal window, and download the latest SQL Server for Linux Docker image.
docker pull microsoft/mssql-server-linux
Now, launch an instance of the Docker image.
docker run -d --name name_your_container -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=P@55w0rd' -p 1433:1433 microsoft/mssql-server-linux
You should now have SQL Server running on your Mac, ready for action!
A few notes on Docker parameters
-d: this launches the container in daemon mode, so it runs in the background
--name name_your_container: give your Docker container a friendly name, which is useful for stopping and starting containers from the Terminal.
-e 'ACCEPT_EULA=Y: this sets an environment variable in the container named
ACCEPT_EULAto the value
Y. This is required to run SQL Server for Linux.
-e 'SA_PASSWORD=P@55w0rd': this sets an environment variable for the
sadatabase password. Set this to your own strong password. Also required.
-p 1433:1433: this maps the local port 1433 to the container's port 1433. SQL Server, by default, listens for connections on TCP port 1433.
microsoft/mssql-server-linux: this final parameter tells Docker which image to use
Tip: Get Kitematic
Kitematic is a nice desktop application for managing Docker containers. The first time you click Open Kitematic, it will prompt you to download and install it. You can then use Kitematic to view the output of your containers, manage their settings, etc.
It's running, now what?
From the Terminal, install
sql-cli globally, so you can use it anywhere.
npm install -g sql-cli
Next, connect to your SQL Server instance running in Docker.
mssql -u sa -p P@55w0rd
You can now query and execute SQL Server commands from the
mssql> prompt. Type
.quit and press Enter to exit.
Getting an existing SQL database into Docker
I haven't tried restoring a database from backup, yet. Instead, I chose to script out an existing database and use
sql-cli to run the scripts to recreate my database running in Docker.
1. Generate scripts
First step is to use SQL Server Management Studio to generate scripts from an existing database.
Right-click on your database, and choose Tasks -> Generate Scripts...
I chose to separate my table and data scripts from my Views, Stored Procedures, User-Defined Functions, etc.
Next, click on Advanced
I chose to "Check for object existence," "Script DROP and CREATE," and set "Types of data to script" to "Schema and data."
Checking for object existence and DROP/CREATE allows me to re-run the same script against an existing database, if I want to reset it back to its original state.
Choose a location to save your scripts. When finished, repeat the steps to script out your Views, Stored Procedures, and UDFs, if necessary.
2. Run the scripts against your SQL Server running in Docker
- Copy the scripts you generated above to your Mac where you can easily get to them from the Terminal.
- Open a Terminal, and change to the folder where you placed the scripts.
- Now, connect to your SQL Server running in Docker using
sql-cli, and make sure you are on
mssql> use master
- Create a new database
mssql> CREATE DATABASE devdb
devdbto match the name of the database you scripted. The generated scripts expect a database with that same name to exist.
- Change to the database we just created (change
devdbto match your database name)
mssql> use devdb
- Run the generated scripts to create all the tables and populate them with data.
mssql> .run script.sql
- Repeat with the script that contains your other database objects, if necessary.
You now have a copy of your database, running on your Mac, without the need for entire Windows VM!
mssqlVisual Studio Code extension to connect and manage your database!
Microsoft's documentation: Run the SQL Server Docker image on Linux, Mac, or Windows