新手:为SQL Server 2017创建dockerfile

问题描述 投票:0回答:2

我对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文件中,我该怎么办呢?

sql-server docker docker-compose dockerfile
2个回答
0
投票

码头工人,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"

0
投票

作为前言:您不需要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镜像(如果这是您想要的行为)。

© www.soinside.com 2019 - 2024. All rights reserved.