五分鐘技術(shù)趣談 | 淺談Docker
Part 01 Docker概述
Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于Go語(yǔ)言并遵從 Apache2.0協(xié)議開(kāi)源。Docker可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴(lài)包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口,更重要的是容器性能開(kāi)銷(xiāo)極低。
Docker的架構(gòu)如下:
Part 02 特性
? 文件系統(tǒng)隔離
每個(gè)進(jìn)程容器運(yùn)行在一個(gè)完全獨(dú)立的根文件系統(tǒng)里。
? 資源隔離
系統(tǒng)資源,像CPU和內(nèi)存等可以分配到不同的容器中,使用cgroup。
? 網(wǎng)絡(luò)隔離
每個(gè)進(jìn)程容器運(yùn)行在自己的網(wǎng)路空間,虛擬接口和IP地址。
? 日志記錄
Docker將收集到和記錄的每個(gè)進(jìn)程容器的標(biāo)準(zhǔn)流,用于實(shí)時(shí)檢索或者批量檢索。
? 變更管理
容器文件系統(tǒng)的變更可以提交到新的鏡像中,并可重復(fù)使用以創(chuàng)建更多的容器。無(wú)需使用模板或者手動(dòng)配置。
? 交互式shell
Docker可以分配一個(gè)虛擬終端并且關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸出上,例如運(yùn)行一個(gè)一次性交互shell。
Part 03 Docker與虛擬機(jī)的區(qū)別
Docker可以讓一個(gè)應(yīng)用在任何操作系統(tǒng)中非常方便的運(yùn)行。而以前我們接觸的虛擬機(jī),也能在一個(gè)操作系統(tǒng)中,運(yùn)行另外一個(gè)操作系統(tǒng),保護(hù)系統(tǒng)中的任何應(yīng)用。
兩者有什么差異呢?
虛擬機(jī)(virtual machine)是在操作系統(tǒng)中模擬硬件設(shè)備,然后運(yùn)行另一個(gè)操作系統(tǒng),比如在 Windows 系統(tǒng)里面運(yùn)行 Ubuntu 系統(tǒng),這樣就可以運(yùn)行任意的Ubuntu應(yīng)用了。
Docker僅僅是封裝函數(shù)庫(kù),并沒(méi)有模擬完整的操作系統(tǒng),如圖:
對(duì)比來(lái)看:
圖片
Part 04 Docker部署java web應(yīng)用
4.1 下載系統(tǒng)鏡像(以CentOS為例)
使用命令:docker images查看下載情況
4.2 根據(jù)該鏡像創(chuàng)建容器
查看已經(jīng)運(yùn)行的容器列表命令:docker ps
查看所有容器,然后使用容器啟動(dòng)命令,運(yùn)行剛才創(chuàng)建的centos容器:docker start stupefied_perlman
4.3 在容器中添加相應(yīng)依賴(lài)
容器創(chuàng)建好以后,需要進(jìn)入到容器中添加相關(guān)依賴(lài),進(jìn)入容器的命令如下:
4.4 將已經(jīng)部署了環(huán)境依賴(lài)的容器提交為新鏡像
4.5 基于新鏡像運(yùn)行javaweb容器