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