91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

發布SQL Server Docker有哪些方式

發布時間:2021-11-11 11:03:13 來源:億速云 閱讀:146 作者:iii 欄目:關系型數據庫

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

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有哪些方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒙城县| 六安市| 东乌珠穆沁旗| 长武县| 延庆县| 长治市| 响水县| 临颍县| 无棣县| 新宁县| 鱼台县| 弥勒县| 昌乐县| 东丰县| 山东| 茶陵县| 内黄县| 河北省| 广宁县| 阿拉尔市| 襄城县| 长葛市| 安宁市| 阿城市| 保靖县| 乐东| 阜康市| 顺平县| 阿坝| 嘉义县| 泸西县| 祁东县| 长治市| 汶川县| 盱眙县| 云林县| 广德县| 白朗县| 兴业县| 花莲市| 崇义县|