這篇文章主要介紹“發(fā)布SQL Server Docker有哪些方式”,在日常操作中,相信很多人在發(fā)布SQL Server Docker有哪些方式問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”發(fā)布SQL Server Docker有哪些方式”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),邵原企業(yè)網(wǎng)站建設(shè),邵原品牌網(wǎng)站建設(shè),網(wǎng)站定制,邵原網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,邵原網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
鏡像來(lái)自于微軟在 Docker Hub 上提供的初始容器。
SQL 腳本:
CREATE DATABASE CRM GO USE CRM GO CREATE TABLE dbo.Account( AccountId INT IDENTITY(1,1), AccountName NVARCHAR(200) )
保存為 DBSchemaInit.sql
構(gòu)建自定義的容器鏡像,最重要的是編寫 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
最終構(gòu)建成功了:
[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
至此,一份嶄新的可用于項(xiàng)目部署的 sql server docker 構(gòu)建完畢。
[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 執(zhí)行的結(jié)果中看到運(yùn)行著 sqlv1 鏡像的容器,可以通過(guò)本機(jī)的 32793 端口連接到容器中 sql server 服務(wù)對(duì)應(yīng)的 1433 端口。
在 Dev, STG, UAT 環(huán)境,都以 sqlv1 為藍(lán)本,使應(yīng)用都連接到在 sqlv1 容器中運(yùn)行的數(shù)據(jù)庫(kù)。開(kāi)發(fā)測(cè)試中出現(xiàn)任何問(wèn)題,都可以拿著 sqlv1 重建一個(gè)新的容器來(lái)運(yùn)行數(shù)據(jù)庫(kù)。
# 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!'
作為數(shù)據(jù)庫(kù)部署,每次構(gòu)建新容器,要關(guān)注的便是編寫增量部署腳本,以替代第一次的數(shù)據(jù)庫(kù)初始化腳本 DBSchemaInit.sql.
在這種發(fā)布流程中,要思考的問(wèn)題是,如何在生產(chǎn)環(huán)境發(fā)布。
數(shù)據(jù)庫(kù)發(fā)布腳本的一致性。
在dev, stg, uat,prod 都是使用了同一套腳本,并且腳本有錯(cuò)誤可以及時(shí)調(diào)整。不至于在單發(fā)生產(chǎn)環(huán)境的時(shí)候,由于在 dev,stg, uat 測(cè)試環(huán)境發(fā)布時(shí),沒(méi)有及時(shí)校驗(yàn)出腳本邏輯上錯(cuò)誤,或者因?yàn)榄h(huán)境的影響,比如大家隨意的在 dev,stg,uat 環(huán)境創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,而導(dǎo)致發(fā)布腳本本身沒(méi)有得以驗(yàn)證正確性與完整性。
數(shù)據(jù)庫(kù)發(fā)布的快捷性。
原本需要dev,stg,uat,prod 都重新部署一臺(tái)新的服務(wù)器。之后,應(yīng)用數(shù)據(jù)庫(kù)發(fā)布腳本。現(xiàn)在只要竭盡全力構(gòu)建一臺(tái)正確可用的 docker 鏡像,基于這份鏡像,可以實(shí)現(xiàn)多個(gè)平臺(tái)同時(shí)部署。而應(yīng)用只需要指定相應(yīng)的 doker 名即可。在多臺(tái)集群環(huán)境中,這種部署手法給運(yùn)維帶來(lái)極大便利。還記得 Linux 的 ssh shell 嘛,發(fā)明遠(yuǎn)程無(wú)密登錄就是為了能讓運(yùn)維在多個(gè)服務(wù)器之間穿梭,而不用一臺(tái)臺(tái)去安裝軟件了。在大數(shù)據(jù)當(dāng)?shù)?,時(shí)不時(shí)要求上千臺(tái)集群服務(wù)器的時(shí)下,docker 可以看做是一劑良藥。
有了上面的經(jīng)驗(yàn),這次就簡(jiǎn)單很多了,就是對(duì) Dockerfile 增加 Volume 指令的修改。本質(zhì)上,是用 Volume 中的磁盤空間來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)文件。
唯一不同的便是 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 指令用來(lái)指定所有掛載的本地文件都被掛載到 /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 目錄下的文件。當(dāng)然我們也可以自己創(chuàng)建一個(gè) volume 掛載上去。
到此,關(guān)于“發(fā)布SQL Server Docker有哪些方式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!