簡(jiǎn)介
本章中,您將學(xué)習(xí)如何安裝Docker。并學(xué)習(xí)Docker術(shù)語(yǔ),如映像、容器、Dockerfiles和 Docker組件。您還將使用一些簡(jiǎn)單的Docker命令來(lái)工作。用于創(chuàng)建、運(yùn)行和停止Docker容器。
安裝
Docker公司提供了社區(qū)版和企業(yè)版。的Docker平臺(tái)。企業(yè)版的功能與Docker平臺(tái)相同。社區(qū)版,但它提供了額外的支持和認(rèn)證的。容器、插件和基礎(chǔ)設(shè)施。對(duì)于大多數(shù)一般的開發(fā)和生產(chǎn)使用,社區(qū)版 合適的。
在Windows上安裝Docker 在Windows上安裝Docker之前,你需要滿足一定的先決條件。這些包括以下內(nèi)容。
- Hyper-V支持 - 硬件虛擬化支持,通常在系統(tǒng)BIOS中啟用 - 只有64位版本的Windows 10(Pro/Education/)才能安裝。這看起來(lái)像一個(gè)虛擬化設(shè)置需要,而你在上一章了解到,Docker并不是虛擬化。
那么為什么Docker for Windows需要虛擬化所需的功能呢?簡(jiǎn)短的回答是,Docker依賴于眾多的功能,比如命名空間和cgroups,而這些在Windows上是不可用的。為了繞過(guò)這一限制,Docker for Windows創(chuàng)建了一個(gè)運(yùn)行Linux內(nèi)核的輕量級(jí)Hyper-V容器。
在撰寫本文時(shí),Docker包括對(duì)Native容器的實(shí)驗(yàn)性支持,允許在不需要Hyper-V的情況下創(chuàng)建容器。
<u>https://hub.docker.com/editions/community/docker-ce-desktop-windows</u>

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

<u>https://www.docker.com/community-edition</u>
sudo apt install docker.io
docker run --rm hello-world
參考資料
- 本講座目錄
- 代碼地址 https://github.com/china-testing/python-testing-examples/tree/master/pytest_projects 建議拷貝到瀏覽器訪問(wèn)
- 本文涉及的python測(cè)試開發(fā)庫(kù) 謝謝點(diǎn)贊!
- 本文相關(guān)海量書籍下載
基本概念
現(xiàn)在我們已經(jīng)安裝并運(yùn)行了Docker,讓我們來(lái)了解與Docker相關(guān)的不同術(shù)語(yǔ)。
Layer: Image是應(yīng)用于Docker鏡像的修改,由Docker文件中的指令來(lái)表示。通常情況下,當(dāng)一個(gè)基礎(chǔ)鏡像被改變時(shí),就會(huì)創(chuàng)建一個(gè)圖層--例如,考慮一個(gè)看起來(lái)像這樣的Dockerfile。
FROM ubuntu
Run mkdir /tmp/logs
RUN apt-get install vim
RUN apt-get install htop
現(xiàn)在在這種情況下,Docker會(huì)將Ubuntu鏡像作為基礎(chǔ)鏡像,并添加三個(gè)層。
- 一個(gè)層用于創(chuàng)建/tmp/logs - 另一個(gè)層安裝vim - 第三個(gè)層安裝htop。
當(dāng)Docker構(gòu)建鏡像時(shí),每個(gè)層都會(huì)疊加在下一個(gè)層上,并使用聯(lián)合文件系統(tǒng)合并成一個(gè)層。層使用sha256哈希值進(jìn)行唯一識(shí)別。這使其易于重用和緩存。當(dāng)Docker掃描基礎(chǔ)鏡像時(shí),它會(huì)掃描構(gòu)成鏡像的所有層的ID,并開始下載層。如果某個(gè)層存在于本地緩存中,它就會(huì)跳過(guò)下載緩存的鏡像。
Docker Image:Docker image是一個(gè)只讀的模板,它構(gòu)成了你的應(yīng)用程序的基礎(chǔ)。一個(gè)Docker鏡像從一個(gè)基礎(chǔ)鏡像開始--通常選擇的是大家最熟悉的操作系統(tǒng)的鏡像,比如Ubuntu。在這個(gè)鏡像之上,我們可以添加構(gòu)建我們的應(yīng)用棧,在需要的時(shí)候添加包。
有許多預(yù)構(gòu)建的鏡像,用于一些最常見的應(yīng)用程序堆棧,如Django、PHP-FPM與nginx。
等。
我們可以從相關(guān)的Dockerfile中構(gòu)建自己的鏡像,然后將構(gòu)建好的鏡像發(fā)布到注冊(cè)表中。我們將在以后的章節(jié)中深入研究Dockerfile?,F(xiàn)在,將Docker鏡像視為最終的可執(zhí)行包,它包含了運(yùn)行應(yīng)用程序的一切。這包括源代碼、所需的庫(kù)和任何依賴關(guān)系。
Docker容器:Docker鏡像在主機(jī)中運(yùn)行時(shí),會(huì)生成一個(gè)有自己命名空間的進(jìn)程,稱為Docker容器。Docker鏡像與容器的主要區(qū)別在于,Docker鏡像存在一個(gè)薄薄的讀/寫的容器。。對(duì)容器的文件系統(tǒng)的任何改變,如寫入新文件或修改現(xiàn)有文件,都是在這個(gè)可寫容器層上完成的,而不是在下層。
綁定掛載和卷:我們?cè)谇懊嫣岬?,?dāng)一個(gè)容器運(yùn)行時(shí),對(duì)容器的任何更改都存在于文件系統(tǒng)的容器層中。當(dāng)一個(gè)容器被殺死時(shí),這些更改就會(huì)丟失,數(shù)據(jù)也無(wú)法再訪問(wèn)。即使在容器運(yùn)行時(shí),從容器中獲取數(shù)據(jù)也不是很直接。此外,向容器的可寫層寫入數(shù)據(jù)需要一個(gè)存儲(chǔ)驅(qū)動(dòng)來(lái)管理文件系統(tǒng)。存儲(chǔ)驅(qū)動(dòng)在文件系統(tǒng)上提供了一個(gè)可用來(lái)持久化變化的抽象,這種抽象往往會(huì)降低性能。
基于這些原因,Docker提供了不同的方式來(lái)從Docker主機(jī)將數(shù)據(jù)掛載到容器中:卷、綁定掛載和tmpfs卷。tmpfs卷只存儲(chǔ)在主機(jī)系統(tǒng)的內(nèi)存中,而綁定掛載和卷則存儲(chǔ)在主機(jī)文件系統(tǒng)中。
Docker Registry:我們?cè)谇懊嫣岬竭^(guò),你可以利用常見應(yīng)用棧的現(xiàn)有鏡像--你有沒(méi)有想過(guò)這些鏡像在哪里,以及如何在構(gòu)建應(yīng)用時(shí)使用它們?Docker Registry是一個(gè)可以存儲(chǔ)Docker鏡像的地方,這樣就可以將它們作為基礎(chǔ)來(lái)使用
的應(yīng)用棧。一些常見的Docker注冊(cè)中心的例子包括以下幾個(gè)。
? Docker Hub
? Google Container Registry
? Amazon Elastic Container Registry
? JFrog Artifactory
Dockerfile:Dockerfile是一組告訴Docker如何構(gòu)建鏡像的指令。
一個(gè)典型的Dockerfile由以下內(nèi)容組成。
一個(gè)FROM指令,告訴Docker什么是基礎(chǔ)鏡像 - 一個(gè)ENV指令,傳遞一個(gè)環(huán)境變量 - 一個(gè)RUN指令,運(yùn)行一些shell命令(例如,基礎(chǔ)鏡像中不可用的依賴安裝的程序)。
一個(gè)CMD或一個(gè)ENTRYPOINT指令,告訴Docker在容器啟動(dòng)時(shí)運(yùn)行哪個(gè)可執(zhí)行文件 正如你所看到的,Dockerfile指令集的語(yǔ)法清晰而簡(jiǎn)單,這使得它很容易理解。我們將在本書后面對(duì)Dockerfiles進(jìn)行深入的研究。
Docker Engine:Docker Engine是Docker的核心部分。Docker Engine是一個(gè)客戶端-服務(wù)器應(yīng)用程序,它為構(gòu)建和管理Docker鏡像、Docker容器等提供平臺(tái)、運(yùn)行時(shí)和工具。
Docker Engine提供了以下內(nèi)容。
? Docker daemon
? Docker CLI
? Docker API-
Docker Daemon - 。
Docker守護(hù)進(jìn)程是一個(gè)在主機(jī)后臺(tái)運(yùn)行的服務(wù),處理大部分Docker命令的重任。
守護(hù)進(jìn)程監(jiān)聽用于創(chuàng)建和管理Docker對(duì)象(如容器)的API請(qǐng)求。
Docker守護(hù)進(jìn)程還可以與其他守護(hù)進(jìn)程對(duì)話,以管理和監(jiān)控Docker容器。守護(hù)進(jìn)程間通信的一些例子包括用于容器指標(biāo)監(jiān)控的通信Datadog和用于容器安全監(jiān)控的Aqua。
Docker CLI是你與Docker交互的主要方式。Docker CLI公開了一組你可以提供的命令。Docker CLI將請(qǐng)求轉(zhuǎn)發(fā)到Docker daemon,然后由Docker daemon執(zhí)行必要的工作。
build
pull
run
exec
雖然Docker CLI包括種類繁多的命令和子命令,但我們?cè)诒緯凶畛S玫拿钊缜八觥?/p>
<u>https://docs.docker.com/engine/reference/commandline/cli/</u>
在任何時(shí)候,給一個(gè)命令添加幫助,都會(huì)顯示出該命令所需的文檔。例如,如果你不太確定從哪里開始使用Docker CLI,你可以鍵入以下內(nèi)容。
docker help
docker help pull
Docker API
Docker還提供了一個(gè)與Docker引擎交互的API。如果需要在應(yīng)用程序中創(chuàng)建或管理容器,這一點(diǎn)特別有用。幾乎所有Docker CLI支持的操作都可以通過(guò)API來(lái)完成。
最簡(jiǎn)單的方法是使用curl發(fā)送API請(qǐng)求來(lái)啟動(dòng)Docker API。對(duì)于Windows Docker主機(jī),我們可以通過(guò)TCP端點(diǎn)到達(dá)。
curl <u>http://localhost:2375/images/json</u>
curl --unix-socket /var/run/docker.sock -X POST <u>http://images/json</u>
Docker Compose是一個(gè)定義和運(yùn)行多容器應(yīng)用程序的工具。就像Docker允許你為你的應(yīng)用程序構(gòu)建一個(gè)鏡像并在你的容器中運(yùn)行一樣,Compose使用相同的鏡像與定義文件(稱為compose文件)相結(jié)合來(lái)構(gòu)建。啟動(dòng)和運(yùn)行多容器應(yīng)用程序,包括依賴和鏈接容器。
Docker Compose最常見的用例是運(yùn)行應(yīng)用程序及其依賴的服務(wù)(如數(shù)據(jù)庫(kù)和緩存提供商)。
以與運(yùn)行單個(gè)容器應(yīng)用同樣簡(jiǎn)單、精簡(jiǎn)的方式。
Docker Machine是一個(gè)用于在多個(gè)虛擬主機(jī)上安裝Docker引擎,然后管理主機(jī)的工具。Docker Machine允許你在本地以及遠(yuǎn)程系統(tǒng)上創(chuàng)建Docker主機(jī),包括在Amazon Web Services、DigitalOcean和Microsoft Azure等云平臺(tái)上。
使用Docker鏡像 讓我們來(lái)看看可用的Docker鏡像。要做到這一點(diǎn),請(qǐng)鍵入以下命令。
docker image ls 這是本地可用鏡像的列表。
下面是有些常用的命令,可以自己實(shí)踐體驗(yàn)下。
docker image inspect hello-world
docker pull nginx

docker pull nginx:1.12-alpine-perl
docker pull docker-private.registry:1337/nginx
docker login docker-private.registry:1337
docker run -p 80:80 nginx
docker image inspect nginx | jq .[].Config.ExposedPorts
docker ps
docker ps -a
-n required-name
docker stop <container-id>
docker kill 3ed1222964de
docker rm <container-id>
docker image ls
docker rmi 3f8a4339aadd