在现代软件开发中,容器化技术已经成为一种趋势,它可以帮助开发者在不同的环境中保持一致性。Docker作为容器化技术的代表,提供了一种轻量级、可移植的解决方案。本文将介绍如何使用Docker来运行SQL Server容器,包括下载镜像、创建容器、设置数据持久化以及使用docker-compose进行管理。
首先,需要从容器仓库中下载SQL Server的Docker镜像。这可以通过以下命令完成:
docker pull mcr.microsoft.com/mssql/server
执行该命令后,将看到类似于以下输出:
[下载镜像的输出]
下载镜像后,接下来就是运行容器。需要指定一些参数来运行容器:
SQL Server需要设置两个环境变量,首先是接受EULA协议,其次是设置SA密码。
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sample123$" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:latest
执行该命令后,将看到类似于以下输出:
[运行容器的输出]
要查看当前运行的容器,可以使用以下命令:
docker container ls
执行该命令后,将看到类似于以下输出:
[查看容器的输出]
现在,让使用SQL Server Management Studio连接到容器,并创建一些表。启动Management Studio,并连接到localhost,使用在docker run命令中设置的用户名sa和密码Sample123$。
连接成功后,可以继续添加数据库和表,并插入一些数据。但是,如果移除容器,然后再次运行容器,数据将会丢失。
要移除容器,首先必须停止容器,然后可以使用以下命令移除它:
docker container stop /sqlserver
docker container rm /sqlserver
执行这些命令后,容器将被停止并移除。
现在可以再次运行与之前相同的docker run命令:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sample123$" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:latest
执行该命令后,使用以下命令检查它是否正在运行:
docker container ls
再次使用SQL ServerManagement Studio连接到数据库,将看到数据库已经消失。为了持久化数据,需要设置一个卷挂载点,并将容器指向该位置。
可以创建一个卷挂载点,这将使本地磁盘上的一个位置成为容器内部数据库文件的存储位置,这样每次移除容器时,都能够保留数据:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password123" -p 1433:1433 --name sqlserver -v C:\Users\Owen\DockerVolumes\sqlserver:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server:latest
执行该命令后,数据将被持久化到指定的卷挂载点。
为了不必每次使用SQL数据库时都记住/输入所有这些参数,可以使用docker-compose.yaml文件来实现。这意味着只需要运行一个简单的命令,所有的参数都将包含在yaml文件中。
这实际上更方便,因为通常有太多的容器,不想记住每个容器的所有信息。
将以下代码保存为项目根目录下的docker-compose.yml:
version: '3.4'
services:
sqlserver:
image: mcr.microsoft.com/mssql/server
container_name: sqlserver
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=Password123
ports:
- "1433:1433"
volumes:
- C:\Users\Owen\DockerVolumes\sqlserver:/var/opt/mssql/data
现在,只需要输入以下命令:
docker-compose up