2015年7月31日

紀錄文 - Windows 10 發佈

前言

基本上,就這依舊是個紀錄文,紀錄一下 Windows 10 的發表,所以內容不會有什麼新功能介紹之類的,就存粹是個紀錄文…

開始

至 Windows 8 這個雙面刃上市以來,就一直被人家罵到臭頭,就算推出了8.1大家還是不領情… ( 其實小弟我是用的還滿習慣的XDD )
而隨著 Microsoft 的組織改組,新的執行長上任,整個開發團隊開始跑敏捷 Scrum ,更加的在乎使用者的建議:而這個模式下的產物就是 Windows 10

其實看整個新聞過程,Windows 10 從開始列的回歸XDD,就可以明顯感受到很重視使用者的意見,也讓使用者一片叫好 ( 可見開始列真的很重要…但小弟真的無感阿XDD ),而後隨著各個預覽版本,提供給使用者下載,甚至可以免費升級等新聞,也可以看到 Microsoft 正走向不同的路..

而經過長時間的過程 ( 小弟也是長時間的試用,踩坑… ) 終於在 2015/07/29 推出了 Windows 10 ,而版號 10240 更是有深層的含義 ( 2 的 10 次方,就是 Win 10 ),也可以看出微軟工程師是充滿著活力(惡搞)喜好著這份工作的XDD

前面的廢話就先說到這邊,接下來,依舊是讓人無聊乏味的安裝過程,就用安裝過程來紀念這上市的一刻吧~~

首先,安裝的畫面,根本沒變… ( 也合理啦… )

enter image description here

但是速度變快了,根據 FB 朋友的消息,大概都在 10min 左右裝完。

enter image description here

然後重新開機,出現這令人熟悉的Logo。

enter image description here

接著,嗨!我們正在為您進行設定~

enter image description here

完成之後,基本上設定都沒啥變動,唯一發現不同的一點就是這邊可以選擇要加入 Azure AD 或是公司網域,不知道是不是因為小弟安裝的是企業版,所以才跳出這個設定…而且也沒地方可以選擇使用 Microsoft Account 登入….後來只能選擇加入網域,而下一步也沒什麼特別的,就是建立 Local 帳號…

enter image description here

完成後,就可以看到漂亮的桌布,如果要使用 Microsoft Account 還是可以從設定這邊去變更…

enter image description here

當然,其他比較大的變動就是預設使用 Edge 了,能捨棄掉 IE ,真的是太棒了~ ( 當然,用搜尋還是可以招喚出舊 IE ),但至少有了這個舉動,可以讓一些企業開始重視把 IE 扔掉的議題了~

enter image description here

當然還有很多新的功能,例如可以有多個桌面,但是對小弟來說,也是可有可無啦XDD,稍微用了一下,還是不習慣= =….最後比較可惜的,小娜也還沒出現…

最後,在這 Windows 30年頭,也用一個從 Tom 哥那邊看來的影片,紀念一下 Windows 與我們走過的痕跡吧~

Windows 30 年頭

2015年7月30日

建立自己的 Docker image

假設一個情境,如果今天我們的應用程式已經開發完成了,以前還要把 Source Code 拿去客戶端部署,還要設定一堆參數等等,或是今天內部開發完成,要進行測試,也要部署到測試機上,如今有 Docker 了,有沒有辦法,只用前面介紹的 run -p 這個指令,就直接完成安裝!?

基本上,前面那篇,我們直接登入到 Docker 來進行抓取 Source 的動作,並且在裡面執行,最後 Commit ,的確,這是一種方法,也可以建立一個新的image,但是,我們不可能每次要 Run MVC 的時候,都還要登入進去執行吧,那真的很累人…其次,登入容器後,再去下載 Source 感覺也不是很好,準備環境也很麻煩,所以這篇,我們來看看,怎樣來建立自己的 Image。

準備本地端的 Source Code

首先,我們透過git指令,來取得ASP.NET 的 Source Code

git clone https://github.com/aspnet/Home.git aspnet-home

enter image description here

完成後,我們先進入專案的位置。

cd aspnet-home/samples/HelloWeb

enter image description here

建立 Dockerfile

接下來,我們透過文字編輯器,來新建一個 Dockerfile 的檔案,這個檔案主要是用來設定 Docker 容器的細節。

vi Dockerfile

enter image description here

文字的內容如下,第一行表示要用哪一個Image當作基底,接下來,拷貝目前目錄下的所有東西到 app ,然後進入app目錄,接著就來跑一下 kpm restore 這個指令,完成之後,對外的 port 要開 5004,並且於整個容器準備完成之後執行 k kestrel。除此之外,比較常用到的還有MAINTAINER(維護人)和ADD(同樣將檔案加入到image,但如果是壓縮黨會自動解壓縮)

FROM microsoft/aspnet

COPY . /app
WORKDIR /app
RUN [“kpm”, “restore”]

EXPOSE 5004
ENTRYPOINT [“k”, “kestrel”]

enter image description here

Build Image

接下來,我們就可以透過 build 的指令來建立新的image,並且取名為 myapp,後面的 . 表示路徑位置,也就是要指向 Dockerfile的位置。

sudo docker build -t myapp .

enter image description here

很快地就會完成了,完成之後我們可以透過等下指令看一下是否有增加進去。

sudo docker images

enter image description here

Run

完成後,我們就可以拿這個 Image 來進行建置容器的動作,這邊的 -d 代表的是讓容器在背景執行,最後我們再用 docker ps 來查看,就可以發現,他在背景執行了。

sudo docker run -t -d -p 80:5004 myapp

enter image description here

上傳到 Docker Hub

最後,我們可以把我們準備好的 Image 提供給別的使用者共享,我們可以把我們的影像檔傳到 Docker Hub 上,所以在進行最後一個步驟之前,要先去申請 Docker Hub 的帳號。

申請完成之後,我們就可以透過以下指令進行登入。

sudo docker login

enter image description here

那再上傳之前,有一點需要注意,Docker Hub 的格式為 UserName/Repo,所以這邊我們要先改名一下,不然會傳不上去,我們先用以下指令查看我們目前有哪些 Image。

sudo docker images

接下來,我們就可以用以下指令改名,改成 skychang/mapp。

sudo docker tag myapp2:latest skychang/myapp:latest

enter image description here

最後,我們再用 push ,就可以傳到 Docker Hub 嚕!

sudo docker push skychang/myapp

enter image description here

完成後,就可以在 Docker Hub 看到嚕!!

enter image description here

刪除用不到的 Image

如果有用不到的 Image ,可以透過 rmi 的指令移除 image , rmi 後面的參數是代表 image 的名稱

sudo docker images 來查看所有的資訊

sudo docker rmi myapp

enter image description here

參考資料

讓 ASP.NET MVC 執行於 Docker

上一篇,我們看到了,如何安裝 Docker,並且 Run Ubuntu,和進入來管理,而這篇,我們就來使用一下 Microsoft 提供的 ASP.NET 5 Preview Docker Image,順便學一下,如何讓外面的 Port 對應到容器內部的 Port。
這篇基本上是參考這篇並進行調整。

備註:這篇的做法是在容器裡面把 Source Code 丟進去處理,下一篇會在介紹更好的方法。

取得 ASP.NET 5 Docker Image 和執行

首先,我們要先取得 ASP.NET 5 Docker Image,我們可以透過以下指令來取得。

sudo docker pull microsoft/aspnet

enter image description here

完成之後,我們一樣,就可以透過 run 來執行此 Image,但這邊要特別注意一下,這邊多了一個 -p,這個的意思是代表對應的意思,表示要把外面的 80 Port 對應到容器內部的 5004,因為在容器裡面,所有連線都無法連入的,所以必須要自定義 Port。

sudo docker run -p 80:5004 -t -i microsoft/aspnet

enter image description here

下完指令後,我們可以開另外一個終端機,透過以下指令來查看,對應的狀況。

sudo iptables -t nat -nL

看完之後,回到容器內,官方的 Image 基本上是不會有任何 MVC 的 Code 的,他提供的是一個很簡單的 Linux 還境,而裡面包含了 mono 和 K系列的指令 ( 未來會換成D系列 ),所以我們要直接在容器內下載官方範例,而下載要用到wget,因為容器原本沒有此套件,所以我們就用一下 apt-get 來安裝一下吧。

於容器內下載 Source 並執行

apt-get install wget

enter image description here

安裝完成之後,我們就可以透過 wget 來取得 source。

cd ~ && wget https://github.com/aspnet/Home/archive/master.zip && unzip master.zip && rm master.zip

enter image description here

完成之後,我們就只需要執行以下指令,來讓 MVC 專案取得必要的 Lib ,並且啟動。

cd ~/Home-master/samples/HelloMvc && kpm restore && k kestrel

enter image description here

到這邊基本上就ok了,但是,大家別忘記了,我們在Azure的環境啊!!所以Azure的端點也別忘記開啟…

enter image description here

完成之後,我們只要輸入這台Azure VM的網址位置,使用 80 Port就可以看到結果了!!

enter image description here

Commit

最後,如果我們登出的話,就gg了,剛剛做的事情就還要重來一次…Orz…所以這邊我們會用上一個章節教到 Commit 來簽入新版本。

這邊,我們先用以下指令來查看這台容器的ID。

sudo docker ps

之後再下以下指令,來簽入。

sudo docker commit -m=’簽入描述’ -a=’簽入者’ 7ce430e7c072 aspmvc/test:ver1

完成後,我們可以再用 docker ps 來看一下結果。

enter image description here

備註

這篇基本上是參考這篇進行調整,原文內,他並不是在容器內下載 source ,而是在外面下載 source,並且透過掛載的方式掛上去。

掛載的指令如下,將本地 OS 上的目錄掛載到 容器 內,而 ro 代表唯獨。

-v [本地路徑]:[容器路徑]:ro

基本上原文的做法會比較好,畢竟實務上,我們不可能每次都登入到容器裡面去下載 source 然後再簽入,直接從外部掛載的方式,會有極大的彈性,而這篇文章是為了示範,才調整了架構。

參考資料

在Ubuntu運行Docker

首先,在開始前,小弟一定要推薦一下這個網站和這個網站,這個兩個網站寫了很多,而且由淺入深的教學,而這篇文章,一開始會先練習這個網站的前篇教學,並且搭配此網站網站的說明,下一篇,則會使用 Microsoft 提供的 ASP.NET 5 Preview Docker Image 來完成 ASP.NET MVC 應用程式。

安裝 Docker

基本上,Ubuntu 已經有內建了 Docker,或是使用 apt-get 來安裝也是可以的,但是既然神人大大推薦用 curl 的方式取得,那我們這邊就使用 curl 來取得 Docker吧!!

curl -sSL https://get.docker.com/ubuntu/ | sudo sh

enter image description here

完成之後,我們就可以啟動 Docker了!!

sudo service docker start

enter image description here

Hello Docker

接下來,我們先採用另外一位神人大的教學,來簡單的輸出一下 Hello Docker.

sudo docker run ubuntu:12.04 echo ‘Hello Docker’

enter image description here

是的,就是這樣簡單,我們就可以看到Hello Docker!!,但是大家可能會想,啥?不就是只是輸出一個 Hello Docker 啊…這和虛擬化,容器技術有啥關係。

沒錯,別懷疑,這個 Hello Docker 其實是從虛擬化出來的 Ubuntu 12.04 版本 echo 出來的!!!

也就是說,那短短的幾秒鐘時間,Docker 就已經把虛擬的 OS 準備完成,並且執行,且輸出了!!

所以,上面那行指令的意思,就是說,我們要 Run 一個 ubuntu:12.04 版本,並且 run 完成之後,於 Sehll 執行 echo ‘Hello Docker’ . 而在執行的過程中,他就會自動地把 ubuntu 12.04 的 image 載下來,結果如下圖。

enter image description here

完成後,我們就可以透過以下指令,來看看目前這台機器有多少個 image,從下圖就可以看到 Ubuntu 已經安裝上去了。

sudo docker images

enter image description here

登入終端機

但是,我們不可能每次都把一整串的字串,串到 run 後面吧…我們需要可以登入,登入!!登入啊啊啊!!

當然,這也可以做到,我們可以下以下的指令,這個指令的意思就是,建立容器的時候,順便建立一個終端機( -t ),並且建立與容器標準輸入的互動進行連結 ( -i ),這樣你就可以在裡面下指令操作了~~

sudo docker run -t -i ubuntu:12.04

但是,請注意,雖然我們從終端機離開,並不會關掉容器,但如果我們把容器 Kill 或是 移除,那你裡面做的所有事情都會不見…如果你在裡面做了些事情,而希望把裡面的東西存下來,就必須使用 commit 指令,其中7ce430e7c072是表示目前的容器ID ( 可以透過 docker ps 來查看目前執行的容器 ),而aspmvc/text:ver1 代表的是容器的名稱和Tag名稱。
(此指令要在容器外面下喔!)

sudo docker commit -m=’簽入描述’ -a=’簽入者’ 7ce430e7c072 aspmvc/test:ver1

重新登入容器

另外,如果你登出了,想要在登入進去那一個容器,我們可以先用

sudo docker ps -a 來查到所有目前執行的容器。

然後再用以下指令登入( 後面是id ),下面兩個的差異,一個是直接回到容器裡,另外一個則會開另外一個終端機,目前建議使用第二種方式。

sudo docker attach 665b4a1e17b6

sudo docker exec -i -t a66289aeefa6 bash

停止與刪除背景執行的容器

若有執行中的容器,想要停止,可以透過底下的指令來完成。

sudo docker ps -a

sudo docker stop 9162a162f840

停止後,就可以用 rm 指令來移除容器。 ( 或是直接用 rm -f 來強制停止)

sudo docker rm 9162a162f840

如果有太多容器,想要一次全部移除,可以下以下指令

sudo docker rm $(sudo docker ps -a)

enter image description here

基本上,初步就到這篇,下一篇我們會透過 Microsoft 提供的容器,來建立 ASP.NET MVC 應用程式。

參考資料

Azure上的Ubuntu與遠端桌面管理 VNC

大家應該都很清楚,透過Azure可以輕鬆的建立Windows的VM,但實際上,要建立Linux的VM也一樣容易,
而本篇,就由小弟來為大家介紹Ubuntu in Azure。

建立Ubuntu VM 與 登入

建立Linux VM的方式基本上與建立Windows沒兩樣,這邊小弟選擇了Linux裡面大家很常使用的Ubuntu來作為教學。

而這邊要特別注意,我們選擇的是Ubuntu 14.10的版本,而後面開啟遠端設定的版本,也是針對14.10,如果您使用了別的版本,那可能會照成設定失敗的狀況。

enter image description here

接下來,我們選擇 Ubuntu 14.10的版本,其餘的設定和建立一般的Windows Server差不多,一樣可以選擇地區或是資源群組。

enter image description here

完成之後,我們沒辦法和 Windows 一樣,直接下載 RDP 的檔案來連線,我們必須透過 SSH 來進行連線。
這邊要注意一下,我們要在後面加上 -l 的參數,並且帶入帳號,不然他預設會用我們目前終端機的帳號,第一次登入的時候,會要求將金鑰寫入,所以這邊一定要按下 yes ,然後就可以輸入帳號密碼了~

enter image description here

VNC 開始之前

基本上,到上面那邊的操作,就已經可以順利登入了,但小弟畢竟是懶惰的,如果遠端登入也有 UI 那不是更棒嗎!!而目前,Ubuntu已經預設提供了 VNC 外,也提供透過Microsoft Remote Desktop ( RDP )的方式來遠端登入,( 其實底層還是 VNC 只是中間透過xRDP 來進行命令的轉換 ),基本上透過 RDP 的速度會比較快,但是目前 Ubuntu 預設的桌面和 xRDP 有一些衝突,所以要另外安裝其他的桌面環境,而這邊為了初步體驗順利,我們就直接來看看,透過 VNC 的方式來進行遠端登入。

但開始前,小弟先提醒大家,目前小弟測試使用 VNC 登入,效果不是很好,滿慢的,所以有這個需求的朋友,可能要先有心理準備…

更新 Ubuntu 與 安裝 Ubuntu Desktop

裝完 Ubuntu 後,第一步當然就是更新…所以我們要下

sudo apt-get update

來更新。

enter image description here

接下來,我們就可以裝預設的桌面環境了。

sudo apt-get install ubuntu-desktop

這邊裝的過程有點久,大家可能要耐心等待一下。

enter image description here

安裝 x11vnc 與 設定

接下來,我們要安裝 x11vnc 來當作我們的 VNC Server
sudo apt-get install x11vnc

enter image description here

安裝完成之後,要設定遠端的登入密碼。
sudo x11vnc -storepasswd /etc/x11vnc.pass

最後,我們要到/etc/init/的目錄下,新增加x11vnc.conf這個檔案

小弟這邊直接使用 vi 來進行編輯。

sudo vi /etc/init/x11vnc.conf

內容如下,但要小心/usr/bin/x11vnc 等一長串,其實是”同一行”!!

start on login-session-start
script
/usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -rfbauth /etc/x11vnc.pass -forever -bg -rfbport 5900 -o /var/log/x11vnc.log
end script

enter image description here

存擋完成之後,我們就可以重新開啟Ubuntu

sudo reboot

enter image description here

設定 Azure 端點

當然,最重要的,也別忘記設定 Azure 的端點。

enter image description here

連線

接下來,就可以透過 VNC 的軟體進行登入嚕!! ( 小弟這邊是直接使用 OSX 內建的 VNC 軟體 )
只要在 Safari 裡面輸入 VNC://網址,就可以進行登入

enter image description here

接下來輸入密碼

enter image description here

然後就可以成功進去了!!(這邊的登入密碼,就是建立 VM 時所 Key 的密碼,但有時候會因為網路的延遲,造成大小寫轉換失效,所以如果進不去,可以多試驗幾次)

enter image description here

總結

基本上,這樣就可以輕鬆的登入到 Ubuntu 的遠端畫面,但小弟建議,還是用終端機吧…真的快很多….

參考資料