柚子快報(bào)邀請(qǐng)碼778899分享:容器 Docker基礎(chǔ)
柚子快報(bào)邀請(qǐng)碼778899分享:容器 Docker基礎(chǔ)
目錄
Docker簡(jiǎn)介
是什么?
問題:為什么會(huì)有docker的出現(xiàn)
1. 環(huán)境一致性
2. 資源利用率
3. 敏捷開發(fā)與持續(xù)交付
4. 微服務(wù)架構(gòu)
5. 易于移植
6. DevOps 文化
7. 社區(qū)和生態(tài)系統(tǒng)
docker核心概念
(1)鏡像(Image)
(2)容器(Container)
(3)倉庫(Repository)
能干什么?
之前的虛擬機(jī)技術(shù)
容器虛擬化技術(shù)
Docker和傳統(tǒng)虛擬化技術(shù)的不同之處:
1. 架構(gòu)
傳統(tǒng)虛擬化技術(shù)(虛擬機(jī))
Docker
2. 啟動(dòng)時(shí)間
傳統(tǒng)虛擬機(jī)
Docker
3. 資源利用率
傳統(tǒng)虛擬機(jī)
Docker
4. 性能
傳統(tǒng)虛擬機(jī)
Docker
5. 存儲(chǔ)和網(wǎng)絡(luò)
傳統(tǒng)虛擬機(jī)
Docker
6. 管理和部署
傳統(tǒng)虛擬機(jī)
Docker
7. 使用場(chǎng)景
傳統(tǒng)虛擬機(jī)
Docker
Docker安裝
Docker常見命令
docker version
docker info
docker --help
容器命令
docker run
docker ps
docker exec
exit/Ctrl + P + Q
docker start
docker stop
docker restart
docker kill
docker rm
docker inspect
docker logs
docker cp
鏡像命令
docker images
docker rmi
docker image inspect
docker history
docker build
docker save
docker load
倉庫命令
docker login
docker search
docker pull
docker push
Docker Compose 命令
docker-compose up
docker-compose down
docker-compose build
docker-compose start
docker-compose stop
docker-compose restart
docker-compose ps
docker-compose logs [OPTIONS] [SERVICE...]
docker-compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
Docker簡(jiǎn)介
是什么?
Docker 是一個(gè)開源的平臺(tái),用于開發(fā)、交付和運(yùn)行應(yīng)用程序。它使得應(yīng)用程序可以與其依賴的所有組件打包在一個(gè)“容器”中,從而實(shí)現(xiàn)快速部署和一致的運(yùn)行環(huán)境。Docker 主要包括以下幾個(gè)方面的功能:
容器化技術(shù):Docker 使用容器來封裝應(yīng)用程序及其依賴的所有庫和配置文件。這使得應(yīng)用程序可以在任何環(huán)境中運(yùn)行,無論是開發(fā)人員的筆記本電腦、測(cè)試服務(wù)器還是生產(chǎn)環(huán)境。 鏡像:Docker 鏡像是一個(gè)輕量級(jí)的、獨(dú)立的、可執(zhí)行的軟件包,其中包含了運(yùn)行特定應(yīng)用程序所需的一切代碼、運(yùn)行時(shí)、庫和配置文件。你可以從鏡像創(chuàng)建容器。 Docker Hub:這是一個(gè)云端的 Docker 鏡像倉庫,用戶可以在上面存儲(chǔ)和共享他們創(chuàng)建的鏡像。它包含了大量的官方鏡像和社區(qū)創(chuàng)建的鏡像。 Docker Engine:這是 Docker 的核心組件,它負(fù)責(zé)創(chuàng)建和運(yùn)行 Docker 容器。Docker Engine 包括一個(gè) Docker Daemon(運(yùn)行在宿主操作系統(tǒng)上,管理容器)和一個(gè) Docker CLI(命令行界面,用戶通過它與 Docker Daemon 交互)。
問題:為什么會(huì)有docker的出現(xiàn)
1. 環(huán)境一致性
在軟件開發(fā)和部署過程中,開發(fā)環(huán)境、測(cè)試環(huán)境和生產(chǎn)環(huán)境之間的一致性問題常常導(dǎo)致應(yīng)用程序在不同環(huán)境中表現(xiàn)不一致。Docker 通過容器化技術(shù),將應(yīng)用程序及其所有依賴打包在一個(gè)獨(dú)立的環(huán)境中,從而保證了在任何地方運(yùn)行的環(huán)境一致性。這解決了“在我電腦上可以運(yùn)行”的問題。
2. 資源利用率
傳統(tǒng)的虛擬機(jī)(VM)需要為每個(gè)實(shí)例運(yùn)行一個(gè)完整的操作系統(tǒng),這導(dǎo)致了大量的資源浪費(fèi)。容器共享宿主操作系統(tǒng)的內(nèi)核,每個(gè)容器僅包含應(yīng)用程序和其依賴項(xiàng),而不需要完整的操作系統(tǒng),從而大大提高了資源利用率。相較于 VM,容器更加輕量級(jí),啟動(dòng)速度更快,資源占用更少。
3. 敏捷開發(fā)與持續(xù)交付
隨著敏捷開發(fā)和持續(xù)交付(CI/CD)方法的普及,開發(fā)團(tuán)隊(duì)需要更加快速和高效地構(gòu)建、測(cè)試和部署應(yīng)用程序。Docker 容器能夠快速啟動(dòng)和銷毀,使得開發(fā)和測(cè)試環(huán)境可以迅速搭建和回收,從而加快了開發(fā)和部署的速度。
4. 微服務(wù)架構(gòu)
微服務(wù)架構(gòu)是一種將應(yīng)用程序分解為小的、獨(dú)立的服務(wù)的方法。每個(gè)服務(wù)可以獨(dú)立開發(fā)、部署和擴(kuò)展。Docker 非常適合微服務(wù)架構(gòu),因?yàn)樗峁┝溯p量級(jí)的隔離環(huán)境,允許每個(gè)微服務(wù)在獨(dú)立的容器中運(yùn)行,并且可以獨(dú)立擴(kuò)展和更新。
5. 易于移植
由于 Docker 容器包含了應(yīng)用程序運(yùn)行所需的所有環(huán)境和依賴項(xiàng),它們可以輕松地從一個(gè)環(huán)境移植到另一個(gè)環(huán)境。這對(duì)于跨平臺(tái)部署(如從開發(fā)環(huán)境到生產(chǎn)環(huán)境,從本地環(huán)境到云端)非常有用。
6. DevOps 文化
Docker 的出現(xiàn)與 DevOps 文化的興起密切相關(guān)。DevOps 強(qiáng)調(diào)開發(fā)和運(yùn)維之間的協(xié)作和自動(dòng)化。Docker 提供了一種標(biāo)準(zhǔn)化的方式來構(gòu)建、分享和運(yùn)行應(yīng)用程序,使得開發(fā)和運(yùn)維團(tuán)隊(duì)可以更好地協(xié)作,從而提高了效率和可靠性。
7. 社區(qū)和生態(tài)系統(tǒng)
Docker 不僅是一個(gè)技術(shù)工具,它還得益于龐大的社區(qū)和豐富的生態(tài)系統(tǒng)支持。Docker Hub 提供了大量的預(yù)構(gòu)建鏡像,開發(fā)者可以方便地使用這些鏡像來構(gòu)建自己的應(yīng)用程序。此外,圍繞 Docker 的工具鏈(如 Docker Compose、Kubernetes 等)進(jìn)一步增強(qiáng)了其功能和可用性。
docker核心概念
(1)鏡像(Image)
Docker鏡像是一個(gè)特殊的文件系統(tǒng),提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件,另外還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。
鏡像是一個(gè)靜態(tài)的概念,不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。
(2)容器(Container)
鏡像與容器的關(guān)系,就是面向?qū)ο缶幊讨蓄惻c對(duì)象的關(guān)系,我們定好每一個(gè)類,然后使用類創(chuàng)建對(duì)象,對(duì)應(yīng)到Docker的使用上,則是構(gòu)建好每一個(gè)鏡像,然后使用鏡像創(chuàng)建我們需要的容器。
(3)倉庫(Repository)
倉庫是一個(gè)集中存儲(chǔ)和分發(fā)鏡像的服務(wù)。Docker Registry包含很多個(gè)倉庫,每個(gè)倉庫對(duì)應(yīng)多個(gè)標(biāo)簽,不同標(biāo)簽對(duì)應(yīng)一個(gè)軟件的不同版本。倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是Docker Hub,是Docker提供用于存儲(chǔ)和分布鏡像的官方Docker Registry,也是默認(rèn)的Registry。
Docker Hub有很多官方或其他開發(fā)提供的高質(zhì)量鏡像供我們使用,如果要將我們自己構(gòu)建的鏡像上傳到Docker Hub上,我們需要在Docker Hub上注冊(cè)一個(gè)賬號(hào),然后把自己在本地構(gòu)建的鏡像發(fā)送到Docker Hub的倉庫中。
解決了運(yùn)行環(huán)境和配置問題的軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)
能干什么?
之前的虛擬機(jī)技術(shù)
虛擬機(jī)(virtual machine)就是帶環(huán)境安裝的一種解決方案。它可以在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng),應(yīng)用程序?qū)Υ撕翢o感知,而對(duì)于底層系統(tǒng)來說,虛擬機(jī)就是一個(gè)普通文件,不需要了就刪掉,對(duì)其他部分毫無影響。
但是,這個(gè)方案有幾個(gè)缺點(diǎn):
資源占用多 冗余步驟多 啟動(dòng)慢
容器虛擬化技術(shù)
基于 Linux 內(nèi)核的 Cgroup,Namespace,以及Union FS 等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù),由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。
最初實(shí)現(xiàn)是基于 LXC,從 0.7 以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 Libcontainer,從1.11 開始,則進(jìn)一步演進(jìn)為使用 runC 和 Containerd。
Docker和傳統(tǒng)虛擬化技術(shù)的不同之處:
1. 架構(gòu)
傳統(tǒng)虛擬化技術(shù)(虛擬機(jī))
虛擬機(jī)監(jiān)控器(Hypervisor):虛擬機(jī)運(yùn)行在 Hypervisor 上,Hypervisor 可以直接在硬件上運(yùn)行(裸機(jī)型,如 VMware ESXi、Xen、Microsoft Hyper-V)或者在宿主操作系統(tǒng)上運(yùn)行(宿主型,如 VMware Workstation、Oracle VirtualBox)。 獨(dú)立操作系統(tǒng):每個(gè)虛擬機(jī)都有自己的操作系統(tǒng),包括完整的內(nèi)核和用戶空間,彼此之間完全隔離。 虛擬硬件:虛擬機(jī)包含虛擬硬件(CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)接口等),這些虛擬硬件通過 Hypervisor 映射到實(shí)際的物理硬件。
Docker
共享操作系統(tǒng)內(nèi)核:Docker 容器運(yùn)行在共享的宿主操作系統(tǒng)內(nèi)核上,每個(gè)容器只包含應(yīng)用程序和其依賴項(xiàng),而不包含操作系統(tǒng)內(nèi)核。 輕量級(jí)隔離:容器使用操作系統(tǒng)級(jí)別的虛擬化(如 Linux 上的 cgroups 和 namespaces)來實(shí)現(xiàn)隔離,提供了進(jìn)程級(jí)別的隔離環(huán)境。 標(biāo)準(zhǔn)化單元:Docker 容器是獨(dú)立的運(yùn)行時(shí)單元,但它們共享宿主操作系統(tǒng)的內(nèi)核資源,避免了額外的操作系統(tǒng)開銷。
2. 啟動(dòng)時(shí)間
傳統(tǒng)虛擬機(jī)
啟動(dòng)一個(gè)虛擬機(jī)通常需要幾分鐘時(shí)間,因?yàn)樾枰獑?dòng)一個(gè)完整的操作系統(tǒng)。
Docker
啟動(dòng)一個(gè) Docker 容器通常只需要幾秒鐘,因?yàn)椴恍枰獑?dòng)操作系統(tǒng),只需啟動(dòng)應(yīng)用程序及其依賴環(huán)境。
3. 資源利用率
傳統(tǒng)虛擬機(jī)
每個(gè)虛擬機(jī)運(yùn)行一個(gè)完整的操作系統(tǒng),這帶來了額外的資源開銷(CPU、內(nèi)存、存儲(chǔ))。多個(gè)虛擬機(jī)實(shí)例會(huì)消耗更多的資源。
Docker
Docker 容器共享宿主操作系統(tǒng)的內(nèi)核,不需要額外的操作系統(tǒng)資源。容器更加輕量級(jí),可以在同樣的硬件上運(yùn)行更多實(shí)例,提高了資源利用率。
4. 性能
傳統(tǒng)虛擬機(jī)
虛擬機(jī)通過 Hypervisor 進(jìn)行資源調(diào)度和管理,存在一定的性能損耗。
Docker
由于容器直接運(yùn)行在宿主操作系統(tǒng)上,沒有 Hypervisor 的中介層,容器的性能接近于原生應(yīng)用。
5. 存儲(chǔ)和網(wǎng)絡(luò)
傳統(tǒng)虛擬機(jī)
每個(gè)虛擬機(jī)有獨(dú)立的虛擬磁盤和網(wǎng)絡(luò)接口,通過 Hypervisor 管理虛擬機(jī)之間的網(wǎng)絡(luò)和存儲(chǔ)資源。
Docker
Docker 使用卷(volumes)和網(wǎng)絡(luò)插件來管理容器的存儲(chǔ)和網(wǎng)絡(luò),提供了靈活和高效的存儲(chǔ)和網(wǎng)絡(luò)解決方案。
6. 管理和部署
傳統(tǒng)虛擬機(jī)
虛擬機(jī)管理涉及虛擬機(jī)模板、快照、遷移等操作,管理起來相對(duì)復(fù)雜。
Docker
Docker 提供了一系列工具(如 Docker Compose、Swarm 和 Kubernetes)來簡(jiǎn)化容器的編排、部署和管理,使得大規(guī)模容器化應(yīng)用的管理更加便捷。
7. 使用場(chǎng)景
傳統(tǒng)虛擬機(jī)
適用于需要強(qiáng)隔離的多租戶環(huán)境,適合運(yùn)行需要獨(dú)立操作系統(tǒng)的傳統(tǒng)應(yīng)用。 常用于基礎(chǔ)設(shè)施即服務(wù)(IaaS)平臺(tái),如 AWS EC2、Microsoft Azure VM。
Docker
適用于現(xiàn)代微服務(wù)架構(gòu)、敏捷開發(fā)和持續(xù)交付(CI/CD)環(huán)境。 常用于平臺(tái)即服務(wù)(PaaS)和容器即服務(wù)(CaaS)平臺(tái),如 AWS ECS、Google Kubernetes Engine(GKE)。
Docker安裝
Vulhub - Docker-Compose file for vulnerability environment
Docker常見命令
docker version
顯示docker的版本信息
docker info
顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量
docker --help
幫助命令
容器命令
docker run
新建容器并啟動(dòng) 例:docker run -it -d -p8881:80 lamp5.5.9:latest /start.sh
--name 指定容器名字用來區(qū)分容器,–name="Name"或者 --name “Name”
-i 保持容器運(yùn)行。通常與 -t 或 -d同時(shí)使用
-t 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用,容器創(chuàng)建后自動(dòng)進(jìn)入容器中,退出容器后,容器自動(dòng)關(guān)閉。
-d 以守護(hù)(后臺(tái))模式運(yùn)行容器。創(chuàng)建一個(gè)容器在后臺(tái)運(yùn)行,需要使用docker exec 進(jìn)入容器。退出后,容器不會(huì)關(guān)閉。-it 創(chuàng)建的容器一般稱為交互式容器,-id 創(chuàng)建的容器一般稱為守護(hù)式容器。
-P(大寫) 隨機(jī)指定端口
-p 宿主機(jī)端口:容器端口 端口映射
-v 宿主機(jī)目錄:容器目錄 目錄映射
-e 指定容器運(yùn)行的環(huán)境變量
-w 指定容器內(nèi)工作目錄
docker ps
列出所有運(yùn)行的容器
-a, --all: 顯示所有容器(默認(rèn)只顯示正在運(yùn)行的容器)。
-f, --filter filter: 根據(jù)提供的條件過濾輸出。
--format string: 使用 Go 模板對(duì)容器信息進(jìn)行美化輸出。
-n, --last int: 顯示最后創(chuàng)建的 n 個(gè)容器(包括所有狀態(tài))(默認(rèn)值為 -1)。
-l, --latest: 顯示最新創(chuàng)建的容器(包括所有狀態(tài))。
--no-trunc: 不截?cái)噍敵觥?/p>
-q, --quiet: 只顯示容器 ID。
-s, --size: 顯示總文件大小。
docker exec
進(jìn)入容器內(nèi)部
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:在運(yùn)行的容器中執(zhí)行命令。
exit/Ctrl + P + Q
退出容器
docker start
啟動(dòng)一個(gè)或多個(gè)已經(jīng)被停止的容器
docker stop
停止一個(gè)或多個(gè)運(yùn)行中的容器
docker restart
重啟一個(gè)或多個(gè)容器
docker kill
強(qiáng)制終止一個(gè)或多個(gè)容器
docker rm
刪除一個(gè)或多個(gè)容器
-f, --force:強(qiáng)制刪除正在運(yùn)行的容器(使用 SIGKILL 信號(hào))。
-l, --link:刪除指定的鏈接。
-v, --volumes:刪除與容器關(guān)聯(lián)的匿名卷。
docker inspect
查看容器信息
docker logs
查看容器日志
docker cp
容器主機(jī)間拷貝
鏡像命令
docker images
查看所有本地鏡像
-a, --all:顯示所有鏡像(默認(rèn)隱藏中間鏡像)。
--digests:顯示摘要(digests)。
-f, --filter filter:根據(jù)提供的條件過濾輸出。
--format string:使用 Go 模板美化鏡像輸出。
--no-trunc:不截?cái)噍敵觥?/p>
-q, --quiet:只顯示鏡像 ID。
docker rmi
刪除鏡像
docker image inspect
查看鏡像詳情
docker history
查看鏡像的創(chuàng)建歷史
docker build
構(gòu)建鏡像
docker build -f dockerfile文件路徑 -t 鏡像名:[tag]
docker save
導(dǎo)出鏡像
docker load
導(dǎo)入鏡像
倉庫命令
docker login
登錄倉庫
私有倉庫登錄后能上傳拉取,不登錄不能上傳拉取。公有倉庫,登錄可以上傳拉取,不登錄只能拉取不能上傳。
docker search
查找鏡像
-f, --filter filter:基于提供的條件過濾輸出。
--format string:使用 Go 模板美化搜索結(jié)果輸出。
--limit int:搜索結(jié)果的最大數(shù)量(默認(rèn)為 25)。
--no-trunc:不截?cái)噍敵觥?/p>
docker pull
拉取鏡像
-a, --all-tags:下載存儲(chǔ)庫中的所有帶標(biāo)簽的鏡像。
--disable-content-trust:跳過鏡像驗(yàn)證(默認(rèn)為 true)。
--platform string:如果服務(wù)器支持多平臺(tái),則設(shè)置平臺(tái)。
-q, --quiet:抑制詳細(xì)輸出。
docker push
上傳鏡像到倉庫
-a, --all-tags:推送存儲(chǔ)庫中的所有帶標(biāo)簽的鏡像。
--disable-content-trust:跳過鏡像簽名(默認(rèn)為 true)。
-q, --quiet:抑制詳細(xì)輸出。
Docker Compose 命令
Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具。
docker-compose up
構(gòu)建、(重新)創(chuàng)建、啟動(dòng)并附加到容器。
docker-compose down
停止并刪除容器、網(wǎng)絡(luò)、卷和鏡像。
docker-compose build
構(gòu)建或重新構(gòu)建服務(wù)。
docker-compose start
啟動(dòng)已停止的服務(wù)容器。
docker-compose stop
停止運(yùn)行的容器,而不刪除它們。
docker-compose restart
重啟服務(wù)容器。
docker-compose ps
列出所有容器。
docker-compose logs [OPTIONS] [SERVICE...]
查看服務(wù)容器的日志。
docker-compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
在一個(gè)正在運(yùn)行的容器中執(zhí)行命令。
柚子快報(bào)邀請(qǐng)碼778899分享:容器 Docker基礎(chǔ)
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。