久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

發布SQL Server Docker有哪些方式

178次閱讀
沒有評論

共計 4577 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章主要介紹“發布 SQL Server Docker 有哪些方式”,在日常操作中,相信很多人在發布 SQL Server Docker 有哪些方式問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”發布 SQL Server Docker 有哪些方式”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

1 構建【數據庫文件內建于容器鏡像之內】的 SQL Server Docker 發布步驟如下:1 Pull 一個最原始的 sql server docker 鏡像

鏡像來自于微軟在 Docker Hub 上提供的初始容器。

2 編寫第一版的數據庫對象創建腳本

SQL 腳本:

CREATE DATABASE CRM 
GO 
USE CRM 
GO 
CREATE TABLE dbo.Account( AccountId INT IDENTITY(1,1),
 AccountName NVARCHAR(200) 
)

保存為  DBSchemaInit.sql

3 構建新容器鏡像

構建自定義的容器鏡像,最重要的是編寫 Dockerfile.

[root@centos00 v1]# cat Dockerfile
FROM microsoft/mssql-server-linux
MAINTAINER Lenis Huang  huangyun_122@163.com 
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=1QAZ2WSX3EDC
EXPOSE 1433

最終構建成功了:

[root@centos00 v1]# docker build -t=sqlserver/v1 .
Sending build context to Docker daemon 3.584 kB
Step 1/5 : FROM microsoft/mssql-server-linux
 ---  b2b20452a15b
Step 2/5 : MAINTAINER Lenis Huang  huangyun_122@163.com 
 ---  Running in 532a5f141f11
 ---  182a1a9aed84
Removing intermediate container 532a5f141f11
Step 3/5 : ENV ACCEPT_EULA Y
 ---  Running in c72d741f2f8e
 ---  ee590cf78e2b
Removing intermediate container c72d741f2f8e
Step 4/5 : ENV SA_PASSWORD 1QAZ2WSX3EDC
 ---  Running in 67559621fd8d
 ---  7d92d6155c25
Removing intermediate container 67559621fd8d
Step 5/5 : EXPOSE 1433
 ---  Running in 2bb8ee0440a4
 ---  67f770bfdacd
Removing intermediate container 2bb8ee0440a4
Successfully built 67f770bfdacd
[root@centos00 v1]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sqlserver/v1 latest 67f770bfdacd 36 seconds ago 1.44 GB

至此,一份嶄新的可用于項目部署的 sql server docker 構建完畢。

[root@centos00 DockerNginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f29258559cb4 sqlserver/v1  /opt/mssql/bin/sq...  About a minute ago Up 59 seconds 0.0.0.0:32793- 1433/tcp dev_sqlv1

從 docker ps 執行的結果中看到運行著 sqlv1 鏡像的容器,可以通過本機的 32793 端口連接到容器中 sql server 服務對應的 1433 端口。

在 Dev, STG, UAT 環境,都以 sqlv1 為藍本,使應用都連接到在 sqlv1 容器中運行的數據庫。開發測試中出現任何問題,都可以拿著 sqlv1 重建一個新的容器來運行數據庫。

4 開發新一版本的數據庫應用,將其應用于 sqlv1 鏡像,進而構建 sqlv2 鏡像

# Dockerfile
FROM sqlserver/v1
MAINTAINER Lenis Huang  huangyun_122@163.com 
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=1QAZ2wsx3EDC.
ENV PATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/bin
RUN mkdir sqlfiles
COPY DBSchemaInit.sql ./sqlfiles/DBSchemaInit.sql
COPY setup-database.sh ./sqlfiles/setup-database.sh
COPY entrypoint.sh ./sqlfiles/entrypoint.sh
RUN chmod a+x ./sqlfiles/setup-database.sh
RUN chmod a+x ./sqlfiles/entrypoint.sh
CMD bash ./sqlfiles/entrypoint.sh
# entrypoint.sh
echo  starting database setup 
./sqlfiles/setup-database.sh  
/opt/mssql/bin/sqlservr
# setup-database.sh
echo  please wait while database is starting up ... 
sleep 45s
echo  try to connect to database in containder and create the sample db... 
/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U sa -P 1QAZ2wsx3EDC. -d master -i ./sqlfiles/DBSchemaInit.sql
echo  sample db have been created!

作為數據庫部署,每次構建新容器,要關注的便是編寫增量部署腳本,以替代第一次的數據庫初始化腳本 DBSchemaInit.sql.

5 如此循環達到持續集成和發布

在這種發布流程中,要思考的問題是,如何在生產環境發布。

按照 docker 發布數據庫的這套流程,能發現和規避的問題是:

數據庫發布腳本的一致性。

在 dev, stg, uat,prod 都是使用了同一套腳本,并且腳本有錯誤可以及時調整。不至于在單發生產環境的時候,由于在 dev,stg, uat 測試環境發布時,沒有及時校驗出腳本邏輯上錯誤,或者因為環境的影響,比如大家隨意的在 dev,stg,uat 環境創建數據庫對象,而導致發布腳本本身沒有得以驗證正確性與完整性。

數據庫發布的快捷性。

原本需要 dev,stg,uat,prod 都重新部署一臺新的服務器。之后,應用數據庫發布腳本。現在只要竭盡全力構建一臺正確可用的 docker 鏡像,基于這份鏡像,可以實現多個平臺同時部署。而應用只需要指定相應的 doker 名即可。在多臺集群環境中,這種部署手法給運維帶來極大便利。還記得 Linux 的 ssh shell 嘛,發明遠程無密登錄就是為了能讓運維在多個服務器之間穿梭,而不用一臺臺去安裝軟件了。在大數據當道,時不時要求上千臺集群服務器的時下,docker 可以看做是一劑良藥。

而這套流程,需要考慮的地方在于,生產環境的發布稍微不同。同樣的發布腳本,但是數據庫文件是游離于容器之外的。所以嚴格來說,不能以這樣的方式去發布生產環境。必須從頭至尾的,將數據庫文件隔離于容器。在構建容器之時,先附加數據庫文件到鏡像,再應用發布腳本,最終構建發布版本的容器鏡像。這樣的構建腳本(Dockerfile)才具有可移植性。2 構建【數據庫文件游離于容器鏡像之外】的 SQL Server Docker 發布步驟如下:

有了上面的經驗,這次就簡單很多了,就是對 Dockerfile 增加 Volume 指令的修改。本質上,是用 Volume 中的磁盤空間來存儲數據庫文件。

唯一不同的便是 dockerfile 的編寫 和指定掛載的本地文件

# Dockerfile 
FROM sqlserver/v1
MAINTAINER Lenis Huang  huangyun_122@163.com 
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=1QAZ2wsx3EDC.
ENV PATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/bin
RUN mkdir sqlfiles
COPY DBSchemaInit.sql ./sqlfiles/DBSchemaInit.sql
COPY setup-database.sh ./sqlfiles/setup-database.sh
COPY entrypoint.sh ./sqlfiles/entrypoint.sh
RUN chmod a+x ./sqlfiles/setup-database.sh
RUN chmod a+x ./sqlfiles/entrypoint.sh
VOLUME /sql/data
CMD bash ./sqlfiles/entrypoint.sh

加了 VOLUME 指令用來指定所有掛載的本地文件都被掛載到 /sql/data 上。

[root@centos00 v4]# mkdir -p /sql/data
[root@centos00 v4]# docker run -p 1433 --rm --name=dev_sqlv5 -v sqlvolume:/sql/data sqlserver/v5
[root@centos00 data]# docker volume inspect sqlvolume
 {
  Driver :  local ,
  Labels : null,
  Mountpoint :  /var/lib/docker/volumes/sqlvolume/_data ,
  Name :  sqlvolume ,
  Options : {},
  Scope :  local 
 }
]

在 sqlvolume 指定的目錄下面,我們可以看到任何被放在 docker 中 /sql/data 目錄下的文件。當然我們也可以自己創建一個 volume 掛載上去。

到此,關于“發布 SQL Server Docker 有哪些方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計4577字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 华亭县| 永和县| 迁安市| 盈江县| 旬邑县| 酉阳| 大冶市| 资兴市| 托克托县| 东光县| 桂林市| 绥芬河市| 怀宁县| 普兰县| 庆云县| 林口县| 新干县| 大埔区| 昆山市| 平武县| 东乡族自治县| 启东市| 海林市| 凤阳县| 南汇区| 平原县| 余姚市| 高淳县| 永清县| 泊头市| 牟定县| 江川县| 合山市| 佛山市| 茌平县| 西和县| 金川县| 桦川县| 泸定县| 柳河县| 夏河县|