Docker 和傳統虛擬化方式的不同之處,在於少了Guest OS這層,除了大幅減少磁碟空間,最重要是獲得本機的執行效能,直接使用本地主機的作業系統。詳細介可,可閱讀這份教學文件。
一般而言,我們會在Docker Container虛擬環境中運行獨立服務,透過IP Port對映與外界Host溝通互動。在VMware裏有個Unity功能,可以把Guest VM虛擬環境下的視窗,拉到外面Host運行,感覺就像Host執行一個視窗程式一樣。
Docker也可以透過共用目錄(Docker Volume)讓Host與Guest VM共用同一個資料夾,讓Guest VM去執行共用的程式碼,產生最後結果,再以TTY Console回報至Host,宛如是在本地Host端執行程序一樣。
以下是示範步驟:
- 在Ubuntu Linux下安裝Docker:
# apt-get install docker.io
約45.4MB
# docker -v
Docker version 1.10.3, build 20f81dd
- 到Docker Hub尋找官方mono image:
下載官方mono映像檔image:
# docker pull mono
查看該image資訊
# docker images
- 在建立mono container之前,我們先建立一個host與container共用目錄(Docker Volume)。
# mkdir /opt/hello
建立host本地目錄,應用程式依常規放在/opt/下面(相當Windows的C:\Program Files\XXX)。
# nano /opt/hello/hello.cs
建立主程式CS源碼。
- 建立以mono image為主的container, 並掛載/opt/hello這個分享共用目錄。
# docker run --name mono_container -v /opt/hello:/opt/hello -d -i -t mono /bin/bash
--name: 命名該container名稱
-v: 建立分享Volume目錄,指定目錄的對應關係 host_path:container_path
-d: 該Container以Daemon方式運行,避免建立container時初始狀態為Exited。
- i –t: 以-i (Interactive)互動方式及獲取-t (TTY)運行container中的/bin/bash環境。
mono: 指定Image name或ID.
使用 docker ps -a查詢目前container狀態,此container(mono_container)虛擬環境正在運行中。
- 日後要呼叫此container下的虛擬環境及服務,只需要在Host本機輸入docker exec指令即可。
# docker exec mono_container mono -V
查詢container下的mono版本資訊
因此,編譯及執行Host端的/opt/hello/hello.cs源碼檔,意義和修改Guest VM端裏的檔案是同一份的。
# docker exec mono_container mcs /opt/hello/hello.cs
它會編譯hello.cs,並產生hello.exe這個IL檔。
日後在host環境,要執行NET程式,使用以下指令即可:
# docker exec mono_container mono /opt/hello/hello.exe
- 若主機reboot重開機,該docker container不會自動運行,可加入rc.local自動運行:
# vi /etc/rc.local
加入此行指令即可。
docker start mono_container
No comments:
Post a Comment