Openstack.DockerDevOps
1、Nova
nova flavor-list 查看配置模板列表
nova image-list 查看鏡像列表
nova secgroup-list 查看安全規則
nova boot --flavor m1.tiny --image cirros-0.3.4-x86_64 --nic net-id=DEMO_NET_ID --security-group default --key-name demo-key demo-instance1啟動虛機
nova-manage service list nova服務列表,服務所在物理點和域,以及服務狀態
nova list 列出虛機,在執行該命令前,得先source 帳戶openrc文件
nova show uuid(虛機id) 可以查看該虛機的詳細信息,如虛機名,鏡像模板,啟動時間等等。如果要查看所在物理點,需在執行該命令前,先source 管理員openrc文件
nova live-migration 熱遷移
nova evacuate uuid 物理節點號 冷遷移虛機到新的物理點
nova start uuid 開機
nova stop uuid 關機
nova delete uuid 刪除虛機
nova reset-state uuid 重置虛機狀態
nova reboot --hard uuid 對虛機進行硬重啟
nova reset-state --active uuid 將虛機狀態重置為active,對于部分error虛機無法刪除時,運行該命令再刪除一般能將虛機刪除
nova get-vnc-console demo-instance1 novncnn 獲取到VNC的web登錄地址,直接輸入獲取到的http地址到瀏覽器即可登錄虛機
nova volume-list查看volume列表
nova volume-attach demo-instance1 volume_id 將volume掛載到demo-instance1虛機
##########################################################################
簡述 Docker
2017/05/17 | 分類: 行業資訊 | 0 條評論 | 標簽: DOCKER
分享到:7
原文出處: waylau
Docker 是 Golang 編寫的, 自 2013 年推出以來,受到越來越多的開發者的關注。如果你關注最新的技術發展,那么你一定聽說過 Docker。不管是云服務還是微服務(Microservices),越來越多的廠商都開始基于 Docker 作為基礎設施自動化的工具。那么什么是 Docker?Docker與傳統的虛擬機有什么區別?為何要采用 Docker?如何使用 Docker?
本文,就針對上述提到的問題,來簡單介紹下 Docker。
什么是 Docker
Docker 是開源的應用容器引擎。
Docker 可以讓你將所有應用軟件以及它的以來打包成軟件開發的標準化單元。
Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時、系統工具、系統庫)打包到一起,這就保證了不管是在什么樣的運行環境,總是能以相同的方式運行。就好像 Java 虛擬機一樣,“一次編寫,到處運行(Write once, run anywhere)”,而 Docker 是“一次構建,到處運行(Build once,run anywhere)”。
Docker 是一種“容器即服務”(Docker Containers as a Service ,簡稱 CaaS),使得開發和IT運營團隊可以對于應用的構建、發布、運行更加敏捷和可控。
概況的說: Docker 是為開發人員和系統管理員用于構建、發布、并運行分布式應用程序的開放式平臺。該平臺由 Docker 引擎(一個便攜、輕巧的運行時和打包工具) 和 Docker Hub (一個共享應用程序和自動化工作流的云服務)等組成。Docker 可以使應用程序從組件迅速組裝并消除了開發、質量保證和生產環境之間的摩擦問題。這樣一來,IT部門可以更快地發布,而這些應用程序不管是運行在筆記本電腦、數據中心的虛擬機,還是任何的云,其運行過程和結果都是一致的。
我們再來看下 Docker 的 Logo 。很明顯,這是一只鯨魚,它托著許多集裝箱。我們可以把宿主機可當做這只鯨魚,把相互隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程序。這 Logo 簡直的太形象了!
Docker 的優點
輕量級:所有容器在一臺機器上共享同一個操作系統內核,這樣他們立即開始,并更有效地利用內存。Image 是從分層文件系統的構建,這樣他們能夠共享公共文件,使得磁盤使用率和 Image 的下載更加高效。
開放:Docker 容器是基于開發的標準,允許容器運行在主流的 Linux 發布版和 Microsoft 操作系統作為所有的基礎設施。
安全:容器使得應用程序彼此隔離,而基礎架構同時為應用程序提供了額外的保護層。
Docker 與 虛擬機的區別
容器與虛擬機有著類似的資源隔離和分配的優點,但不同的架構方法使容器能夠更加便攜,高效等。
虛擬機的架構
每個虛擬機都包括應用程序、必要的二進制文件和庫以及一個完整的客戶操作系統(Guest OS),盡管它們被分離,它們共享并利用主機的硬件資源,將近需要十幾個 GB 的大小。
容器的架構
容器包括應用程序及其所有的依賴,但與其他容器共享內核。它們以獨立的用戶空間進程形式運行在主機操作系統上。他們也不依賴于任何特定的基礎設施,Docker 容器可以運行在任何計算機上,任何基礎設施和任何云上。
Docker 的容器利用了 LXC,管理利用了 namespaces 來做權限的控制和隔離,cgroups 來進行資源的配置,并且還通過 aufs 來進一步提高文件系統的資源利用率,而這些技術都不是 Docker 獨創。
LXC
LXC 與虛擬機的不同之處在于,它是一個操作系統級別的虛擬化環境,而不是硬件虛擬化環境。他們都做同樣的事情,但 LXC 是操作系統級別的虛擬化環境,虛擬環境有它自己的進程和網絡空間,而不是創建一個完整成熟的虛擬機。因此,一個 LXC 虛擬操作系統具有最小的資源需求,并啟動只需幾秒鐘。
正如你可以在下圖中看到的,左側是 LXC 虛擬的 Ubuntu ,默認安裝使用 11 MB 大小。
Docker 與 Microservices 的關系
Microservices(微服務) 依賴于“基礎設施自動化”,而 Docker 正是“基礎設施自動化”的利器。可以說 Docker 的火爆,一定程度上也帶動了微服務架構的興起,而微服務的廣泛應用也促進了 Docker 繁榮。可以說兩者相輔相成。
有關微服務的介紹,可以異步至《簡述 Microservices(微服務)》。
為啥要用 Docker
開發更加敏捷:Docker 讓開發人員可以自由定義環境,創建和部署的應用程序更快、更容易,IT 運維人員快速應對變化也更加靈活性。
更加可控:Docker 使得開發人員保存從基礎設施到應用的代碼,幫助 IT 運維人管理擁有標準的、安全的、可擴展的操作環境。
高可移植性:Docker 允許自由選擇,可以是從筆記本電腦到一個團隊,從私人基礎設施到公共云提供商。
這樣,你可以專注于開發應用,其他的繁瑣事交給 Docker 去做吧。
如何使用 Docker
真是一個大話題,本文暫時不會詳細涉及,會另外撰文介紹。如果對 Docker 抱有興趣,可以參閱市面上的書籍:
《The Docker Book》(James Turnbull)
《Docker : Up and Running 》(Karl Matthias、Sean P. Kane)
《Docker in Action》(Jeff Nickoloff)
《Using docker》(Adrian Mouat )
《給程序員的開源、免費圖書集合》收錄了幾本 Docker 免費的書籍有:
《Docker —— 從入門到實踐》
《Docker Cheat Sheet》
《Docker 入門實戰》
《Docker 中文指南》
################################################################################
使用 Docker 搭建 Java Web 運行環境
2016/09/30 | 分類: WEB開發 | 1 條評論 | 標簽: DOCKER, JAVAWEB
分享到:21
Docker 是 2014 年最為火爆的技術之一,幾乎所有的程序員都聽說過它。Docker 是一種“輕量級”容器技術,它幾乎動搖了傳統虛擬化技術的地位,現在國內外已經有越來越多的公司開始逐步使用 Docker 來替換現有的虛擬化平臺了。作為一名 Java 程序員,我們是時候一起把 Docker 學起來了!
本文會對虛擬化技術與 Docker 容器技術做一個對比,然后引出一些 Docker 的名詞術語,比如:容器、鏡像等,隨后將使用 Docker 搭建一個 Java Web 運行環境,最后將對本文做一個總結。
我們先來回顧一下傳統虛擬化技術的體系架構:
可見,我們在宿主機的操作系統上,可安裝了多個虛擬機,而在每個虛擬機中,通過虛擬化技術,實現了一個虛擬操作系統,隨后,就可以在該虛擬操作系統上,安裝自己所需的應用程序了。這一切看似非常簡單,但其中的技術細節是相當高深莫測的,大神級人物都不一定說得清楚。
凡是使用過虛擬機的同學,應該都知道,啟動虛擬機就像啟動一臺計算機,初始化過程是相當慢的,我們需要等很久,才能看到登錄界面。一旦虛擬機啟動以后,就可以與宿主機建立網絡連接,確保虛擬機與宿主機之間是互聯互通的。不同的虛擬機之間卻是相互隔離的,也就是說,彼此并不知道對方的存在,但每個虛擬機占用的都是宿主機的硬件與網絡資源。
我們再來對比一下 Docker 技術的體系架構吧:
可見,在宿主機的操作系統上,有一個 Docker 服務在運行(或者稱為“Docker 引擎”),在此服務上,我們可開啟多個 Docker 容器,而每個 Docker 容器中可運行自己所需的應用程序,Docker 容器之間也是相互隔離的,同樣地,都是占用的宿主機的硬件與網絡資源。
Docker 容器相對于虛擬機而言,除了在技術實現上完全不一樣以外,啟動速度較虛擬機而言有本質的飛躍,啟動一個容器只在眨眼瞬間。不管是虛擬機還是 Docker 容器,它們都是為了隔離應用程序的運行環境,節省我們的硬件資源,為我們開發人員提供福利。
我們再來看看 Docker 的 Logo 吧:
很明顯,這是一只鯨魚,它托著許多集裝箱。我們可以把宿主機可當做這只鯨魚,把相互隔離的容器可看成集裝箱,每個集裝箱中都包含自己的應用程序。這 Logo 簡直的太形象了!
需要強調的是,筆者并非否定虛擬化技術,而是想通過本文讓更多的讀者了解如何使用 Docker 技術,讓大家知道除了虛擬化技術以外,還有另一種替代技術,也能讓應用程序隔離起來。
下面,我們將結合一個 Java Web 應用的部署過程,來描述如何“烹飪”Docker 這份美味佳肴。您準備好了嗎?我們現在就開始!
原料
前提條件
首先,您要準備一個 CentOS 的操作系統,虛擬機也行。總之,可以通過 Linux 客戶端工具訪問到 CentOS 操作系統就行。
需要說明的是,Ubuntu 或其它 Linux 操作系統也能玩 Docker,只不過本文選擇了以 CentOS 為例,僅此而已。
CentOS 具體要求如下:
必須是 64 位操作系統
建議內核在 3.8 以上
通過以下命令查看您的 CentOS 內核:
1
uname
-r
如果執行以上命令后,輸出的內核版本號低于 3.8,請參考下面的方法來來升級您的 Linux 內核。
對于 CentOS 6.5 而言,內核版本默認是 2.6。首先,可通過以下命令安裝最新內核:
1
2
3
rpm --
import
https:
//www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http:
//www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt
隨后,編輯以下配置文件:
1
vi /etc/grub.conf
將default=1
修改為default=0
。
最后,通過reboot
命令重啟操作系統。
重啟后如果不出意外的話,再次查看內核,您的 CentOS 內核將會顯示為 3.10。
如果到這里,您和我們所期望的結果是一致的。恭喜您!下面我們就一起來安裝 Docker 了。
安裝 Docker
只需通過以下命令即可安裝 Docker 軟件:
1
2
rpm -Uvh http:
//download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install docker-io
可使用以下命令,查看 Docker 是否安裝成功:
1
docker version
若輸出了 Docker 的版本號,則說明安裝成功,我們下面就可以開始使用 Docker 了。
可通過以下命令啟動 Docker 服務:
1
ervice docker start
做法
就像曾經安裝軟件一樣,我們首先需要有一張刻錄了該軟件的光盤,如果您使用的是虛擬光驅,那么就需要運行一種名為“鏡像”的文件,通過它來安裝軟件。在 Docker 的世界里,也有一個名為“鏡像”的東西,已經安裝我們所需的操作系統,我們一般成為“Docker 鏡像”,本文簡稱“鏡像”。
那么問題來了,我們從哪里下載鏡像呢?
Docker 官網 確實已經提供了所有的鏡像下載地址,可惜在國內卻是無法訪問的。幸好國內好心人提供了一個Docker 中文網,在該網站上可以下載我們所需的 Docker 鏡像。
下載鏡像
我們不妨還是以 CentOS 為例,通過以下步驟,下載一個 CentOS 的鏡像。
首先,訪問 Docker 中文網,在首頁中搜索名為“centos”的鏡像,在搜索的結果中,有一個“官方鏡像”,它就是我們所需的。
然后,進入 CentOS 官方鏡像頁面,在“Pull this repository”輸入框中,有一段命令,把它復制下來,在自己的命令行上運行該命令,隨后將立即下載該鏡像。
最后,使用以下命令查看本地所有的鏡像:
1
docker images
當下載完成后,您應該會看到:
1
2
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.cn/docker/centos centos6 25c5298b1a36
7
weeks ago
215.8
MB
如果看到以上輸出,說明您可以使用“docker.cn/docker/centos”這個鏡像了,或將其稱為倉庫(Repository),該鏡像有一個名為“centos6”的標簽(Tag),此外還有一個名為“25c5298b1a36 ”的鏡像 ID(可能您所看到的鏡像 ID 與此處的不一致,那是正常現象,因為這個數字是隨機生成的)。此外,我們可以看到該鏡像只有 215.8 MB,非常小巧,而不像虛擬機的鏡像文件那樣龐大。
現在鏡像已經有了,我們下面就需要使用該鏡像,來啟動容器。
啟動容器
容器是在鏡像的基礎上來運行的,一旦容器啟動了,我們就可以登錄到容器中,安裝自己所需的軟件或應用程序。既然鏡像已經下載到本地,那么如何才能啟動容器呢?
只需使用以下命令即可啟動容器:
1
docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
這條命令比較長,我們稍微分解一下,其實包含以下三個部分:
1
docker run <相關參數> <鏡像 ID> <初始命令>
其中,相關參數包括:
-i
:表示以“交互模式”運行容器
-t
:表示容器啟動后會進入其命令行
-v
:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>
假設我們的所有安裝程序都放在了宿主機的/root/software/
目錄下,現在需要將其掛載到容器的/mnt/software/
目錄下。
需要說明的是,不一定要使用“鏡像 ID”,也可以使用“倉庫名:標簽名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器啟動,需要運行的命令,此時使用“/bin/bash”,表示什么也不做,只需進入命令行即可。
安裝相關軟件
為了搭建 Java Web 運行環境,我們需要安裝 JDK 與 Tomcat,下面的過程均在容器內部進行。我們不妨選擇/opt/
目錄作為安裝目錄,首先需要通過cd /opt/
命令進入該目錄。
安裝 JDK
首先,解壓 JDK 程序包:
1
tar
-zxf
/mnt/software/jdk-7u67-linux-x64
.
tar
.gz -C .
然后,重命名 JDK 目錄:
1
mv
jdk1.7.0_67/ jdk/
安裝 Tomcat
首先,解壓 Tomcat 程序包:
1
tar
-zxf
/mnt/software/apache-tomcat-7
.0.55.
tar
.gz -C .
然后,重命名 Tomcat 目錄:
1
mv
apache-tomcat-7.0.55/ tomcat/
設置環境變量
首先,編輯.bashrc
文件
1
vi
~/.bashrc
然后,在該文件末尾添加如下配置:
1
2
export
JAVA_HOME=
/opt/jdk
export
PATH=$PATH:$JAVA_HOME
最后,需要使用source
命令,讓環境變量生效:
1
source
~/.bashrc
編寫運行腳本
我們需要編寫一個運行腳本,當啟動容器時,運行該腳本,啟動 Tomcat,具體過程如下:
首先,創建運行腳本:
1
vi
/root/run
.sh
然后,編輯腳本內容如下:
1
2
3
!/bin/bash
source
~/.bashrc
sh
/opt/tomcat/bin/catalina
.sh run
注意:這里必須先加載環境變量,然后使用 Tomcat 的運行腳本來啟動 Tomcat 服務。
最后,為運行腳本添加執行權限:
1
chmod
u+x
/root/run
.sh
退出容器
當以上步驟全部完成后,可使用exit
命令,退出容器。
隨后,可使用如下命令查看正在運行的容器:
1
docker
ps
此時,您應該看不到任何正在運行的程序,因為剛才已經使用exit
命令退出的容器,此時容器處于停止狀態,可使用如下命令查看所有容器:
1
docker
ps
-a
輸出如下內容:
1
2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57c312bbaad1 docker.cn
/docker/centos
:centos6
"/bin/bash"
27 minutes ago Exited (0) 19 seconds ago naughty_goldstine
記住以上CONTAINER ID
(容器 ID),隨后我們將通過該容器,創建一個可運行 Java Web 的鏡像。
創建 Java Web 鏡像
使用以下命令,根據某個“容器 ID”來創建一個新的“鏡像”:
1
docker commit 57c312bbaad1 huangyong
/javaweb
:0.1
該容器的 ID 是“57c312bbaad1”,所創建的鏡像名是“huangyong/javaweb:0.1”,隨后可使用鏡像來啟動 Java Web 容器。
啟動 Java Web 容器
有必要首先使用docker images
命令,查看當前所有的鏡像:
1
2
3
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
huangyong
/javaweb
0.1 fc826a4706af 38 seconds ago 562.8 MB
docker.cn
/docker/centos
centos6 25c5298b1a36 7 weeks ago 215.8 MB
可見,此時已經看到了最新創建的鏡像“huangyong/javaweb:0.1”,其鏡像 ID 是“fc826a4706af”。正如上面所描述的那樣,我們可以通過“鏡像名”或“鏡像 ID”來啟動容器,與上次啟動容器不同的是,我們現在不再進入容器的命令行,而是直接啟動容器內部的 Tomcat 服務。此時,需要使用以下命令:
1
docker run -d -p 58080:8080 --name javaweb huangyong
/javaweb
:0.1
/root/run
.sh
稍作解釋:
-d
:表示以“守護模式”執行/root/run.sh
腳本,此時 Tomcat 控制臺不會出現在輸出終端上。
-p
:表示宿主機與容器的端口映射,此時將容器內部的 8080 端口映射為宿主機的 58080 端口,這樣就向外界暴露了 58080 端口,可通過 Docker 網橋來訪問容器內部的 8080 端口了。
--name
:表示容器名稱,用一個有意義的名稱命名即可。
關于 Docker 網橋的內容,需要補充說明一下。實際上 Docker 在宿主機與容器之間,搭建了一座網絡通信的橋梁,我們可通過宿主機 IP 地址與端口號來映射容器內部的 IP 地址與端口號,
在一系列參數后面的是“鏡像名”或“鏡像 ID”,怎么方便就怎么來。最后是“初始命令”,它是上面編寫的運行腳本,里面封裝了加載環境變量并啟動 Tomcat 服務的命令。
當運行以上命令后,會立即輸出一長串“容器 ID”,我們可通過docker ps
命令來查看當前正在運行的容器。
1
2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82f47923f926 huangyong
/javaweb
:0.1
"/root/run.sh"
4 seconds ago Up 3 seconds 0.0.0.0:58080->8080
/tcp
javaweb
品嘗
在瀏覽器中,輸入以下地址,即可訪問 Tomcat 首頁:
1
http:
//192
.168.65.132:58080/
注意:這里使用的是宿主機的 IP 地址,與對外暴露的端口號 58080,它映射容器內部的端口號 8080。
總結
通過本文,我們了解了 Docker 是什么?它與虛擬機的差別在哪里?以及如何安裝 Docker?如何下載 Docker 鏡像?如何運行 Docker 容器?如何在容器內安裝應用程序?如何在容器上創建鏡像?如何以服務的方式啟動容器?這一切看似簡單,但操作也是相當繁瑣的,不過熟能生巧,需要我們不斷地操練。
除了這種手工生成 Docker 鏡像的方式以外,還有一種更像是寫代碼一樣,可以自動地創建 Docker 鏡像的方式。只需要我們編寫一個 Dockerfile 文件,隨后使用docker build
命令即可完成以上所有的手工操作。