Docker
以下是一些docker的基礎(chǔ)面試題,下一篇docker進階面試題。本系列《最少必要面試題》
1. 什么是 Docker 容器?
Docker 是一種流行的開源軟件平臺,可簡化創(chuàng)建、管理、運行和分發(fā)應(yīng)用程序的過程。它使用容器來打包應(yīng)用程序及其依賴項。我們也可以將容器視為 Docker 鏡像的運行時實例。
2. Docker 和虛擬機有什么不同?
Docker 是輕量級的沙盒,在其中運行的只是應(yīng)用,虛擬機里面還有額外的系統(tǒng)。
3. 什么是 DockerFile?
Dockerfile 是一個文本文件,其中包含我們需要運行以構(gòu)建 Docker 鏡像的所有命令,每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。Docker 使用 Dockerfile 中的指令自動構(gòu)建鏡像。我們可以 docker build 用來創(chuàng)建按順序執(zhí)行多個命令行指令的自動構(gòu)建。
一些最常用的指令如下:
FROM :使用 FROM 為后續(xù)的指令建立基礎(chǔ)映像。在所有有效的 Dockerfile 中, FROM 是第一條指令。
LABEL: LABEL 指令用于組織項目映像,模塊,許可等。在自動化布署方面 LABEL 也有很大用途。在 LABEL 中指定一組鍵值對,可用于程序化配置或布署 Docker 。
RUN: RUN 指令可在映像當(dāng)前層執(zhí)行任何命令并創(chuàng)建一個新層,用于在映像層中添加功能層,也許最來的層會依賴它。
CMD: 使用 CMD 指令為執(zhí)行的容器提供默認(rèn)值。在 Dockerfile 文件中,若添加多個 CMD 指令,只有最后的 CMD 指令運行。
4. 使用Docker Compose時如何保證容器A先于容器B運行?
Docker Compose 是一個用來定義和運行復(fù)雜應(yīng)用的Docker工具。一個使用Docker容器的應(yīng)用,通常由多個容器組成。使用Docker Compose不再需要使用shell腳本來啟動容器。Compose 通過一個配置文件來管理多個Docker容器。簡單理解:Docker Compose 是docker的管理工具。
Docker Compose 在繼續(xù)下一個容器之前不會等待容器準(zhǔn)備就緒。為了控制我們的執(zhí)行順序,我們可以使用“取決于”條件,depends_on 。這是在 docker-compose.yml 文件中使用的示例
version: "2.4"
services:
backend:
build: . # 構(gòu)建自定義鏡像
depends_on:
- db
db:
image: mysql
用 docker-compose up 命令將按照我們指定的依賴順序啟動和運行服務(wù)。
5. 一個完整的Docker由哪些部分組成?
- DockerClient 客戶端
- Docker Daemon 守護進程
- Docker Image 鏡像
- DockerContainer 容器
6. docker常用命令
命令建議在本地安裝做一個實操,記憶會更深刻。
也可以克隆基于docker的倆萬(springboot+vue)項目練手,提供視頻+完善文檔。地址:https://gitee.com/rodert/liawan-vue
- 查看本地主機的所用鏡像:`docker images``
- 搜索鏡像:`docker search mysql``
- 下載鏡像:
docker pull mysql,沒寫 tag 就默認(rèn)下載最新的 lastest - 下載指定版本的鏡像:`docker pull mysql:5.7``
- 刪除鏡像:`docker rmi -f 鏡像id 鏡像id 鏡像id``
7. 描述 Docker 容器的生命周期。
Docker 容器經(jīng)歷以下階段:
- 創(chuàng)建容器
- 運行容器
- 暫停容器(可選)
- 取消暫停容器(可選)
- 啟動容器
- 停止容器
- 重啟容器
- 殺死容器
- 銷毀容器
8. docker容器之間怎么隔離?
這是一道涉獵很廣泛的題目,理解性閱讀。
Linux中的PID、IPC、網(wǎng)絡(luò)等資源是全局的,而Linux的NameSpace機制是一種資源隔離方案,在該機制下這些資源就不再是全局的了,而是屬于某個特定的NameSpace,各個NameSpace下的資源互不干擾。
Namespace實際上修改了應(yīng)用進程看待整個計算機“視圖”,即它的“視線”被操作系統(tǒng)做了限制,只能“看到”某些指定的內(nèi)容。對于宿主機來說,這些被“隔離”了的進程跟其他進程并沒有區(qū)別。
雖然有了NameSpace技術(shù)可以實現(xiàn)資源隔離,但進程還是可以不受控的訪問系統(tǒng)資源,比如CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等,為了控制容器中進程對資源的訪問,Docker采用control groups技術(shù)(也就是cgroup),有了cgroup就可以控制容器中進程對系統(tǒng)資源的消耗了,比如你可以限制某個容器使用內(nèi)存的上限、可以在哪些CPU上運行等等。
有了這兩項技術(shù),容器看起來就真的像是獨立的操作系統(tǒng)了。
強烈建議大家實操,才能更好的理解docker。
低谷蓄力