日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
實(shí)戰(zhàn)教程:如何Docker化你的Mono應(yīng)用程序

實(shí)戰(zhàn)教程:如何docker化你的mono應(yīng)用程序

譯文
作者:布加迪編譯 2015-09-06 09:17:31

云計(jì)算 Docker是一種非常方便、節(jié)省時(shí)間的方法,它可以幫你實(shí)現(xiàn)軟件從開發(fā)環(huán)境始終如一地轉(zhuǎn)移到生產(chǎn)環(huán)境。本文將舉例表明如何結(jié)合使用Docker和Mono技術(shù),希望你能從中得到幫助。

【51CTO.com快譯】Docker發(fā)布至今才過去了兩年多點(diǎn)的時(shí)間,現(xiàn)在從Docker中心(Docker Hub)可以下載的映像數(shù)量早已超過13000個(gè)。如果你剛接觸Docker,最恰當(dāng)?shù)拿枋鼍褪?,這是一種可以在任何Linux服務(wù)器上運(yùn)行的虛擬容器里面封裝應(yīng)用程序及其依賴項(xiàng)的一種方式。相比在虛擬機(jī)和操作系統(tǒng)里面封裝應(yīng)用程序,其要求低得多。

編寫Mono應(yīng)用程序

C#是受歡迎程度僅次于Java和C/C++的一門編程語言,它是Windows上的.NET環(huán)境的一部分。C#發(fā)布后沒過多久,就啟動(dòng)了Mono項(xiàng)目,旨在開發(fā)與NET相對應(yīng)的環(huán)境,不過是在Linux和Mac上運(yùn)行。盡管最初有人懷疑這是微軟通過專利權(quán)攻擊Linux的一種方式,不過Mono已得到了發(fā)展,如今成為跨平臺移動(dòng)開發(fā)系統(tǒng)Xamarin的基礎(chǔ)。

.NET和Mono之間存在一些重大的區(qū)別,比如說WinForms和WPF只面向Windows;不過大體上來說,你拿來大多數(shù).NET編譯過的C#可執(zhí)行文件后,即可將它們拷貝到安裝有Mono的Linux系統(tǒng),用下面這個(gè)命令運(yùn)行相應(yīng)的應(yīng)用程序:

  
 
 
 
  1. Mono AppName.exe 

本文的目的是,舉例表明如何結(jié)合使用Docker和Mono技術(shù)。

為何是Docker?

為什么Docker那么好?假設(shè)你想在Nginx、Centos或PostgreSQL上試用某個(gè)軟件。要不是Docker,你可能得花幾個(gè)小時(shí)來完成安裝、配置等操作。要是有了Docker,實(shí)際上在幾秒鐘內(nèi)就能完成。

Docker是開源技術(shù),會(huì)出現(xiàn)在下一個(gè)Windows 2016 Server版本中,不過眼下它的使用僅限于Linux和Mac OS X。使用開源Oracle VirtualBox,你就可以安裝Docker,并在Windows上的VirtualBox里面的虛擬機(jī)中運(yùn)行。比如說,你可以將Ununtu Server之類的標(biāo)準(zhǔn)Linux安裝到VirtualBox中,或者使用一款名為Boot2Docker的特殊的幫助應(yīng)用程序(https://docs.docker.com/installation/windows/#running-docker)。

開始使用Docker

如果你剛接觸Docker,請閱讀用戶指南(http://docs.docker.com/userguide/)。你需要了解運(yùn)行中的應(yīng)用程序、在容器中工作以及讓應(yīng)用程序成為守護(hù)進(jìn)程。這不是很難;用戶指南頁面內(nèi)容齊全、通俗易懂。

構(gòu)建在Docker中運(yùn)行的應(yīng)用程序時(shí),情況變得有點(diǎn)復(fù)雜。我用C#編寫的應(yīng)用程序是一個(gè)簡單的“計(jì)算頭1000個(gè)素?cái)?shù)”程序,使用埃拉托斯特尼篩法(sieve of Eratosthenes)。它輸出2到1000之間的所有素?cái)?shù)。這個(gè)程序編譯好后在Windows上運(yùn)行,也可以在安裝Mono的任何Linux系統(tǒng)上運(yùn)行。

  
 
 
 
  1. using System; 
  2.  
  3. namespace sieve 
  4.     class Program 
  5.     { 
  6.         const int HiPrime=1000; 
  7.         static readonly bool[] Primes = new bool[HiPrime];//by default they're all false 
  8.  
  9.         private static void Main(string[] args) 
  10.         { 
  11.  
  12.             for (var i = 2; i < HiPrime; i++) 
  13.             { 
  14.                 Primes[i] = true;//set all potential primes true 
  15.             } 
  16.  
  17.             for (var j = 2; j < HiPrime; j++) 
  18.             { 
  19.                 if (!Primes[j]) continue; 
  20.                 for (long p = 2; (p * j) < HiPrime; p++) 
  21.                 { 
  22.                     Primes[p * j] = false; 
  23.                 } 
  24.             } 
  25.  
  26.             for (var index = 2; index < Primes.Length; index++) 
  27.             { 
  28.                 if (Primes[index]) Console.WriteLine(index); 
  29.             } 
  30.  
  31.         } 
  32.     } 

我們想在容器里面運(yùn)行這個(gè)應(yīng)用程序。不妨先看一下更簡單的應(yīng)用程序:Hello World,然后再回到這個(gè)話題。

為了力求完整,我們將在Ubuntu 14.04(Trusty Tahr)下運(yùn)行Hello World。如果你安裝了Docker,可以使用這個(gè)命令,運(yùn)行只有一行的Hello World。

  
 
 
 
  1. sudo docker run ubuntu:14.04 /bin/echo 'Hello world' 

圖1 運(yùn)行echo

這里,Ubuntu 14.04就是容器。你第一次運(yùn)行該應(yīng)用程序時(shí),它會(huì)下載容器,并安裝,整個(gè)過程大概只要1分鐘,如果是68MB大小的映像,時(shí)間稍微長一點(diǎn)。然后,它運(yùn)行命令/bin/echo ‘Hello World’,然后在終端上輸出Hello World。第二次運(yùn)行及之后運(yùn)行時(shí),它會(huì)立即運(yùn)行。

所以想運(yùn)行篩法應(yīng)用程序,我們就要確保Mono已安裝,因?yàn)槲覀儾粌H需要編譯篩法,還要運(yùn)行它。Docker注冊中心(https://registry.hub.docker.com)列出了一批Mono軟件庫,第一個(gè)軟件庫似乎很受歡迎。那第一個(gè)Mono鏈接可以將你引到該頁面(https://hub.docker.com/_/mono/)。

現(xiàn)在為了定義發(fā)生的操作,我們就要?jiǎng)?chuàng)建一個(gè)文件,具體來說名為Docker文件(Dockerfile)。

Dockerfile是什么?

Dockerfile是一個(gè)文本文件,里面含有獲取和構(gòu)建文件的所有指令。

參考頁面含有關(guān)于Docker文件的頁面。就示例篩法程序而言,這個(gè)文件很短。以下是我構(gòu)建的Dockerfile:

  
 
 
 
  1. FROM mono:latest 
  2. ADD . /home/david/sieve 
  3. RUN mcs /home/david/sieve/sieve.cs 
  4. CMD [ "mono", "/home/david/sieve/sieve.exe" ] 

命令使用大寫字母。FROM指定了使用的Mono映像。在這里,它是mono:latest。你可以指定你在此想使用哪個(gè)版本的Mono。ADD將文件拷貝到指定文件夾中,RUN使用Mono編譯器mcs來編譯,CMD使用Mono命令運(yùn)行可執(zhí)行文件。

你第一次運(yùn)行構(gòu)建的文件時(shí),它會(huì)獲取本地沒有的任何內(nèi)容。這個(gè)命令負(fù)責(zé)構(gòu)建:

  
 
 
 
  1. sudo docker build -t sieve . 

圖2 創(chuàng)建dockerfile

然后,這個(gè)命令運(yùn)行篩法:

  
 
 
 
  1. sudo docker run sieve 

圖3 運(yùn)行sieve

瞧,一個(gè)Docker化的Mono應(yīng)用程序就這樣問世了,顯示了最后一批素?cái)?shù)?,F(xiàn)在,Docker方面可以進(jìn)行諸多操作,比如說讓應(yīng)用程序成為守護(hù)進(jìn)程顯得特別重要,因?yàn)檫@讓W(xué)eb服務(wù)器及其他服務(wù)器成為了可能。

結(jié)束語

Docker是一種非常方便、節(jié)省時(shí)間的方法,以便在不同的平臺上試用軟件。有了它,就很容易將軟件從開發(fā)環(huán)境始終如一地轉(zhuǎn)移到生產(chǎn)環(huán)境。它讓應(yīng)用程序可以連同操作系統(tǒng)放入到容器中,好像在虛擬機(jī)上運(yùn)行,不過占用的空間卻少得多。每個(gè)虛擬機(jī)都有一份操作系統(tǒng),可能會(huì)有數(shù)GB大小。換成是Docker,其實(shí)只有一個(gè)共享的操作系統(tǒng)。

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】


網(wǎng)站欄目:實(shí)戰(zhàn)教程:如何Docker化你的Mono應(yīng)用程序
標(biāo)題網(wǎng)址:http://www.dlmjj.cn/article/djieeoh.html