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