用 Docker 現代化你的傳統企業!|航海日誌 Vol.22


經過 Docker 網絡研討會將傳統的應用現代化git




IT 公司老是花費 80 %的預算來維護現有的應用,而僅花費 20 %的預算用於創新工做。這個比例在過去十年間沒有發生任何改變,可是創新的壓力一直存在。不管它直接來源於客戶的新需求,或者是來源於你的管理鏈,它的內容都是相同的:你須要花更少的代價作更多的事github


值得慶幸的是,Docker 有現代化傳統應用的功能。你可使用現有的、與你業務相同的應用程序,使其效率提升 70 %,更安全,且適用於任何基礎架構。web


➤ 使用自定義資源擴展 Kubernetes 1.7sql



若是想要構建集羣應用程序或軟件即服務。在開始編寫一行應用程序代碼以前,你必須解決一系列架構問題,包括安全性,多租戶,API 網關,CLI,配置管理和日誌記錄。docker


那麼又該如何將全部的基礎設施從 Kubernetes 中充分利用, 使得在開發中節省一些人力時間, 並專一於實現你專屬的服務?shell


最新的 Kubernetes 1.7 添加了一個名爲 CustomResourceDefinitions(CRD)的重要功能,它能夠插入您本身的託管對象和應用程序,就像它是一個本地的Kubernetes 組件同樣。這樣,您能夠利用 Kubernetes CLI,API 服務,安全性和集羣管理框架,而無需修改 Kubernetes 或瞭解其內部。咱們在這裏使用 Iguazio 將 Kubenetes 與咱們新的實時「無服務器」項目和數據平臺對象無縫集成。數據庫


➤ Docker 環境下的 CI/CDwindows



Docker 的一大優點在於它可以實現無縫的 CI/CD 流程;容器只是一個運行的 Docker 鏡像的只讀實例,更新容器就像更新鏡像文件同樣簡單,而後咱們還能夠根據更新的鏡像從新部署容器。甚至有免費的工具能夠持續監控鏡像存儲庫,並在檢測到更新的鏡像的瞬間從新部署容器。然而,雖然這簡化了容器的運行,但建立和更新鏡像仍然須要咱們手動操做。安全


將 CI/CD 概念提高到一個新的水平,即建立一個開發流程,自動化您在軟件交付過程當中的全部步驟。典型的單一業務流程包括如下基本步驟:bash


  • 構建 — 啓動構建過程,其中源代碼被轉換爲編譯的僞像並打包在 Docker 鏡像中。

  • 測試 — 使用支持您的框架的任何測試工具在 Docker 容器內運行單元測試。

  • 推送 — 將測試的 Docker 鏡像推送到 Docker 註冊表服務中,例如 Docker Hub。

  • 部署 — 將 Docker 鏡像從註冊表服務下載到適用的分段/生產 Docker 環境。

  • 運行 - 從一個或多個鏡像實例化容器或服務。


CI/CD 的下一個邏輯擴展是經過 webhook 將開發代碼庫徹底集成到開發管道中;簡單地說,這容許在代碼存儲庫中發生事件(例如代碼提交或合併)時執行自動構建部署流水線流程。經過這種集成,每當開發人員將代碼提交到存儲庫時,幾秒鐘後,Docker 容器將與開發人員的更改結果相結合,而後能夠將其用於實時集成測試。


ETP(Emerging Technology Partners) 研究和驗證了市場上最全面的以容器爲中心的 CI/CD 功能解決方案。咱們的解決方案容許您將集成測試,UI 測試或性能測試所需的整個環境轉化爲構建的一部分,從而容許您測試任何提交或 PR。經過咱們的解決方案,開發人員和測試人員能夠快速找到迴歸,並在分期前進行修復。採用該方案能夠加快開發週期,而且節省時間和精力。


➤ 使用 Docker 建立 SQL Server 容器


到目前爲止,我關於容器的文章一直在討論僅使用單一容器的狀況。在現實世界中,狀況不多是這樣的。在任什麼時候候,主機上都運行許多個容器(我有 30 多個)。

我須要一種方法來簡單的開啓、運行多個容器。可行的兩種辦法:


  • 應用服務器驅動

  • 容器主機驅動


在應用服務器驅動方法中,應用程序服務器將與容器主機通訊,構建運行容器並獲取它的詳細信息(例如端口號)。


這種點對點的模式效果良好,由於只有在須要的狀況下,容器才能被啓動和使用,從而節省了主機上的資源。可是,這意味着必須等待容器成功啓動之後,應用程序才能開始工做。OK,我知道啓動容器的過程很快,可是我所要達到的目的是減小部署時間。


若是咱們知道須要多少個容器?若是咱們但願在容器部署後,應用能直接與它們相鏈接?


接下來我會向大家介紹--使用 docker compose 一次性構建多個容器的全部步驟。


Compose 是一個用於定義和運行多容器 Docker 應用程序的工具。


做爲 SQL Server 開發者,咱們只對應用程序感興趣,但這並不意味着咱們得到 compose 的優點。


我要作的是按步驟啓動運行 SQL Server 的 5 個容器,全部這些容器都使用不一樣的sa密碼監聽不一樣的端口。


在執行命令以前的準備工做。我將在個人 C:\驅動器上建立幾個文件夾,這些文件夾將用於保存 compose 和 dockerfile:

mkdir C:\docker  
mkdir C:\docker\builds\dev1  
mkdir C:\docker\compose  複製代碼

在 C:\docker\builds\dev1 目錄中,我將放入數據庫文件和 dockerfile


注:- 注意 dockerfile 的名稱(dockerfile.dev1)


如下是我 dockerfile 的代碼:

# building our new image from the microsft SQL 2017 image
FROM microsoft/mssql-server-windows
 
 
# creating a directory within the container
RUN powershell -Command (mkdir C:\\SQLServer)
 
 
# copying the database files into the container
# no file path for the files so they need to be in the same location as the dockerfile
COPY DevDB1.mdf C:\\SQLServer
COPY DevDB1_log.ldf C:\\SQLServer
 
COPY DevDB2.mdf C:\\SQLServer
COPY DevDB2_log.ldf C:\\SQLServer
 
COPY DevDB3.mdf C:\\SQLServer
COPY DevDB3_log.ldf C:\\SQLServer
 
COPY DevDB4.mdf C:\\SQLServer
COPY DevDB4_log.ldf C:\\SQLServer
 
COPY DevDB5.mdf C:\\SQLServer
COPY DevDB5_log.ldf C:\\SQLServer
 
 
# attach the databases into the SQL instance within the container
ENV attach_dbs="[{'dbName':'DevDB1','dbFiles':['C:\\SQLServer\\DevDB1.mdf','C:\\SQLServer\\DevDB1_log.ldf']}, \ {'dbName':'DevDB2','dbFiles':['C:\\SQLServer\\DevDB2.mdf','C:\\SQLServer\\DevDB2_log.ldf']}, \ {'dbName':'DevDB3','dbFiles':['C:\\SQLServer\\DevDB3.mdf','C:\\SQLServer\\DevDB3_log.ldf']}, \ {'dbName':'DevDB4','dbFiles':['C:\\SQLServer\\DevDB4.mdf','C:\\SQLServer\\DevDB4_log.ldf']}, \ {'dbName':'DevDB5','dbFiles':['C:\\SQLServer\\DevDB5.mdf','C:\\SQLServer\\DevDB5_log.ldf']}]"複製代碼

在 C:\docker\compose 目錄下,我建立了一個 docker-compose.yml 文件用於定義我想在容器中運行的服務。


改文件的代碼:

# specify the compose file format
# this depends on what version of docker is running
version: '3'
 
 
# define our services, all database containers
# each section specifies a container... 
# the dockerfile name and location...
# port number & sa password
services:
  db1:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing11@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15785:1433"
  db2:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing22@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15786:1433"
  db3:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing33@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15787:1433"
  db4:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing44@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15788:1433"
  db5:
    build:
        context: C:\docker\builds\dev1
        dockerfile: dockerfile.dev1
    environment:
      sa_password: "Testing55@@"
      ACCEPT_EULA: "Y"
    ports:
      - "15789:1433"複製代碼

注: - 要檢查哪一個版本的 docker 與哪一個 compose 文件格式兼容,https://docs.docker.com/compose/compose-file/ 查看兼容表。


既然咱們建立好了文件,讓咱們運行咱們的第一個 compose 命令。

docker-compose複製代碼


注: -這是一個測試命令,若是安裝了它,您應該能看到一個幫助參考(您能夠跳過下一部分)。


那麼咱們須要安裝。運行:

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.14.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\docker\docker-compose.exe複製代碼

上面命令中的1.14.0是最新版本。要檢查最新版本,請跳轉到這個(https://github.com/docker/compose/releases)。


安裝完成後,請驗證版本:

docker-compose version複製代碼


在運行 compose 命令以前,進到 C:\docker\compose 目錄下。

cd C:\docker\compose複製代碼

如今咱們能夠運行 compose 命令。使用 compose 構建容器的命令很是簡單:

docker-compose up -d複製代碼


該腳本基於 docker-compose.yml,並構建了 5 個引用 dockerfile.dev1 的容器。


我能夠經過運行如下指令來確認:

docker ps複製代碼


完成,五個容器正在運行!經過使用 docker compose,咱們可使用一個命令構建運行 SQL 的多個容器。這對構建開發環境幫助很大,咱們部署了應用程序以後,它們能夠當即鏈接到容器中的 SQL。


這一期的『航海日誌』就到這裏,下期再浪~


參考連接

  • https://blog.docker.com/2017/07/modernize-traditional-applications-docker-webinar-recap/

  • https://thenewstack.io/extend-kubernetes-1-7-custom-resources/

  • https://www.linkedin.com/pulse/cicd-docker-environments-neil-cresswell

  • https://dbafromthecold.com/2017/07/12/creating-sql-server-containers-with-docker-compose/


做者介紹

夏巖:DaoCloud 技術顧問,僞の全棧工程師 && 語言愛好者。

楊雪穎 Misha:DaoCloud 技術顧問,能文能擼碼の通用型選手,兼 Labs 吉祥物。


上期回顧:

容器技術標準化大統一,OCI V1.0 正式發佈!|航海日誌 Vol.21

相關文章
相關標籤/搜索