我对docker很新,虽然我已经习惯了语法简单,但事情仍然无法解决。
对于我的开发环境,我想将SQL Server 2017/19作为容器docker运行。我做了谷歌搜索,并在微软网站上找到以下内容:
“要使用Docker运行容器映像,可以使用bash shell(Linux / macOS)或提升的PowerShell命令提示符中的以下命令。”
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1433:1433 --name sql1 `
-d mcr.microsoft.com/mssql/server:2017-latest
如果我想将它包装在一个简单的dockerfile或docker-compose文件中,我该怎么办呢?
码头工人,compose.yml:
version: "3.3"
services:
msql:
image: mcr.microsoft.com/mssql/server:2017-latest
environment: {
ACCEPT_EULA: "Y",
SA_PASSWORD: "<YourStrong!Passw0rd>"
}
ports:
- "1433:1433"
container_name: "sql1"
作为前言:您不需要dockerfile或docker-compose来为您的开发环境运行sql server实例。如果您只想快速启动最新的2017容器,只需输入您已找到的命令。
但是,如果您想轻松存储命令,而不必每次都输入它,为什么不在您的文件夹中添加一个简单的bat脚本。
但是,如果要扩展docker镜像(例如安装其他库),则需要dockerfile。另请参阅docker文档(精彩文档)以了解如何执行此操作。或者如果你想组成多个docker实例(为了让它们能够轻松地相互通信),那么可以使用docker-compose文件。
但是为了真正回答你的问题:创建一个包含2个文件的文件夹
folder
|__> DockerFile
|__> docker-compose.yml
DockerFile的内容将是:(请注意,此示例实际上除了指向现有的Microsoft软件图像之外什么都不做,但如果您在没有docker-compose的情况下使用它,您还可以在此处定义文件映射,密码配置等等。从这个新的预配置映像启动一个新容器)
FROM microsoft/mssql-server-windows-developer:2017
# environment configuration moved into docker-compose file
# EXPOSE 1433:1433
# ENV attach_dbs="[{'dbName':'YourDBName','dbFiles':['C:\\temp\\yourDB.mdf','C:\\temp\\yourDB_Log.ldf']}]"
# ENV ACCEPT_EULA=Y
# ENV sa_password=yourPassword
然后您的docker-compose.yml可能如下所示:
version: '3'
services:
yourServiceName:
container_name: yourContainerName
build: .
ports:
- "1433:1433"
volumes:
- .:C:/temp/
environment:
sa_password: "yourPassword"
ACCEPT_EULA: "Y"
attach_dbs: "[{'dbName':'YourDBName','dbFiles':['C:\\\\temp\\\\yourDB.mdf','C:\\\\temp\\\\yourDB_Log.ldf']}]"
在文件夹内的cml或PowerShell中调用docker-compose up
将启动这个新的SQL-Server容器。
无论我建议映射mdf和ldf文件以便于访问,例如用于存储状态,即使您关闭了docker镜像(如果这是您想要的行为)。