溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker基本使用方法有哪些

發(fā)布時(shí)間:2021-12-13 11:33:36 來(lái)源:億速云 閱讀:133 作者:iii 欄目:云計(jì)算

這篇文章主要介紹“Docker基本使用方法有哪些”,在日常操作中,相信很多人在Docker基本使用方法有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Docker基本使用方法有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1. 容器化的簡(jiǎn)介和發(fā)展歷程

1.1 虛擬化技術(shù)介紹

簡(jiǎn)單來(lái)說(shuō),Docker 是一種虛擬化技術(shù),虛擬化技術(shù)可以分至少3種。

第一種:硬件虛擬化,這是底層的技術(shù)實(shí)現(xiàn)。

第二種:軟件虛擬化,比如常見(jiàn)的虛擬機(jī)。

第三種:就是我們今天所介紹的,容器虛擬化技術(shù)。

通俗地講,虛擬化技術(shù)就是多個(gè)人,通過(guò)一種技術(shù)協(xié)作使用一臺(tái)電腦來(lái)工作,使得每個(gè)人都覺(jué)得如同在自己的電腦上工作一樣互不干擾。

Docker基本使用方法有哪些

為了更好的了解這三種虛擬化技術(shù)的運(yùn)行機(jī)制,我們對(duì)比一下物理機(jī)、虛擬機(jī)、Docker 系統(tǒng)運(yùn)行棧。

Docker基本使用方法有哪些

可以看到,無(wú)論是哪一種虛擬化技術(shù),都是多層的。其中,藍(lán)色部分是底層實(shí)現(xiàn),黃色的部分是操作系統(tǒng)及以上的軟件層面上的實(shí)現(xiàn)。層數(shù)越多,運(yùn)行的開(kāi)銷就會(huì)更大。

物理機(jī)的系統(tǒng)運(yùn)行棧分析:

第一層 Infrastructure:基礎(chǔ)架構(gòu)層

第二層 Host OS:操作系統(tǒng)層  

第三層:二進(jìn)制/依賴庫(kù)

第四層:應(yīng)用程序

虛擬機(jī)的系統(tǒng)運(yùn)行棧分析:

底層實(shí)現(xiàn)上,虛擬機(jī)比物理機(jī)多了一層 Hypervisor。這是一個(gè)常用的硬件虛擬化軟件,可以把底層的操作系統(tǒng)抽象出多個(gè)底層的硬件接口。

而在操作系統(tǒng)及以上的軟件層面實(shí)現(xiàn)上,被分成了3個(gè)并行執(zhí)行的虛擬機(jī),而每一個(gè)并行運(yùn)行的虛擬機(jī)和物理機(jī)相比,又多了一層 Guest OS,也就是每個(gè)虛擬機(jī)還要運(yùn)行自己的操作系統(tǒng),這是和物理機(jī)的一個(gè)比較大的區(qū)別。

Docker 的系統(tǒng)運(yùn)行棧分析:

和虛擬機(jī)的結(jié)構(gòu)相似,Docker 也被分為了若干個(gè)“容器”。但是和虛擬機(jī)相比,少了一層。可以直觀的感受到,Docker 的運(yùn)行效率要比虛擬機(jī)要高。

互聯(lián)網(wǎng)常面臨一個(gè)場(chǎng)景:爆發(fā)式的流量增長(zhǎng)。在這種情況下,效率一定是第一位的。

針對(duì)以上三種虛擬化技術(shù),從他們的部署、運(yùn)行時(shí)間上,也可以對(duì)他們的運(yùn)行效率簡(jiǎn)單對(duì)比:

物理機(jī)的部署,時(shí)間周期大概是以月為計(jì)算。包括建設(shè)機(jī)房,建設(shè)機(jī)架,部署機(jī)器,部署網(wǎng)絡(luò),部署機(jī)器的操作系統(tǒng)等,整個(gè)的部署周期十分長(zhǎng)。

虛擬機(jī):在購(gòu)買之后幾分鐘,1個(gè)虛擬機(jī)就能創(chuàng)建完了。

Docker :  Docker 的啟動(dòng)是秒級(jí)的。

從部署、運(yùn)行時(shí)間上,可以看到 Docker 的效率十分高。

1.2 容器化發(fā)展簡(jiǎn)史介紹

容器化技術(shù)其實(shí)不是一個(gè)新穎的技術(shù),早在1978年,就有對(duì)容器化的探索。下圖可以清楚的看到容器化技術(shù)的簡(jiǎn)史:

Docker基本使用方法有哪些

1.3 認(rèn)識(shí) Docker

集裝箱的出現(xiàn)改變了運(yùn)輸業(yè),Docker 之于計(jì)算機(jī)行業(yè),好比集裝箱之于運(yùn)輸業(yè)。

2013年,Docker 對(duì)外開(kāi)源,2014年6月9日正式發(fā)布,從 Docker 0.1到 Docker 1.0 短短15個(gè)月的時(shí)間,風(fēng)靡全球。2017年正式宣布擁抱 K8S, 這標(biāo)志著“容器管理系統(tǒng)之爭(zhēng)”結(jié)束。

Docker 為什么可以廣受接納,有如下幾個(gè)優(yōu)勢(shì):

a. 持續(xù)部署與測(cè)試的一致性

Docker 能夠保持容器內(nèi)部所有的配置和依賴關(guān)系始終不變。你可以從開(kāi)發(fā)到產(chǎn)品發(fā)布的整個(gè)過(guò)程中使用相同的容器來(lái)確保沒(méi)有任何差異或者人工干預(yù)。

b. 多云平臺(tái)兼容

可移植性好,可以在任何擁有 Docker runtime 的環(huán)境快速部署。例如 AWS GCP BCE Azure aliyun 都支持 docker,沒(méi)有遷移的成本。

c. 環(huán)境標(biāo)準(zhǔn)化和版本控制

設(shè)想某次發(fā)布因?yàn)橥瓿梢粋€(gè)組件的升級(jí)而導(dǎo)致你整個(gè)環(huán)境都損壞了,Docker 可以在幾分鐘內(nèi)輕松地滾回到這個(gè)鏡像的前一個(gè)版本。

d. 隔離性

Docker 可以確保你的應(yīng)用程序與資源是分隔開(kāi)的。例如依賴多個(gè)不同版本的 tomcat 的時(shí)候不會(huì)因?yàn)橐蕾嚊_突導(dǎo)致崩潰。同時(shí) Docker 還能確保每個(gè)容器只使用分配給它的額定資源,不會(huì)因?yàn)槟硞€(gè)進(jìn)程影響其他容器。

e. 安全性

由于 Docker 容器是隔離的,并且資源是受限制的。所以即使你其中一個(gè)應(yīng)用程序被黑,也不會(huì)影響運(yùn)行在其它 Docker 容器上的應(yīng)用程序。

總結(jié)起來(lái),Docker 的優(yōu)點(diǎn)可以概括為以下三句話:

 1. 一處成功,處處成功。

  • 橫跨開(kāi)發(fā)、測(cè)試、部署環(huán)境

  • 也不用管是在實(shí)體機(jī)、虛擬機(jī)、還是在某個(gè)云上

2. 高度集成,高度一致,使用方便

  • 創(chuàng)建和部署十分便捷,效率極高

  • 流水線作業(yè),持續(xù)構(gòu)建發(fā)布(CI/CD)

3. 結(jié)合微服務(wù),大大提升工程研發(fā)效率

  • App 相互隔離,解耦依賴關(guān)系,方便彈性擴(kuò)展

  • 有安全保證,接入無(wú)負(fù)擔(dān)

2. Docker 容器的基本使用和鏡像操作

第一部分我們對(duì) Docker 容器有一個(gè)基本的認(rèn)識(shí)。這一部分,我們將通過(guò)一些實(shí)際的演練和操作,讓大家掌握 Docker 容器的基本使用和鏡像操作。在這一部分正式開(kāi)展前,簡(jiǎn)單“掃盲”。科普一下 Docker 里的常用名詞、Docker 的環(huán)境安裝及 Docker 架構(gòu)。

常用名詞

  • Docker 鏡像:Docker images

  • Docker 倉(cāng)庫(kù):Docker repository

  • Docker 容器:Docker containers

  • Docker 宿主機(jī):Docker host

  • Docker 守護(hù)進(jìn)程:Docker daemon

  • Docker 客戶端:Docker client

Docker 環(huán)境安裝

  • Centos 系統(tǒng)環(huán)境安裝 Docker:

    curl-fsSL https://get.docker.com | bash-s docker

  • OSX 系統(tǒng)安裝 Docker:

    https://hub.docker.com/editions/community/docker-ce-desktop-mac

  • Windows 系統(tǒng)安裝D ocker:

    https://hub.docker.com/editions/community/docker-ce-desktop-windows

目前來(lái)說(shuō),除了 Linux 系統(tǒng)可以直接運(yùn)行 Docker之外,其他系統(tǒng)都是基于虛擬機(jī)運(yùn)行的。

Docker 的架構(gòu):C/S模型

Client: 與 Docker 通信的一個(gè)組件,也就是客戶端。

Docker daemon : 相當(dāng)于守護(hù)進(jìn)程,也就是 docker 的 Server,他執(zhí)行的結(jié)果是 Containers (容器)

Images: 鏡像。鏡像和容器之間的關(guān)系。運(yùn)行起來(lái)的鏡像就是一個(gè)容器。

Registry: 倉(cāng)庫(kù)。倉(cāng)庫(kù)具體存放的是鏡像。

Docker基本使用方法有哪些

2.1 Docker 核心概念和使用

 Docker repository 鏡像倉(cāng)庫(kù)

鏡像倉(cāng)庫(kù)是集中存放管理鏡像的地方。倉(cāng)庫(kù)有分為公有倉(cāng)庫(kù)(DockerHub、DockerPool)和私有倉(cāng)庫(kù)。有了鏡像倉(cāng)庫(kù),用戶可以用它來(lái):

  • 中心化的倉(cāng)庫(kù),提供上傳/下載 鏡像的能力。

  • 管理倉(cāng)庫(kù)中的鏡像,大多數(shù)倉(cāng)庫(kù)都提供檢索和版本整理能力。

DockerHub 是 Docker  官方提供的公共倉(cāng)庫(kù),可以檢索官方鏡像,除此之外還有很多私有 registry,例如 BCE,也可以自己動(dòng)手搭建自己的 Docker image repository。

Docker Hub 地址:https://hub.docker.com

DockerFile: 構(gòu)建 Docker 鏡像的源代碼

Dockerfile 是用于生成 image 的源文件,源代碼像編程一樣,有自己的語(yǔ)法,編譯方式,Dockerfile 也有自己的語(yǔ)法

以下是一些例子:

-FROM  基于已有的 Docker image 來(lái)生成

例如:FROM tomcat:8.0(含義:用 tomcat 這個(gè)鏡像的8.0版本做為我們的基礎(chǔ)鏡像,然后將現(xiàn)有的鏡像疊在該鏡像之上)

-COPY 把用戶的文件 copy 到 image 去

例如:COPY index.jsp  /usr/local/tomcat/webapps/ROOT

(COPY 本機(jī)文件地址   鏡像內(nèi)文件地址)

-EXPOSE 對(duì)外通過(guò)該端口提供服務(wù)

 例如:EXPOSE 8080

-CMD  啟動(dòng)該 image 應(yīng)該運(yùn)行的命令

 例如:CMD[ “catalina.sh”, “run”]

2.2 Docker 入門命令

入門命令1:獲得幫助

Docker help [command]獲取run命令的幫助。

入門命令2:鏡像操作系列命令

Docker pull [name]:[tag] 拉取/更新某image

Docer image ls 列舉當(dāng)前的Docker image

Docker image rm[image ID] 刪除某image

Docker基本使用方法有哪些

Docker build-t [name]:[tag] [dockerfile path]

從本地路徑尋找 Dockerfile 構(gòu)建鏡像,并打 tag 上

Docker基本使用方法有哪些

入門命令3:鏡像運(yùn)行系列命令

Docker run-it ubuntu bash

-it:表示起一個(gè)交互終端,來(lái) run 后面的命令

-d: 表示運(yùn)行 docker 容器到后臺(tái)

Docker基本使用方法有哪些

Docker ps 查看運(yùn)行中的容器

Docker kill [container ID]終止容器

docker run  -v dor1:dir2 redis  目錄掛載

例如:docker run –v~:/ user-it Ubuntu bash 是把 host 的用戶 home 主目錄,映射為Docker實(shí)例中的/user目錄。

Tips: 關(guān)于鏡像的常見(jiàn)問(wèn)題

1. 我的拉取的鏡像究竟存到哪里了?

鏡像有 Docker 管理,每個(gè)系統(tǒng)具體路徑不一樣。

Linux 系統(tǒng)存儲(chǔ)在/var/lib/docker

OSX 系統(tǒng)存儲(chǔ)在:

/Users/{YourUserName}/Library/Containers/com.docker.docker/Data

2. 我沒(méi)有指定鏡像的 tag 怎么辦?

命令中沒(méi)有指定鏡像 tag 時(shí)會(huì)默認(rèn)使用 latest 作為 tag。避免發(fā)生預(yù)期錯(cuò)誤的方法是指定 tag。

3. 鏡像刪除不掉怎么辦?

鏡像之間可能會(huì)相互依賴(layer),添加-f可以強(qiáng)制刪除。

2.3 如何 Debug

1. 看容器 log:

 Docker logs [container_id]

2. Inspect 獲取容器/鏡像的元數(shù)據(jù)。

 Docker inspect [container_id]

3. 在 Docker 實(shí)例中執(zhí)行交互的shell命令。

Docker exec –it [container_id] bash

Docker exec-it[container_id]s

2.4 如何構(gòu)建自己的 Docker 鏡像

1. 前期準(zhǔn)備

Dockerfile 內(nèi)容如下

FROM tomcat:8.0

COPY index.jsp /usr/local/tomcat/webapps/ROOT

EXPOSE 8080

Index.jsp 內(nèi)容如下

<%< span="">

Out. Println(“Hello World, V1”);

%>

Docker基本使用方法有哪些

2. 構(gòu)建鏡像

Docker build-t mytomact:1.0

Docker run –p 8080:8080 –d mytomcat:1.0

Curl localhost:8080

Docker logs {容器 id}

2.5 鏡像制作的基本操作命令總結(jié)

1. 構(gòu)建 Docker 鏡像

Cd node/docker

Docker build –t hub.baidubce.com/bootcamp/mynode:1.0.0

2. 運(yùn)行鏡像

Docker run-d –p 8000:8080 hub.baidubce.com/bootcamp/mynode:1.0.0

Docker ps | grep mynode

Curl localhost:8000

3. 查看執(zhí)行日志

Docker ps |grep mynode

Docker logs{container id}

3. Docker 底層核心技術(shù)

Docker 是容器虛擬化的相關(guān)技術(shù)的結(jié)合,它的三大技術(shù)支柱包括:Cgroup,Namespace, AUFS。下面簡(jiǎn)單介紹一下者三大技術(shù)支柱

3.1 Cgroup

全稱:Linux Control Group ,又稱為 Cgroup,是 Linux Kernel 的一個(gè)功能。

由 Google 工程師發(fā)起并貢獻(xiàn)。最終合入了內(nèi)核代碼;作用是限制一個(gè)進(jìn)程組的資源(包括內(nèi)存用量,CPU用量,磁盤IO,網(wǎng)絡(luò)IO,網(wǎng)絡(luò)優(yōu)先級(jí)等)

 http://man7.org/linux/man-pages/man7/cgroups.7 .html

Docker基本使用方法有哪些

例如:使用 Cgroup 限制一個(gè)進(jìn)程資源的用量

Mkdir –p /sys/fs/cgroup/cpu/k8s_s1

Echo 50000>/cguop/cpu/k8s_s1/cpu.cfs_quota_us

將cpu.cfs_quota_us 設(shè)為50000

相當(dāng)于cpu.cfs_period_us的100000是50%

Echo{PID}>/cgroup/cpu/foo/tasks

3.2 Linux Namespace

Namespace 是 Linux Kernel 提供的一種內(nèi)核級(jí)別資源隔離的方法。又稱為命名空間,它主要做訪問(wèn)隔離,即同一個(gè)命名空間的多個(gè)資源(memory, CPU, network, pid)可以相互看到,但是之外的看不到。

http://man7.org/linux/man_pages/man7/namespaces.7.html

目前 Namespce 種類有以下7種:

Docker基本使用方法有哪些

例如:使用 Namespace 隔離一個(gè)進(jìn)程的資源

lSyscall. CLONE NEWPID: 隔離PID

Docker基本使用方法有哪些

lSyscall. CLONE_NEWNET :隔離網(wǎng)絡(luò)

Docker基本使用方法有哪些

3.3  AUFS

全稱:Advanced Multilayered Unification File System。一種高性能分層文件系統(tǒng),是Docker image的基石??梢园讯鄠€(gè)文件掛載到同一個(gè)掛載點(diǎn)。只有第一層(第一個(gè)文件夾層級(jí))是可寫(xiě)的,其余層是只讀的。增加/刪除文件時(shí)都會(huì)轉(zhuǎn)換為寫(xiě)操作寫(xiě)入可寫(xiě)層。

修改文件時(shí),AUFS 利用 Cow 特性來(lái)修改只讀層中的文件。不管修改數(shù)據(jù)的量的多少。在第一次修改時(shí),文件都會(huì)被拷貝到可寫(xiě)層然后再被修改。AUFS 的 Cow 特性能夠允許在多個(gè)容器之間共享分層,從而減少物理空間占用。

例如:使用AUFS創(chuàng)建多重掛載點(diǎn)

1.Mount-t aufs –o dirs.=./fruits=tw:./vegetables=rw none./mnt

2.Echo modify>> ./mnt/tomato

Docker基本使用方法有哪些

到此,關(guān)于“Docker基本使用方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI