Docker知识3:Docker的体系简介
摘要:
本文是關于docker的專題討論,作者用一組文檔盡可能保證完整地闡述Docker到底是啥?如何使用?docker的使用范圍等。相關的其它文章是:
Docker知識1:Docker-hub簡介
Docker知識2:安裝docker-desktop
Docker知識3:Docker的體系簡介
Docker知識4:如何在win10下安裝 / 使用ubuntu ?應用WSL2
docker知識5:在WSL2的ubuntu20.04環境安裝使用docker_gongdiwudu的專欄-CSDN博客
1 Docker的C-S構成
?? ? ? ? 學習docker,就要知道它的組織架構。這幾個關聯的概念需要切記:
? ? ? ? ? ? ?1? ?屬于官方管理的碼頭HUB
? ? ? ? ? ? ? ? ? 碼頭(docker hub):
? ? ? ? ? ? ? ? ? 碼頭是個大雜燴,任何人可以注冊,生成鏡像放上去,別人可以下載鏡像,使用鏡像
? ? ? ? ? ? ? ? ?倉庫(Repositories):
? ? ? ? ? ? ? ? ? 倉庫是個私人建的,可以存放鏡像的場所。
? ? ? ? ? ? ? ? ? 鏡像(images):
? ? ? ? ? ? ? ? ? 就是任何人可以上載或下載的成品。
? ? ? ? ? ? ?2? ?屬于本地需要鏡像管理、容器管理
? ? ? ? ? ? ? ? ? 客戶端(docker engine,注意:windows的docker-desktop內涵docker engine)
? ? ? ? ? ? ? ? ? 有兩個功能:1)與hub通信,數據交換。 2)管理本地的image和container
? ? ? ? ? ? ? ? ? 鏡像(images)
? ? ? ? ? ? ? ? ? 本地生成的鏡像數據包,從hub下載的鏡像數據包。
? ? ? ? ? ? ? ? ? 容器(container)
? ? ? ? ? ? ? ? ? ?通過鏡像生成的實例對象。
? ? ? ? DockerHub是一個大型互聯網服務器,好比一個碼頭,個人可以注冊后,在碼頭可以Create一個倉庫,以便日后上載自己的鏡像并存儲。同時,該處有學習的資料、可以下載的軟件,免費的公共鏡像,都可以在碼頭上找到。入口(Docker Hub)。
? ? ? ?docker-desktop就是win10版本的客戶端,它既是你與Docker-Hub交互的基礎平臺,也是你本地加工自已的鏡像的一個工廠。需要按照你在Docker-Hub的注冊遠程登入Docker-Hub。(注意:登入官方Docker-Hub有兩個途徑。瀏覽器登入,或客戶端登入docker-desktop。)
? ? ? ubuntu的客戶端是無圖形界面的,通過啟動docker-engine進程后,遠程登錄Docker-HUB然后上傳或下載。
下圖描述了Docker的C-S結構。? ? ??
?docker是由Docker-HUB,Docker-Desktop構成的Client-Server網絡結構。其分工是:
?服務器端:
- Docker-HUB是服務器,內部存放大量映像供客戶下載
- 自己注冊后,也可以將自己的鏡像上載到HUB上,供別人下載使用。
客戶端:
- 可以登錄服務器,
- 可以將本地鏡像上載到HUB
- 可以從服務器下載鏡像
- 可以制作本地鏡像和容器。
?2 客戶端desktop的特征
( 以下客戶端主要指的是win10下的版本,至于Ubuntu或其他linux則有Docker-engin對應指令完成)
- VPN直通
當連接到VPN時,Docker桌面網絡可以工作。為此,Docker Desktop攔截來自容器的流量,并將其注入Windows,就好像它源于Docker應用程序一樣。
- 端口映射
運行帶有-p參數的容器時,例如:
$docker run -p 80:80-d nginx
Docker Desktop使容器(在本例中為nginx)中的端口80上運行的任何東西在localhost的端口80上可用。在本例中,主機端口和容器端口是相同的。如果需要指定不同的主機端口怎么辦?例如,如果您的主機的端口80上已經運行了某些內容,則可以將容器連接到其他端口:
$docker run -p 8000:80-d nginx
現在,到localhost:8000的連接被發送到容器中的端口80。-p的語法是? ? HOST_?PORT : CLIENT_PORT。
- 代理
Docker Desktop允許您配置HTTP/HTTPS代理設置,并自動將這些設置傳播到Docker。例如,如果將代理設置設置設置為http://proxy.example.com,Docker在拉動容器時使用此代理。
但是,代理設置不會傳播到您開始的容器中。如果您希望為容器設置代理設置,則需要為它們定義環境變量,就像在Linux上所做的那樣,例如:
> docker run -e HTTP_PROXY=https://proxy.example.com:3128 alpine envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=b7edf988b2b5 TERM=xterm HOME=/root HTTP_PROXY=http://proxy.example.com:3128?詳細環境配置見?Set environment variables.
3 個人用法體驗
本人安裝了兩個體系,win10的Docker-Desktop和win10的WSL2體系;
Docker-Desktop體系本質上也是linux內核,但用cmd做終端,效果始終趕不上ubuntu系統。對初學者也幫助不大。
而WSL2裝Ubuntu-20就不一樣了,除了沒有Ubuntu圖形界面,其他的基本和獨立的Ubuntu系統沒有兩樣。
所以建議用Win10的同學,安裝一個docker-desktop學習一下就棄用吧,改用WSL2為好,干正事還是它好用。有關WSL2的技術的資料有參照博文1?和 參考博文2
4 相關網絡特性
4.1已知的限制、用例和解決方法🔗
以下是Docker Desktop for Windows網絡堆棧當前限制的摘要,以及一些解決方法的想法。
- Windows上沒有docker0橋🔗
由于在Docker Desktop for Windows中實現網絡的方式,您無法在主機上看到docker0接口。這個接口實際上在虛擬機中。
- 我不能ping我的容器?
Docker Desktop for Windows無法將流量路由到基于Linux的容器。但是,您可以ping 基于的Windows容器。
- 無法給每個容器提供一個IP地址
無法從Windows主機訪問docker(基于Linux)網橋網絡。但是,可以訪問基于Windows的容器。
4.2 從容器連接到主機上的服務
主機的IP地址正在更改(如果您沒有網絡訪問權限,則沒有IP地址)。我們建議您連接到特殊的DNS名稱host.docker.internal,該名稱解析為主機使用的內部IP地址。這是出于開發目的,在Docker Desktop for Windows之外的生產環境中不起作用。
也可以使用gateway.docker.internal訪問網關。
如果您的計算機上安裝了Python,請使用以下說明作為示例,從容器連接到主機上的服務:
- 1 運行以下命令在端口8000上啟動一個簡單的HTTP服務器。
python-m http.server 8000? ? 或? ?
python -m SimpleHTTPServer 8000
- 2 現在,運行一個容器,安裝curl,并嘗試使用以下命令連接到主機:
4.3 試圖從Windows連接到容器?
本地主機的端口轉發localhost;?--publish,?-p, or?-P?所有都能工作。從Linux公開的端口被轉發到主機。
我們目前的建議是發布一個端口,或者從另一個容器連接。即使在Linux上,如果容器位于覆蓋網絡上,而不是橋網絡上,這也是您需要做的,因為這些都不是路由的。
運行nginxwebserver的命令如Getting Started中所示就是一個例子。
$ docker run -d -p 80:80 --name webserver nginx?為了澄清語法,以下兩個命令都將容器的端口80發布到主機的端口8000:
$ docker run --publish 8000:80 --name webserver nginx$ docker run -p 8000:80 --name webserver nginx要發布所有端口,請使用-P標志。例如,以下命令啟動容器(在分離模式下),并且-P標志將容器的所有公開端口發布到主機上的隨機端口。
$ docker run -d -P --name webserver nginx總結
以上是生活随笔為你收集整理的Docker知识3:Docker的体系简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在ubuntu上使用SSH客户端
- 下一篇: python的QT5:如何用QT5实现菜