參考MSDN :Docker安裝SQLSERVER
Docker 已經安裝成功這里不再重述,現在安裝sqlserver:
1. 下載 SQLSERVER Image
首先百度找到 docker hub MSSQLserver的官方鏡像:鏡像地址
打開網址:可以看到官方網頁上已經給出了拉取的完整腳本:
直接復制鏡像腳本,執行即可(默認安裝最新版本的sqlserver,也可以選擇具體的tag版本進行安裝,可以參考網頁說明).
docker pull mcr.microsoft.com/mssql/server
docker image 查看 發現已經拉取成功,共1.5G大小
2:生成容器並運行 docker run
仔細瀏覽網頁,Description中已經給出了image的使用方法.
看下參數的具體說明:
Requirements
-
This image requires Docker Engine 1.8+ in any of their supported platforms.
-
At least 2GB of RAM (3.25 GB prior to 2017-CU2). Make sure to assign enough memory to the Docker VM if you're running on Docker for Mac or Windows.
-
Requires the following environment flags
ACCEPT_EULA=Y
SA_PASSWORD=<your_strong_password>
MSSQL_PID=<your_product_id | edition_name> (default: Developer)
-
A strong system administrator (SA) password: At least 8 characters including uppercase, lowercase letters, base-10 digits and/or non-alphanumeric symbols.
要求:Docker1.8以上 內存2G以上如果是2017最低3.5G內存,
SA_PASSWORD :設置sa的密碼,必須包含大小寫、字母和數字、特殊符號混合才行
MSSQL_PID:這里可以設置版本類型或者產品激活碼,默認是Developer即開發版本
最終完整腳本如下(增加了容器名稱sqlserver設置,MSSQL_PID設置的是Enterprise Core版本,默認image mcr.microsoft.com/mssql/server):
docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=password*****' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -d mcr.microsoft.com/mssql/server
OK,docker ps 可以看到已經運行成功了,開放防火牆后,在客戶端機器上遠程連接即可(經測試默認開啟了遠程連接無需配置)
默認sqlserver安裝在/var/opt目錄和/opt目錄
SQLCMD運行:
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>
總結:SQLSERVER 在docker下的安裝十分簡單,只需要2步就能完成
#1. 拉取SQLSERVER docker 鏡像 docker pull mcr.microsoft.com/mssql/server #2.運行 docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=PWD********' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -d mcr.microsoft.com/mssql/server
補充:sqlserver數據存儲默認只存於容器內部,如果容器銷毀數據會出現丟失,為了長期保存我們創建啟動容器時需要在主機內存儲一份,這里使用掛載主機目錄到容器內部目錄的方式
在原有的docker run指令增加-v <host directory>:/var/opt/mssql命令參數來完成。
先在主機中新建目錄mssql_data用來存儲data
[root@dfdf var]# mkdir mssql_data [root@dfdf var]# ls account adm cache crash db empty ftp games gopher kerberos lib local lock log mail mssql_data nis opt preserve run spool tmp yp
創建后刪除舊的sqlserver容器,使用下列腳本重新生成容器
docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=8580555@Mf' -e 'MSSQL_PID=2C9JR-K3RNG-QD4M4-JQ2HR-8468J' -p 1433:1433 -v /var/mssql_data:/var/opt/mssql -d mcr.microsoft.com/mssql/server
二次安裝無法啟動查看下錯誤日志(docker logs):
# docker logs sqlserver SQL Server 2019 will run as non-root by default. This container is running as user mssql. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13] SQL Server 2019 will run as non-root by default. This container is running as user mssql. To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. /opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. Errno [13]
問題描述:
以根用戶的身份運行非根容器,如果需要,以根用戶的身份運行非根容器。 這還會將所有文件權限自動授予容器。
簡單的說就是權限問題,容器沒有權限訪問外部目錄
解決辦法:
修改目錄權限:
chmod 777 /var/mssql_data
再次運行就可以了.
查看下掛載成功后的mssql_data,和容器內mssql目錄是一樣的了.復制拷貝可以直接從這個目錄上處理.
其它功能:sqlcmd
--進入容器內部bash docker exec -it sqlserver bash --打開sqlcmd /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "password"
sql腳本都可以在這里直接輸入,記得要換行go以后才執行.
其它功能二:啟動代理
注意啟動代理的使用使用root用戶執行bash 否則會執行失敗
[root@local~]# docker exec -it -u root sqlserver bash root@518c2b65b0fb:/# /opt/mssql/bin/mssql-conf set sqlagent.enabled true SQL Server needs to be restarted in order to apply this setting. Please run 'systemctl restart mssql-server.service'. root@518c2b65b0fb:/# exit exit [root@local~]# docker stop sqlserver
[root@local~]# docker start sqlserver
[root@local~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
518c2b65b0fb mcr.microsoft.com/mssql/server "/opt/mssql/bin/perm…" 19 hours ago Up 5 seconds 0.0.0.0:1433->1433/tcp sqlserver
[root@local~]#