您好,登錄后才能下訂單哦!
這篇文章主要介紹“發布SQL Server Docker有哪些方式”,在日常操作中,相信很多人在發布SQL Server Docker有哪些方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”發布SQL Server Docker有哪些方式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
鏡像來自于微軟在 Docker Hub 上提供的初始容器。
SQL 腳本:
CREATE DATABASE CRM GO USE CRM GO CREATE TABLE dbo.Account( AccountId INT IDENTITY(1,1), AccountName NVARCHAR(200) )
保存為 DBSchemaInit.sql
構建自定義的容器鏡像,最重要的是編寫 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 重建一個新的容器來運行數據庫。
# 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.
在這種發布流程中,要思考的問題是,如何在生產環境發布。
數據庫發布腳本的一致性。
在dev, stg, uat,prod 都是使用了同一套腳本,并且腳本有錯誤可以及時調整。不至于在單發生產環境的時候,由于在 dev,stg, uat 測試環境發布時,沒有及時校驗出腳本邏輯上錯誤,或者因為環境的影響,比如大家隨意的在 dev,stg,uat 環境創建數據庫對象,而導致發布腳本本身沒有得以驗證正確性與完整性。
數據庫發布的快捷性。
原本需要dev,stg,uat,prod 都重新部署一臺新的服務器。之后,應用數據庫發布腳本。現在只要竭盡全力構建一臺正確可用的 docker 鏡像,基于這份鏡像,可以實現多個平臺同時部署。而應用只需要指定相應的 doker 名即可。在多臺集群環境中,這種部署手法給運維帶來極大便利。還記得 Linux 的 ssh shell 嘛,發明遠程無密登錄就是為了能讓運維在多個服務器之間穿梭,而不用一臺臺去安裝軟件了。在大數據當道,時不時要求上千臺集群服務器的時下,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有哪些方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。