怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布

怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站設(shè)計(jì)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站設(shè)計(jì)及推廣,對(duì)戶外休閑椅等多個(gè)領(lǐng)域擁有多年的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

一. docker 是什么

大家都知道虛擬機(jī)吧,windows 上裝個(gè) linux 虛擬機(jī)是大部分程序員的常用方案。公司生產(chǎn)環(huán)境大多也是虛擬機(jī),虛擬機(jī)將物理硬件資源虛擬化,按需分配和使用,虛擬機(jī)使用起來和真實(shí)操作系統(tǒng)一模一樣,當(dāng)廢棄不用時(shí)直接刪除虛擬機(jī)文件即可回收資源,很方便集中管理。

由于虛擬機(jī)非常龐大,同時(shí)對(duì)硬件資源的消耗也大,linux 發(fā)展出了另一種虛擬化技術(shù),即 linux 容器(Linux Containers,縮寫為 LXC),它并不像虛擬機(jī)那樣模擬一個(gè)完整的操作系統(tǒng),卻提供虛擬機(jī)一樣的效果。如果說虛擬機(jī)是操作系統(tǒng)級(jí)別的隔離,那么容器就是進(jìn)程級(jí)別的隔離,可以想象這種級(jí)別隔離的優(yōu)點(diǎn),無疑是快速的,節(jié)省資源的。

docker 就是對(duì) linux 容器的封裝,提供簡單實(shí)用的用戶接口,是目前最流行的 linux容器解決方案。

下面是百科的定義:

docker 是基于 Go 語言的開源的應(yīng)用容器引擎,并遵從Apache2.0協(xié)議,docker 讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。

二. docker 解決什么問題

1. 解決虛擬機(jī)資源消耗問題。

服務(wù)器操作系統(tǒng)之上運(yùn)行著虛擬機(jī),虛擬機(jī)上運(yùn)行著客戶操作系統(tǒng),客戶操作系統(tǒng)之上運(yùn)行著用戶的應(yīng)用程序,一臺(tái)服務(wù)器 80% 的資源開銷都花費(fèi)在了硬件虛擬化和客戶機(jī)操作系統(tǒng)本身。

怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布

圖1. 虛擬機(jī)架構(gòu)與容器架構(gòu)區(qū)別

如圖 1 所示,如果采用 docker 容器技術(shù),容器上運(yùn)行著虛擬服務(wù)器,虛擬服務(wù)器中運(yùn)行著用戶的應(yīng)用程序,虛擬服務(wù)器和服務(wù)器操作系統(tǒng)使用同一內(nèi)核,虛擬服務(wù)器的文件系統(tǒng)使用物理服務(wù)器的文件系統(tǒng),但做了隔離,看上去每個(gè)虛擬服務(wù)器都有自己獨(dú)立的文件系統(tǒng);在物理服務(wù)器上建立了虛擬網(wǎng)橋設(shè)備,每個(gè)虛擬服務(wù)器通過虛擬網(wǎng)橋設(shè)備連接網(wǎng)絡(luò)。虛擬服務(wù)器直接使用物理服務(wù)器的CPU、內(nèi)存、硬盤,并不對(duì)硬件進(jìn)行虛擬化,因此沒有硬件虛擬化和客戶機(jī)操作系統(tǒng)占用的資源消耗,每一臺(tái)虛擬服務(wù)器的性能接近于物理服務(wù)器性能。

一臺(tái)普通家用電腦運(yùn)行一個(gè) Linux 虛擬機(jī)可能已經(jīng)非???,但是卻可以使用 docker 虛擬出幾十甚至上百臺(tái)虛擬的 linux 服務(wù)器。如果換成性能強(qiáng)勁的服務(wù)器,使用 docker 就可以提供私有云服務(wù)了。

2. 快速部署。

軟件開發(fā)的難題在于環(huán)境配置,在自己電腦上運(yùn)行的軟件,換一臺(tái)機(jī)器可能就無法運(yùn)行,除非保證操作系統(tǒng)的設(shè)置正確,各種組件和庫的正確安裝。比如部署一個(gè) Java 開發(fā)的 web 系統(tǒng),計(jì)算機(jī)必須安裝 Java 和正確的環(huán)境變量,可能還需要安裝 tomcat、nginx。換臺(tái)機(jī)器部署就要重來一次。

使用 docker 可以將應(yīng)用程序及依賴打包在一個(gè)文件里(docker 鏡像文件),運(yùn)行這個(gè)文件就會(huì)啟動(dòng)虛擬服務(wù)器,在虛擬服務(wù)器啟動(dòng)應(yīng)用程序或服務(wù),就像在真實(shí)在物理機(jī)上運(yùn)行一樣,有了 docker,就可以一次部署,處處運(yùn)行,也可以用于自動(dòng)化發(fā)布。

3. 提供一次性的環(huán)境。

比如,本地測(cè)試他人的軟件、持續(xù)集成的時(shí)候提供單元測(cè)試和構(gòu)建的環(huán)境,啟動(dòng)或關(guān)閉一個(gè)虛擬服務(wù)器就像啟動(dòng)或關(guān)閉一個(gè)進(jìn)程一樣簡單和快速。

4. 提供彈性的云服務(wù)。

因?yàn)?Docker 容器可以隨開隨關(guān),很適合動(dòng)態(tài)擴(kuò)容和縮容。

5. 組建微服務(wù)架構(gòu)。

通過多個(gè)容器,一臺(tái)機(jī)器可以跑很多個(gè)虛擬服務(wù)器,因此在一臺(tái)機(jī)器上就可以模擬出微服務(wù)架構(gòu),也可以模擬出分布式架構(gòu)。

三. docker 安裝部署與使用

本文介紹 ubuntu 18.04 系統(tǒng)下的安裝與使用。其他操作系統(tǒng)請(qǐng)參考官方文檔https://docs.docker.com/。

1. 安裝 docker 引擎

獲取最新版本的 Docker 安裝包

aaron@ubuntu:~$ wget -qO- https://get.docker.com/ | sh

執(zhí)行上述命令,輸入當(dāng)前用戶密碼,即可自動(dòng)下載最新版的 docker 安裝包,并自動(dòng)安裝。
安裝完成后有個(gè)提示:

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker">

當(dāng)要以非 root 用戶可以直接運(yùn)行 docker 時(shí),需要執(zhí)行

sudo usermod -aG docker aaron

命令將用戶 aaron 添加到 docker 用戶組中,然后重新登陸,否則會(huì)報(bào)下面的錯(cuò)誤:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

執(zhí)行下列命令啟動(dòng) docker 引擎

aaron@ubuntu:~$ sudo service docker start

安裝成功后已默認(rèn)設(shè)置開機(jī)啟動(dòng)并自動(dòng)啟動(dòng),如果要手動(dòng)設(shè)置,執(zhí)行下面命令:

sudo systemctl enable docker
sudo systemctl start docker

測(cè)試運(yùn)行

aaron@ubuntu:~$ sudo docker run hello-world

2. 使用 docker

1. 理解 docker 的架構(gòu)

使用前先了解下 docker 的架構(gòu),如下圖所示:

怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布

docker 架構(gòu)圖

docker 鏡象(image) 是存放在 docker 倉庫(Registry)的文件,是用于創(chuàng)建 docker 容器 的模板。

docker 容器 是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,可以理解為前述介紹的虛擬服務(wù)器。

docker 主機(jī) 是一個(gè)物理或者虛擬的機(jī)器用于執(zhí)行 docker 守護(hù)進(jìn)程和容器。

docker 客戶端 通過命令行或者其他工具使用 docker API 與 docker 的守護(hù)進(jìn)程通信。
作為用戶,我們直接使用的是 docker 客戶端。

2. docker 命令

查看docker 命令的幫助信息

docker --help  #docker 全部命令幫助信息
docker COMMAND --help #docker 具體命令COMMAND的幫助信息

查看docker 信息

docker info

可以看到容器的池、已用數(shù)據(jù)大小、總數(shù)據(jù)大小,基本容器大小、當(dāng)前運(yùn)行容器數(shù)量等。

搜索鏡像,從網(wǎng)絡(luò)中搜索別人做好的容器鏡像。

docker search ubuntu
docker search centos

ubuntu 鏡像

ubuntu 鏡像

從這里可以看出有的鏡像已經(jīng)集成了 php、java、ansible 等應(yīng)用,我們也可以制作包含自己應(yīng)用或服務(wù)的鏡像文件,將此文件傳給別人,別人即可直接使用 docker 打開容器,不需要任何額外的操作,也不像虛擬機(jī)那樣消耗資源,即可運(yùn)行你的應(yīng)用或服務(wù),是不是非常方便?!

如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試、LR腳本開發(fā)、面試經(jīng)驗(yàn)交流。感興趣可以175317069,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來的,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家。

從網(wǎng)絡(luò)中下載別人做好的容器鏡像。

docker pull centos
docker pull ubuntu

導(dǎo)入下載好的容器鏡像文件

docker load < image_xxx.tar

查看鏡像

docker images
docker images -a

檢查鏡像

docker inspect ubuntu

可以看到容器鏡像的基本信息。

刪除鏡像,通過鏡像的 id 來指定刪除

docker rmi ubuntu

刪除全部鏡像

docker rmi $(docker images -q)

顯示鏡像歷史

docker history ubuntu

運(yùn)行容器

Docker容器可以理解為在沙盒中運(yùn)行的進(jìn)程,這個(gè)沙盒包含了該進(jìn)程運(yùn)行所必須的資源,包括文件系統(tǒng)、系統(tǒng)類庫、shell 環(huán)境等。但這個(gè)沙盒默認(rèn)是不會(huì)運(yùn)行任何程序的,需要在沙盒中運(yùn)行一個(gè)進(jìn)程來啟動(dòng)某一個(gè)容器。這個(gè)進(jìn)程是該容器的唯一進(jìn)程,所以當(dāng)該進(jìn)程結(jié)束的時(shí)候,容器也會(huì)完全停止。

運(yùn)行 ubuntu 容器并進(jìn)入交互式環(huán)境

aaron@ubuntu:~$ docker run -i --name="ubuntu1" --hostname="ubuntu1" ubuntu /bin/sh
cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  ubuntu1
whoami
root
uname -a
Linux ubuntu1 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

上述命令我們創(chuàng)建了一個(gè)名字為 ubuntu1 的容器,設(shè)置容器的主機(jī)名為 ubuntu1,進(jìn)入 /bin/sh 命令后我們打印了 hosts 文件的內(nèi)容,查看了內(nèi)核版本(與本機(jī)操作系統(tǒng)版本一致),這里可以使用各種 linux 命令,就像在新的操作系統(tǒng)中使用命令一個(gè)樣。同樣的方法,我們?cè)谛碌慕K端創(chuàng)建一個(gè) ubuntu2 的容器,并使用

docker ps

查看正在運(yùn)行的容器。

怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布

查看正在運(yùn)行的容器

輸入 exit 退出容器。

docker run -d ubuntu

會(huì)出現(xiàn)一串長的字母數(shù)字組成的串,為容器的 id,請(qǐng)注意容器要有持續(xù)運(yùn)行的進(jìn)程存在,否則,容器會(huì)很快自動(dòng)退出。

運(yùn)行容器并指定MAC地址

docker run -d --name='centos3' --hostname='centos3' --mac-address="02:42:AC:11:00:24">

列出所有的容器

docker ps -a

列出最近一次啟動(dòng)的容器

docker ps -l

檢查容器

docker inspect centos1

可以獲取容器的相關(guān)信息。

獲取容器CID

docker inspect -f '{{.Id}}' centos1

獲取容器PID

docker inspect -f '{{.State.Pid}}' centos1

獲取容器IP

docker inspect -f '{{.NetworkSettings.IPAddress}}' centos1

獲取容器網(wǎng)關(guān)

docker inspect -f '{{.NetworkSettings.Gateway}}' centos1

獲取容器 MAC

docker inspect -f '{{.NetworkSettings.MacAddress}}' centos1

查看容器 IP 地址

docker inspect -f '{{.NetworkSettings.IPAddress}}' centos1

連接容器

ssh 容器的 IP 地址

輸入密碼:123456

容器運(yùn)行后,可以通過另一種方式進(jìn)入容器內(nèi)部

docker exec -it centos /bin/sh

查看容器運(yùn)行過程中的日志

docker logs centos1

列出一個(gè)容器里面被改變的文件或者目錄,列表會(huì)顯示出三種事件,A 增加的;D 刪除的;C 被改變的

docker diff centos1

和初始容器鏡像項(xiàng)目,用戶或系統(tǒng)增加/修改/刪除了那些目錄文件,都可以查看到。

查看容器里正在運(yùn)行的進(jìn)程

docker top centos1

拷貝容器里的文件/目錄到本地服務(wù)器

docker cp centos1:/etc/passwd /tmp/
ls /tmp/passwd

通過網(wǎng)絡(luò) IP 地址也可以將容器的文件拷貝到服務(wù)器,這種方式比較方便。

停止容器

docker stop centos1

停止所有容器

docker kill $(docker ps -a -q)

啟動(dòng)容器

docker start centos1

刪除單個(gè)容器

docker stop centos1
docker rm centos1

刪除容器之前要先停止該容器的運(yùn)行。

刪除所有容器

docker kill $(docker ps -a -q)
docker rm $(docker ps -a -q)

3. 卷的概念

為了能夠保存(持久化)數(shù)據(jù)以及共享容器間的數(shù)據(jù),docker 提出了卷的概念。卷 Volume 就是容器的特定目錄,該目錄下的文件保存在宿主機(jī)上,而不是容器的文件系統(tǒng)內(nèi)。

數(shù)據(jù)卷是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過容器默認(rèn)的文件系統(tǒng),可以提供很多有用的特性:

(1)數(shù)據(jù)卷可以在容器之間共享和重用;

(2)對(duì)數(shù)據(jù)卷的修改會(huì)立馬生效;

(3)對(duì)數(shù)據(jù)卷的更新,不會(huì)影響鏡像;

(4)數(shù)據(jù)卷默認(rèn)會(huì)一直存在,即使容器被刪除。

注意:數(shù)據(jù)卷的使用,類似于 Linux下對(duì)目錄進(jìn)行掛載 mount,容器中被指定為掛載點(diǎn)的目錄中的文件會(huì)隱藏掉,能顯示看的是掛載的數(shù)據(jù)卷。

創(chuàng)建、使用數(shù)據(jù)卷

mkdir -p /root/volume1
mkdir -p /root/volume2
docker run -d -v /volume1 --name='centos5' docker-centos6.10-hadoop-spark
docker run -d -v /root/volume1:/volume1 --name='centos6' docker-centos6.10-hadoop-spark
docker run -d -v /root/volume1:/volume1 -v /root/volume2:/volume2 --name='centos7' docker-centos6.10-hadoop-spark
docker run -d -v /root/volume1:/volume1:ro --name='centos8' docker-centos6.10-hadoop-spark

使用docker run命令創(chuàng)建容器,指定 -v 標(biāo)記來創(chuàng)建一個(gè)數(shù)據(jù)卷并掛載到容器里;可以掛載多個(gè)數(shù)據(jù)卷;可以設(shè)置卷的只讀屬性;可以不指定服務(wù)器映射的目錄,由系統(tǒng)自動(dòng)指定目錄,通過 docker inspect 來查看映射的路徑。

分別進(jìn)入這些容器,查看 /volume1、/volume2目錄。

數(shù)據(jù)卷共享

如果要授權(quán)一個(gè)容器訪問另一個(gè)容器的數(shù)據(jù)卷,可以使用-volumes-from 參數(shù)來執(zhí)行。

數(shù)據(jù)卷容器

如果有一些持續(xù)更新的數(shù)據(jù)需要在容器之間共享,最好創(chuàng)建數(shù)據(jù)卷容器。

數(shù)據(jù)卷容器,其實(shí)就是一個(gè)正常的容器,專門用來提供數(shù)據(jù)卷供其它容器掛載的。

(1)創(chuàng)建一個(gè)名為 dbdata 的數(shù)據(jù)卷容器

docker run -d -v /dbdata --name dbdata docker-centos6.10-hadoop-spark

(2)在其他容器中使用--volumes-from來掛載 dbdata 容器中的數(shù)據(jù)卷

docker run -d --volumes-from dbdata --name db1 docker-centos6.10-hadoop-spark
docker run -d --volumes-from dbdata --name db2 docker-centos6.10-hadoop-spark

這樣就可以實(shí)現(xiàn)容器之間的數(shù)據(jù)共享。

分別進(jìn)入這些容器,查看 /volume1、/volume2 目錄。

4. 自制鏡像并發(fā)布

保存容器修改,提交一個(gè)新的容器鏡像

docker commit centos1 centos111

將現(xiàn)有的容器提交形成一個(gè)新的容器鏡像,使用 docker images 可以看到 centos111 鏡像。通過此方法,可以創(chuàng)建一個(gè)新的容器鏡像。

查看鏡像

docker images

REPOSITORY TAG IMAGE ID   CREATED  SIZE

centos111 latest d691a75ee371   23 minutes ago 501.5 MB

根據(jù)新容器鏡像創(chuàng)建容器

docker run -d --name='centos111' centos111

查看容器

docker inspect centos111

導(dǎo)出和導(dǎo)入鏡像

當(dāng)需要把一臺(tái)機(jī)器上的鏡像遷移到另一臺(tái)機(jī)器的時(shí)候,需要導(dǎo)出鏡像與導(dǎo)入鏡像。

機(jī)器A

docker save docker-centos6.10-hadoop-spark > docker-centos6.10-hadoop-spark2.tar

docker save -o docker-centos6.10-hadoop-spark docker-centos6.10-hadoop-spark2.tar

使用 scp 命令同其他方式將 docker-centos6.10-hadoop-spark2.tar 拷到機(jī)器 B 上

機(jī)器B

docker load < docker-centos6.10-hadoop-spark2.tar

docker load -i docker-centos6.10-hadoop-spark2.tar

發(fā)布容器鏡像

docker push centos6.8-lamp1

將容器發(fā)布到網(wǎng)絡(luò)中。

5. docker 網(wǎng)絡(luò)

如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試、LR腳本開發(fā)、面試經(jīng)驗(yàn)交流。感興趣可以175317069,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來的,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家。

docker 啟動(dòng)時(shí)會(huì)在宿主機(jī)器上創(chuàng)建一個(gè)名為 docker0 的虛擬網(wǎng)絡(luò)接口。它會(huì)從RFC 1918 定義的私有地址中隨機(jī)選擇一個(gè)主機(jī)不用的地址和子網(wǎng)掩碼,并將它分配給 docker0,默認(rèn)選擇 172.18.0.1/16,一個(gè) 16 位的子網(wǎng)掩碼給容器提供了 65534 個(gè) IP 地址。

docker0 并不是正常的網(wǎng)絡(luò)接口,只是一個(gè)在綁定到這上面的其他網(wǎng)卡間自動(dòng)轉(zhuǎn)發(fā)數(shù)據(jù)包的虛擬以太網(wǎng)橋,可以使容器與主機(jī)相互通信、容器與容器間相互通信。

docker 每創(chuàng)建一個(gè)容器,就會(huì)創(chuàng)建一對(duì)對(duì)等接口(Peer Interface),類似于一個(gè)管子的兩端,在一邊可以收到另一邊發(fā)送的數(shù)據(jù)包。docker會(huì)將對(duì)等接口中的一個(gè)做為 eth0 接口連接到容器上,并使用類似于vethAQI2QT 這樣的惟一名稱來持有另一個(gè),該名稱取決于主機(jī)的命名空間。通過將所有 veth* 接口綁定到 docker0 橋接網(wǎng)卡上,docker 在主機(jī)和所有 docker 容器間創(chuàng)建一個(gè)共享的虛擬子網(wǎng)。

docker NAT 網(wǎng)絡(luò)

docker 容器默認(rèn)通過 nat 方式訪問網(wǎng)絡(luò),docker 啟動(dòng)時(shí)會(huì)在宿主主機(jī)上創(chuàng)建一個(gè)名為 docker0 的虛擬網(wǎng)絡(luò)接口,docker0 只是一個(gè)在綁定到這上面的其他網(wǎng)卡間自動(dòng)轉(zhuǎn)發(fā)數(shù)據(jù)包的虛擬以太網(wǎng)橋,它可以使容器和主機(jī)相互通信、容器與容器間通信。

docker0 的網(wǎng)關(guān)地址是172.18.0.1,掩碼是 16 位,提供了 65534 個(gè)IP地址。

NAT 方式,虛擬器容器可以訪問外網(wǎng)(宿主機(jī)以外),但宿主機(jī)以外的機(jī)器不能訪問容器內(nèi)網(wǎng)。

docker Bridage 網(wǎng)絡(luò)

docker 容器可以通過 bridge 方式訪問網(wǎng)絡(luò)。

bridge方式,虛擬器容器可以訪問外網(wǎng)(宿主機(jī)以外),宿主機(jī)以外的機(jī)器也能訪問容器內(nèi)網(wǎng)。

6. docker pipework

docker 自身的網(wǎng)絡(luò)功能比較簡單,不能滿足很多復(fù)雜的應(yīng)用場(chǎng)景。因此有很多開源項(xiàng)目用來改善 docker 的網(wǎng)絡(luò)功能,如 pipework、weave、flannel 等。

pipework 是由 docker 的工程師 Jér?me Petazzoni 開發(fā)的一個(gè) docker 網(wǎng)絡(luò)配置工具,由 200 多行 shell 實(shí)現(xiàn),方便易用。

安裝 pipework

git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /bin/

wget [http://172.17.1.240/docker/software/pipework](http://172.17.1.240/docker/software/pipework)
chmod a+x pipework
cp pipework /bin/

運(yùn)行容器

docker run -d --net='none' --name='centos9' docker-centos6.10-hadoop-spark

配置容器網(wǎng)絡(luò),并連到網(wǎng)橋 docker0 上;網(wǎng)關(guān)在IP地址后面加 @ 指定。

pipework docker0 centos9 172.18.0.100/16@172.18.0.1

7. docker 網(wǎng)絡(luò)端口映射

容器如果使用 docker0 虛擬網(wǎng)絡(luò),那么容器的網(wǎng)絡(luò)是 172.17.0.0/16,容器可以通過 NAT 方式訪問外網(wǎng);但外網(wǎng)不能訪問內(nèi)網(wǎng)。如果容器使用 br0 虛擬網(wǎng)絡(luò),容器和服務(wù)器可以在同一個(gè)網(wǎng)絡(luò)地址段;容器可以訪問外網(wǎng);外網(wǎng)也可以訪問容器網(wǎng)絡(luò)。
對(duì)于使用 docker0 虛擬網(wǎng)絡(luò)的容器,可以通過端口映射的方式,讓外網(wǎng)訪問容器某些端口。

運(yùn)行容器

docker run -d -p 38022:22 --name='centos10' docker-centos6.10-hadoop-spark

連接容器

ssh localhost -p 38022

在其他服務(wù)器上通過訪問物理服務(wù)器加端口即可訪問容器,可以一次映射多個(gè)端口。

運(yùn)行容器

docker run -d -p 38022:22 -p 38080:80 --name='centos11' docker-centos6.10-hadoop-spark

其實(shí)現(xiàn)原理是在服務(wù)器上通過 iptables 轉(zhuǎn)發(fā)來實(shí)現(xiàn)。當(dāng)然也可以通過iptables 轉(zhuǎn)發(fā)整個(gè)容器 IP 地址。

由于容器是進(jìn)程級(jí)別的,相比虛擬機(jī)有很多優(yōu)勢(shì)。

(1)啟動(dòng)快

容器里面的應(yīng)用,直接就是底層系統(tǒng)的一個(gè)進(jìn)程,而不是虛擬機(jī)內(nèi)部的進(jìn)程。所以,啟動(dòng)容器相當(dāng)于啟動(dòng)本機(jī)的一個(gè)進(jìn)程,而不是啟動(dòng)一個(gè)操作系統(tǒng),速度就快很多。

(2)資源占用少

容器只占用需要的資源,不占用那些沒有用到的資源;虛擬機(jī)由于是完整的操作系統(tǒng),不可避免要占用所有資源。另外,多個(gè)容器可以共享資源,虛擬機(jī)都是獨(dú)享資源。

(3)體積小

容器只要包含用到的組件即可,而虛擬機(jī)是整個(gè)操作系統(tǒng)的打包,所以容器文件比虛擬機(jī)文件要小很多。

總之,容器有點(diǎn)像輕量級(jí)的虛擬機(jī),能夠提供虛擬化的環(huán)境,但是成本開銷小得多。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

分享題目:怎么進(jìn)行Docker的架構(gòu)與自制鏡像的發(fā)布
鏈接分享:http://bm7419.com/article20/psdijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站營銷、商城網(wǎng)站、云服務(wù)器、企業(yè)建站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)