好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > docker容器從入門到癡迷(推薦)

docker容器從入門到癡迷(推薦)

熱門標簽:ec外呼系統怎么樣 漯河電銷外呼系統價格 征服者快捷酒店地圖標注 天津外呼系統運營商 蕪湖呼叫中心外呼系統哪家強 貴港市機器人外呼系統團隊 電銷機器人怎么錄音 貴陽語音電銷機器人 咸陽穩定外呼系統公司

1. docker 是什么

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

由于虛擬機非常龐大,同時對硬件資源的消耗也大,linux 發展出了另一種虛擬化技術,即 linux 容器(Linux Containers,縮寫為 LXC),它并不像虛擬機那樣模擬一個完整的操作系統,卻提供虛擬機一樣的效果。如果說虛擬機是操作系統級別的隔離,那么容器就是進程級別的隔離,可以想象這種級別隔離的優點,無疑是快速的,節省資源的。

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

下面是百科的定義:

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

2. docker 解決什么問題

1. 解決虛擬機資源消耗問題。

服務器操作系統之上運行著虛擬機,虛擬機上運行著客戶操作系統,客戶操作系統之上運行著用戶的應用程序,一臺服務器 80% 的資源開銷都花費在了硬件虛擬化和客戶機操作系統本身。

圖1. 虛擬機架構與容器架構區別

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

一臺普通家用電腦運行一個 Linux 虛擬機可能已經非??ǎ菂s可以使用 docker 虛擬出幾十甚至上百臺虛擬的 linux 服務器。如果換成性能強勁的服務器,使用 docker 就可以提供私有云服務了。

2. 快速部署。

軟件開發的難題在于環境配置,在自己電腦上運行的軟件,換一臺機器可能就無法運行,除非保證操作系統的設置正確,各種組件和庫的正確安裝。比如部署一個 Java 開發的 web 系統,計算機必須安裝 Java 和正確的環境變量,可能還需要安裝 tomcat、nginx。換臺機器部署就要重來一次。

使用 docker 可以將應用程序及依賴打包在一個文件里(docker 鏡像文件),運行這個文件就會啟動虛擬服務器,在虛擬服務器啟動應用程序或服務,就像在真實在物理機上運行一樣,有了 docker,就可以一次部署,處處運行,也可以用于自動化發布。

3. 提供一次性的環境。

比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境,啟動或關閉一個虛擬服務器就像啟動或關閉一個進程一樣簡單和快速。

4. 提供彈性的云服務。

因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

5. 組建微服務架構。

通過多個容器,一臺機器可以跑很多個虛擬服務器,因此在一臺機器上就可以模擬出微服務架構,也可以模擬出分布式架構。

3. docker 安裝部署與使用

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

1. 安裝 docker 引擎

獲取最新版本的 Docker 安裝包

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

執行上述命令,輸入當前用戶密碼,即可自動下載最新版的 docker 安裝包,并自動安裝。

安裝完成后有個提示:

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

 sudo usermod -aG docker aaron

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
     containers which can be used to obtain root privileges on the
     docker host.
     Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
     for more information.

 

當要以非 root 用戶可以直接運行 docker 時,需要執行

sudo usermod -aG docker aaron 

命令將用戶 aaron 添加到 docker 用戶組中,然后重新登陸,否則會報下面的錯誤:

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'.

執行下列命令啟動 docker 引擎

aaron@ubuntu:~$ sudo service docker start

安裝成功后已默認設置開機啟動并自動啟動,如果要手動設置,執行下面命令:

sudo systemctl enable docker
sudo systemctl start docker

測試運行

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

2. 使用 docker

1. 理解 docker 的架構

使用前先了解下 docker 的架構,如下圖所示:

 

docker 架構圖

  • docker 鏡象(image) 是存放在 docker 倉庫(Registry)的文件,是用于創建 docker 容器 的模板。
  • docker 容器 是獨立運行的一個或一組應用,可以理解為前述介紹的虛擬服務器。
  • docker 主機 是一個物理或者虛擬的機器用于執行 docker 守護進程和容器。
  • docker 客戶端 通過命令行或者其他工具使用 docker API 與 docker 的守護進程通信。

作為用戶,我們直接使用的是 docker 客戶端。

2. docker 命令

查看docker 命令的幫助信息

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

查看docker 信息

docker info

可以看到容器的池、已用數據大小、總數據大小,基本容器大小、當前運行容器數量等。

搜索鏡像,從網絡中搜索別人做好的容器鏡像。

docker search ubuntu
docker search centos

 

ubuntu 鏡像

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

從網絡中下載別人做好的容器鏡像。

docker pull centos
docker pull ubuntu

導入下載好的容器鏡像文件

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

運行容器

Docker容器可以理解為在沙盒中運行的進程,這個沙盒包含了該進程運行所必須的資源,包括文件系統、系統類庫、shell 環境等。但這個沙盒默認是不會運行任何程序的,需要在沙盒中運行一個進程來啟動某一個容器。這個進程是該容器的唯一進程,所以當該進程結束的時候,容器也會完全停止。

運行 ubuntu 容器并進入交互式環境

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

上述命令我們創建了一個名字為 ubuntu1 的容器,設置容器的主機名為 ubuntu1,進入 /bin/sh 命令后我們打印了 hosts 文件的內容,查看了內核版本(與本機操作系統版本一致),這里可以使用各種 linux 命令,就像在新的操作系統中使用命令一個樣。同樣的方法,我們在新的終端創建一個 ubuntu2 的容器,并使用

docker ps

查看正在運行的容器。

 

查看正在運行的容器

輸入 exit 退出容器。

docker run -d ubuntu

會出現一串長的字母數字組成的串,為容器的 id,請注意容器要有持續運行的進程存在,否則,容器會很快自動退出。
運行容器并指定MAC地址

docker run -d --name='centos3' --hostname='centos3' --mac-address="02:42:AC:11:00:24" docker-centos6.10-hadoop-spark

列出所有的容器

docker ps -a

列出最近一次啟動的容器

docker ps -l

檢查容器

docker inspect centos1

可以獲取容器的相關信息。

獲取容器CID

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

獲取容器PID

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

獲取容器IP

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

獲取容器網關

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

獲取容器 MAC

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

查看容器 IP 地址

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

連接容器

ssh 容器的 IP 地址

輸入密碼:123456

容器運行后,可以通過另一種方式進入容器內部

docker exec -it centos /bin/sh

查看容器運行過程中的日志

docker logs centos1

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

docker diff centos1

和初始容器鏡像項目,用戶或系統增加/修改/刪除了那些目錄文件,都可以查看到。
查看容器里正在運行的進程

docker top centos1

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

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

通過網絡 IP 地址也可以將容器的文件拷貝到服務器,這種方式比較方便。

停止容器

docker stop centos1

停止所有容器

docker kill $(docker ps -a -q)

啟動容器

docker start centos1

刪除單個容器

docker stop centos1
docker rm centos1

刪除容器之前要先停止該容器的運行。

刪除所有容器

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

3. 卷的概念

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

數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過容器默認的文件系統,可以提供很多有用的特性:
(1)數據卷可以在容器之間共享和重用;
(2)對數據卷的修改會立馬生效;
(3)對數據卷的更新,不會影響鏡像;
(4)數據卷默認會一直存在,即使容器被刪除。

注意:數據卷的使用,類似于  Linux下對目錄進行掛載 mount,容器中被指定為掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。

創建、使用數據卷

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命令創建容器,指定 -v 標記來創建一個數據卷并掛載到容器里;可以掛載多個數據卷;可以設置卷的只讀屬性;可以不指定服務器映射的目錄,由系統自動指定目錄,通過 docker inspect 來查看映射的路徑。

分別進入這些容器,查看 /volume1、/volume2目錄。

數據卷共享

如果要授權一個容器訪問另一個容器的數據卷,可以使用-volumes-from 參數來執行。

數據卷容器

如果有一些持續更新的數據需要在容器之間共享,最好創建數據卷容器。

數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。

(1)創建一個名為 dbdata 的數據卷容器

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

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

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

這樣就可以實現容器之間的數據共享。

分別進入這些容器,查看 /volume1、/volume2 目錄。

4. 自制鏡像并發布

保存容器修改,提交一個新的容器鏡像

docker commit centos1 centos111

將現有的容器提交形成一個新的容器鏡像,使用 docker images 可以看到 centos111 鏡像。通過此方法,可以創建一個新的容器鏡像。

查看鏡像

docker images

REPOSITORY TAG IMAGE ID  CREATED SIZE

centos111 latest d691a75ee371  23 minutes ago 501.5 MB

根據新容器鏡像創建容器

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

查看容器

docker inspect centos111

導出和導入鏡像
當需要把一臺機器上的鏡像遷移到另一臺機器的時候,需要導出鏡像與導入鏡像。
機器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 拷到機器 B 上
機器B

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


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

發布容器鏡像

docker push centos6.8-lamp1

將容器發布到網絡中。

5. docker 網絡

docker 啟動時會在宿主機器上創建一個名為 docker0 的虛擬網絡接口。它會從RFC 1918 定義的私有地址中隨機選擇一個主機不用的地址和子網掩碼,并將它分配給 docker0,默認選擇 172.18.0.1/16,一個 16 位的子網掩碼給容器提供了 65534 個 IP 地址。

docker0 并不是正常的網絡接口,只是一個在綁定到這上面的其他網卡間自動轉發數據包的虛擬以太網橋,可以使容器與主機相互通信、容器與容器間相互通信。

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

docker NAT 網絡

docker 容器默認通過 nat 方式訪問網絡,docker 啟動時會在宿主主機上創建一個名為 docker0 的虛擬網絡接口,docker0 只是一個在綁定到這上面的其他網卡間自動轉發數據包的虛擬以太網橋,它可以使容器和主機相互通信、容器與容器間通信。

docker0 的網關地址是172.18.0.1,掩碼是 16 位,提供了 65534 個IP地址。

NAT 方式,虛擬器容器可以訪問外網(宿主機以外),但宿主機以外的機器不能訪問容器內網。

docker Bridage 網絡

docker 容器可以通過 bridge 方式訪問網絡。

bridge方式,虛擬器容器可以訪問外網(宿主機以外),宿主機以外的機器也能訪問容器內網。

6. docker pipework

docker 自身的網絡功能比較簡單,不能滿足很多復雜的應用場景。因此有很多開源項目用來改善 docker 的網絡功能,如 pipework、weave、flannel 等。

pipework 是由 docker 的工程師 Jérôme Petazzoni 開發的一個 docker 網絡配置工具,由 200 多行 shell 實現,方便易用。

安裝 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/

運行容器

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

配置容器網絡,并連到網橋 docker0 上;網關在IP地址后面加 @ 指定。

pipework docker0 centos9 172.18.0.100/16@172.18.0.1

7. docker 網絡端口映射

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

運行容器

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

連接容器

ssh localhost -p 38022

在其他服務器上通過訪問物理服務器加端口即可訪問容器,可以一次映射多個端口。
運行容器

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

其實現原理是在服務器上通過 iptables 轉發來實現。當然也可以通過iptables 轉發整個容器 IP 地址。

4. 總結

由于容器是進程級別的,相比虛擬機有很多優勢。

(1)啟動快
容器里面的應用,直接就是底層系統的一個進程,而不是虛擬機內部的進程。所以,啟動容器相當于啟動本機的一個進程,而不是啟動一個操作系統,速度就快很多。

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

(3)體積小
容器只要包含用到的組件即可,而虛擬機是整個操作系統的打包,所以容器文件比虛擬機文件要小很多。
總之,容器有點像輕量級的虛擬機,能夠提供虛擬化的環境,但是成本開銷小得多。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:西藏 西寧 怒江 淮北 東營 香港 攀枝花 濰坊

巨人網絡通訊聲明:本文標題《docker容器從入門到癡迷(推薦)》,本文關鍵詞  docker,容器,從,入門,到,癡迷,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《docker容器從入門到癡迷(推薦)》相關的同類信息!
  • 本頁收集關于docker容器從入門到癡迷(推薦)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 粉嫩粉嫩的极品美女asspie| 亚洲婷婷成人激久久月天| 黑人40厘米全进去xxxx猛交| 久久国产一片免费观看| 扒开jk美女?狂揉?韩国网站| 91麻豆国产| 97精品国产高清久久久久蜜芽| 国产又爽又大又黄A片色戒一| 边摸边吃奶边做爽视频免费| 小嫂子韩国电影| 最新免费中文字幕看电影软件| 18男女无套?免费视频| 美女被爆羞羞网站免费| 太大了坐不下去哈昂| 57pao国产成永久免费软件| 把女人弄爽特黄a大片片视频| 国产一级a毛一级a看免费视频黑人| 国产毛片哪里有| 成人免费高清完整版在线观看 | 女配不掺和(快穿)第二部| 人人做人人添A片久久精品| 公交车上3p嗯啊呻吟18p| 女攻男受调教高h打屁股| 色综合67194| 健身教练漫画免费无删除版| 毛片网在线观看| 国产午夜精品成人剧场| 一本色道a无线码一区v-爱岛国 | 欧美高潮喷谢精水XXX小说| 我的男友又娇又作| 又色又湿又黄又爽又刺激的视频 | 老外3p中国少妇高清露脸| WC凸凹撤尿女厕视频HD| www.色呦呦.com| 男模健身教练china1069| 精品人妻无码一区二区三区不卡| japanesefreexxxvideos| ass让你勃起少妇毛pics| 欧美AV人人妻AV人人爽蜜桃| 99re免费在线视频| 中文字幕人成不卡一区|