您好,登錄后才能下訂單哦!
1. 背景
* Docker是Docker.inc公司開(kāi)源的一個(gè)基于LXC技術(shù)之上構(gòu)建的Container容器引擎,源代碼托管在GitHub上,基于Go語(yǔ)言并遵從Apache2.0協(xié)議開(kāi)源。
* Docker項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案。
* Docker是通過(guò)內(nèi)核虛擬化技術(shù)(namespaces及cgroups等)來(lái)提供容器的資源隔離與安全保障等。由于Docker通過(guò)操作系統(tǒng)層的虛擬化實(shí)現(xiàn)隔離,所以Docker容器在運(yùn)行時(shí),不需要類似虛擬機(jī)VM額外的操作系統(tǒng)開(kāi)銷,提高資源利用率。
2. 優(yōu)勢(shì)
* 部署簡(jiǎn)單
* 管理簡(jiǎn)單
* 秒級(jí)應(yīng)用啟動(dòng)
* 與宿主機(jī)使用同一個(gè)內(nèi)核,性能損耗小
* 隔離性高
* 鏡像一次構(gòu)建,到處運(yùn)行
3. 應(yīng)用場(chǎng)景
* 簡(jiǎn)化配置,統(tǒng)一配置,通過(guò)鏡像快速啟動(dòng)(Simplifying)
* 代碼流水線管理,開(kāi)發(fā)環(huán)境->測(cè)試環(huán)境->預(yù)生產(chǎn)環(huán)境->灰度發(fā)布->正式發(fā)布,docker在這里實(shí)現(xiàn)了快速遷移(Code Oioeline Management)
* 開(kāi)發(fā)效率,對(duì)開(kāi)發(fā)人員,有了鏡像,直接啟動(dòng)容器即可(Developer Productivity)
* 應(yīng)用隔離,相對(duì)于虛擬機(jī)的完全隔離會(huì)占用資源,docker會(huì)比較節(jié)約資源(Applsolation)
* 服務(wù)器整合,一臺(tái)服務(wù)器跑多個(gè)docker容器,提高服務(wù)器的利用率(Server Consolidation)
* 調(diào)試能力,debug調(diào)試(Debugging Capabilties)
* 多租戶,一個(gè)租戶多個(gè)用戶,類似于阿里公有云的一個(gè)project下多個(gè)用戶(Multi-tenancy)
* 快速部署,不需要啟動(dòng)操作系統(tǒng),實(shí)現(xiàn)秒級(jí)部署(Rapid Deplovment)
4. docker相關(guān)注意
* 容器不同于虛擬機(jī)
* 容器理論推薦單一進(jìn)程
* 容器不如虛擬機(jī)來(lái)得成熟
* 容器可以在幾分之一秒內(nèi)啟動(dòng)
* 容器已在大規(guī)模環(huán)境證明了自身的價(jià)值
* IT人員稱容器為輕量級(jí)
* Docker已成為容器的代名詞,但它不是唯一的提供者
* 容器能節(jié)省IT人力,加快業(yè)務(wù)更新效率
5. docker與容器本身意義
* 面向產(chǎn)品: 簡(jiǎn)化交付流程
* 面向開(kāi)發(fā): 簡(jiǎn)化環(huán)境配置
* 面向測(cè)試: 多版本測(cè)試
* 面向運(yùn)維: 簡(jiǎn)化環(huán)境問(wèn)題
* 面向架構(gòu): 自動(dòng)化擴(kuò)容 [ 微服務(wù) ]
6. 使用Docker原因
作為一種新興的虛擬化方式,Docker跟傳統(tǒng)的虛擬化方式具有眾多的優(yōu)勢(shì)。
首先,Docker容器的啟動(dòng)可以在秒級(jí)實(shí)現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多。其次,Docker對(duì)系統(tǒng)資源的利用率很低,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè)Docker容器。
6. docker相關(guān)概念
** 鏡像 [ p_w_picpath ]
* Docker鏡像就是一個(gè)只讀的模板。
例如:一個(gè)鏡像可以包含一個(gè)完整的CentOS操作系統(tǒng)環(huán)境,里面僅安裝了Apache或用戶需要的其他應(yīng)用程序。
鏡像可以用來(lái)創(chuàng)建Docker容器。
Docker提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來(lái)直接使用。
** 容器 [ container ]
* Docker利用容器來(lái)運(yùn)行應(yīng)用。
容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的,保證安全的平臺(tái)。
可以把容器看做是一個(gè)簡(jiǎn)易版的Linux環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
** 倉(cāng)庫(kù) [ registry ]
* 倉(cāng)庫(kù)是集中存放鏡像文件的場(chǎng)所。有時(shí)候把倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry)混為一談,并不嚴(yán)格區(qū)分。實(shí)際上,倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。
倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。
最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括Docker Pool等,可以提供大陸用戶更穩(wěn)定快讀的訪問(wèn)。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push命令將它上傳到公有或者私有倉(cāng)庫(kù),這樣下載在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候,只需需要從倉(cāng)庫(kù)上pull下來(lái)就可以了。
7. docker實(shí)戰(zhàn)
* 系統(tǒng)環(huán)境 [ docker運(yùn)行環(huán)境推薦在 linux 內(nèi)核大于 2.6 ]
[root@docker ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@docker ~]# uname -r 3.10.0-327.36.3.el7.x86_64
* docker 服務(wù)安裝
[root@docker ~]# yum install docker
* 啟動(dòng) docker 服務(wù)
[root@docker ~]# systemctl start docker.service
* 查看 docker 版本信息
[root@docker ~]# docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64 Go version: go1.7.4 Git commit: 1398f24/1.12.6 Built: Fri May 26 17:28:18 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64 Go version: go1.7.4 Git commit: 1398f24/1.12.6 Built: Fri May 26 17:28:18 2017 OS/Arch: linux/amd64
* 在 docker hub 倉(cāng)庫(kù)上搜索鏡像[ 默認(rèn)從docker.io上搜索 ]
docker search 鏡像名稱:版本號(hào)[ 不填默認(rèn)為latest ]
INDEX: 搜索源
NAME: 鏡像名稱
DESCRIPTION: 描述
STARS: 下載次數(shù)
OFFICIAL: 是否官方
AUTOMATED: 是否自動(dòng)化
[root@docker ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 3397 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8... 70 [OK] docker.io docker.io/nimmis/java-centos This is docker p_w_picpaths of CentOS 7 with dif... 26 [OK] docker.io docker.io/gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 19 [OK]
* 從 docker hub 倉(cāng)庫(kù)上獲取(下載)鏡像至本地庫(kù) [ 默認(rèn)從docker.io上下載 ]
docker pull 鏡像名稱:版本號(hào)[ 不填默認(rèn)為latest ]
[root@docker ~]# docker pull centos
* 查看本地庫(kù)所有鏡像
docker p_w_picpaths
[root@docker ~]# docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 3bee3060bfc8 9 days ago 192.5 MB
* 導(dǎo)出本地庫(kù)鏡像
docker save 鏡像名稱:版本號(hào) > 導(dǎo)出文件名
[root@docker ~]# docker save centos > centos.tar.gz
* 刪除本地庫(kù)鏡像
docker rmi 鏡像名稱:版本號(hào)
[root@docker ~]# docker rmi centos Untagged: centos:latest Untagged: docker.io/centos@sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9 Deleted: sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d
* 導(dǎo)入鏡像文件至本地庫(kù)
docker load < 鏡像文件
[root@docker ~]# docker load < centos.tar.gz Loaded p_w_picpath: docker.io/centos:latest
* 新建容器并運(yùn)行
當(dāng)利用docker run來(lái)創(chuàng)建容器時(shí),Docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:
* 檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載
* 利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器
* 分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛在一層可讀寫層
* 從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去
* 從地址池配置一個(gè)ip地址給容器
* 執(zhí)行用戶指定的應(yīng)用程序
* 執(zhí)行完畢后容器被終止
docker run [option....]
例如:運(yùn)行一個(gè)容器,指定名稱為hello, 輸出hello之后終止容器
[root@docker ~]# docker run --name hello centos echo "hello" hello
例如:?jiǎn)?dòng)一個(gè)容器,指定bash命令,并進(jìn)入容器內(nèi)部
-i: 則讓容器的標(biāo)準(zhǔn)輸入保持打開(kāi)。
-t: 讓Docker分配一個(gè)偽終端,并綁定到容器的標(biāo)準(zhǔn)輸入上
/bin/bash: 執(zhí)行一個(gè)命令
[root@docker ~]# docker run -it centos /bin/bash [root@b4473c885f51 /]# pwd /
* 退出并不關(guān)閉容器
ctrl + p + q
[root@f91270f431bd /]# [root@docker ~]#
* 啟動(dòng)已終止容器
docker start 容器名稱
[root@docker ~]# docker start hello hello
*以守護(hù)進(jìn)程運(yùn)行
更多的時(shí)候,需要讓Docker容器在后臺(tái)以守護(hù)形式運(yùn)行。此時(shí)可以通過(guò)添加-d參數(shù)來(lái)實(shí)現(xiàn)。
docker run -d [opation...]
[root@docker ~]# docker run --name daemon -d centos /bin/bash 6fd939dd05004e18248e04d10de88076c61878aea904093e24e122a907371234
* 查看正在運(yùn)行的容器
docker ps
[root@docker ~]# docker ps
* 查看所有容器
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65c0868177e7 centos "/bin/bash" 34 seconds ago Exited (0) 32 seconds ago daemon
* 停止正在運(yùn)行的容器
docker stop 容器名稱或唯一容器ID [容器ID通過(guò)ps CONTAINER ID 查看]
[root@docker ~]# docker stop daemon daemon
* 刪除已停止的容器
docker rm 容器名稱或唯一容器ID [容器ID通過(guò)ps CONTAINER ID 查看]
[root@docker ~]# docker rm daemon daemon
8. 總結(jié)
以需求驅(qū)動(dòng)技術(shù),技術(shù)本身沒(méi)有優(yōu)略之分,只有業(yè)務(wù)之分。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。