一.簡介
Docker 是一個開源的應(yīng)用容器引擎抛猫,基于?Go 語言?并遵從 Apache2.0 協(xié)議開源蟆盹。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中邑滨,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化钱反。
容器是完全使用沙箱機制掖看,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
二.應(yīng)用場景
1.Web 應(yīng)用的自動化打包和發(fā)布面哥。
2.自動化測試和持續(xù)集成哎壳、發(fā)布。
3.在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應(yīng)用尚卫。
4.從頭編譯或者擴展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環(huán)境归榕。
三.優(yōu)點
Docker 是一個用于開發(fā),交付和運行應(yīng)用程序的開放平臺吱涉。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開刹泄,從而可以快速交付軟件外里。借助 Docker,您可以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)特石。通過利用 Docker 的方法來快速交付盅蝗,測試和部署代碼,您可以大大減少編寫代碼和在生產(chǎn)環(huán)境中運行代碼之間的延遲姆蘸。
1.快速墩莫,一致地交付您的應(yīng)用程序
2.響應(yīng)式部署和擴展
3.在同一硬件上運行更多工作負載
四.Docker架構(gòu)
Docker 包括三個基本概念:
鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統(tǒng)逞敷。Docker 鏡像是用于創(chuàng)建 Docker 容器的模板狂秦,比如 Ubuntu 系統(tǒng)。
容器(Container):容器是獨立運行的一個或一組應(yīng)用推捐,是鏡像運行時的實體裂问。鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實例一樣玖姑,鏡像是靜態(tài)的定義愕秫,容器是鏡像運行時的實體。容器可以被創(chuàng)建焰络、啟動戴甩、停止、刪除闪彼、暫停等甜孤。
倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像畏腕。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用缴川。一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag)描馅;每個標簽對應(yīng)一個鏡像把夸。通常,一個倉庫會包含同一個軟件不同版本的鏡像铭污,而標簽就常用于對應(yīng)該軟件的各個版本恋日。我們可以通過?<倉庫名>:<標簽>?的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽嘹狞,將以?latest?作為默認標簽岂膳。
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠程API來管理和創(chuàng)建Docker容器磅网。
Docker 容器通過 Docker 鏡像來創(chuàng)建谈截。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類。
五.Docker鏡像使用
1.列出本地主機上的鏡像列表
docker images
各個選項說明:
REPOSITORY:表示鏡像的倉庫源
TAG:鏡像的標簽,同一倉庫源可以有多個 TAG簸喂,代表這個倉庫源的不同個版本毙死,如 ubuntu 倉庫源里,有 15.10娘赴、14.04 等多個不同的版本规哲,我們使用 REPOSITORY:TAG 來定義不同的鏡像。
IMAGE ID:鏡像ID
CREATED:鏡像創(chuàng)建時間
SIZE:鏡像大小
2.查找鏡像
docker search XXX
NAME:?鏡像倉庫源的名稱
DESCRIPTION:?鏡像的描述
OFFICIAL:?是否 docker 官方發(fā)布
stars:?類似 Github 里面的 star诽表,表示點贊唉锌、喜歡的意思。
AUTOMATED:?自動構(gòu)建竿奏。
3.從倉庫下載,獲取一個新的鏡像
docker pull XXX
4.刪除鏡像
docker rmi?XXX
5.創(chuàng)建鏡像
當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時袄简,我們可以通過以下兩種方式對鏡像進行更改。
(1)從已經(jīng)創(chuàng)建的容器中更新鏡像泛啸,并且提交這個鏡像
(2)使用?Dockerfile?指令來創(chuàng)建一個新的鏡像
5.1更新鏡像
(1)使用版本為20.04的基礎(chǔ)鏡像ubuntu鏡像來創(chuàng)建一個容器
docker run -it ubuntu:20.04 /bin/bash
參數(shù)說明:
-i: 交互式操作绿语。
-t: 終端。
ubuntu:20.04: 這是指用 ubuntu 20.04 版本鏡像為基礎(chǔ)來啟動容器候址。
/bin/bash:放在鏡像名后的是命令吕粹,希望有個交互式 Shell,因此用的是 /bin/bash岗仑。
如果不指定一個鏡像的版本標簽匹耕,例如只使用?ubuntu,docker 將默認使用?ubuntu:latest?鏡像荠雕。
(2)在運行的容器內(nèi)使用?apt-get update?命令進行更新稳其。
(3)在完成操作之后,輸入?exit 命令來退出這個容器炸卑。
(4)docker commit 來提交容器副本既鞠。
各個參數(shù)說明:
-m:?提交的描述信息
-a:?指定鏡像作者
3a299d3e9ea4:容器 ID
lulu/ubuntu:new:?指定要創(chuàng)建的目標鏡像名
(5)使用新鏡像?lulu/ubuntu:new?來啟動一個容器
5.2構(gòu)建鏡像
使用命令?docker build?, 從零開始來創(chuàng)建一個新的鏡像盖文。為此嘱蛋,我們需要創(chuàng)建一個?Dockerfile?文件,其中包含一組指令來告訴 Docker 如何構(gòu)建新鏡像五续。
每一個指令都會在鏡像上創(chuàng)建一個新的層洒敏,每一個指令的前綴都必須是大寫的。
第一條FROM返帕,指定使用哪個鏡像源
RUN 指令告訴docker 在鏡像內(nèi)執(zhí)行命令桐玻,安裝了什么篙挽。然后荆萤,我們使用?Dockerfile?文件,通過?docker build?命令來執(zhí)行dockerfile文件中的命令構(gòu)建一個鏡像。
參數(shù)說明:
-t?:指定要創(chuàng)建的目標鏡像名
.?:Dockerfile?文件所在目錄链韭,可以指定Dockerfile?的絕對路徑
使用docker images 查看創(chuàng)建的鏡像已經(jīng)在列表中存在,鏡像ID為?19a96a0b9bdd? ?
6.設(shè)置鏡像標簽偏竟,為鏡像添加一個新的標簽
docker tag?鏡像ID?鏡像源名(repository name):新的標簽名(tag)
7.導出鏡像,將指定鏡像保存成tar歸檔文件
docker save -o 文件名.tar 鏡像名
8.導入鏡像
docker load --input 文件路徑/文件名.tar