跳到主要內容

docker (2)---存儲、網絡(利用docker容器上線靜態網站)

一、docker底層依賴的核心技術


1、命名空間 (Namespaces)


2、控制組 (Control Groups)


3、聯合文件系統 (Union File System)


4Linux 虛擬網絡支持:本地和容器內創建虛擬接口


(1) 命名空間(Namespaces):


實現了容器間資源的隔離,每個容器擁有自己獨立的命名空間 , 運行其中的應用就像是運行在獨立的操作系統中一樣 , 我們都可以看到文件系統,網卡等資源保證了容器之間互不影響,namesaces管理進程號 , 每個進程命名空間有一套自己的進程號管理方法 ,


程命名空間是一個父子關係的結構 , 子空間中的進程對於父空間是可見的。


(2) 控制組 (Control Groups) :


  控制組 (Control groups)--CGroups Linux 內核的一個特性 ,主要用來對共享資源進行隔離、限制、審計等 。cgroups 允許對於進程或進程組公平( 不公平 ) 的分配 CPU 時間、內存分配和 I/O 帶寬。


容器通過 cgroups 來得到所能夠管理資源的分配和使用。因此容器所獲得資源僅為所有系統資源的一個部分


1、資源限制 : 內存子系統為進程組設置內存使用上限,內存達到上限后再申請內存,就會發出 Out of Memory


2、 優先級 : 通過優先級讓一些組得到更多 CPU 等資源


3、 資源審計 : 用來統計系統上實際把多少資源用到適合的目的上 , 可以使用 cpuacct 子系統記錄某個進程組使用的 CPU 時間


4、 隔離 : 為組隔離名字空間 , 這樣一個組不會看到其他組的進程 .網絡連接和文件系統


5、 控制 : 掛起 . 恢復和啟動等操作


(3)聯合文件系統 (Union File System) :


  docker 中使用AUFS(another Union File System v2 版本以後的Advanced multi-layered Unification File System) 控製為每一個成員目錄設定只讀 / 讀寫 / 寫出權限 , 同時 AUFS 有一個類似分層的概念 , 對只讀權限的分支可以邏輯上進行增量的修改.


二、docker的存儲


docker兩種存儲資源類型:


1Data Volume (數據卷)


2Data Volume Dontainers --- 數據卷容器


(1) Data Volume (數據卷):


Data Volume 本質上是 Docker Host 文件系統中的目錄或文件,使用類似與 Linux 下對目錄或者文件進行 mount 操作。數據卷可以在容器之間共享和重用,對數據卷的更改會立馬生效,對數據卷的更新不會影響鏡像,卷會一直存在,直到沒有容器使用。


Data Volume(數據卷)的特點:


1Data Volume 是目錄或文件,而非沒有格式化的磁盤(塊設備)。


2、容器可以讀寫 volume 中的數據。


3volume 數據可以被永久的保存,即使使用它的容器已經銷毀。


 Data Volume 的使用:


1、在宿主機根目錄下創建一個目錄(數據卷)


 


2、啟動一個容器並將數據卷掛載到容器的目錄下


 


3、驗證  ( 持久化的需要映射目錄)


 


#


 


(2)Data Volume Dontainers --- 數據卷容器


數據卷容器就是一個普通的容器,只不過是專門用它提供數據卷供其他容器掛載使用


Data Volume Dontainers使用:


1、創建一個名為 dbdata 的數據卷,並在其中創建一個數據卷掛載到 /dbdata


docker run -dti -v /dbdata --name dbser centos:latest


2、再啟動兩個容器,並使用數據卷容器


docker run -dti --volumes-from dbser --name db1 centos:latest


#



3、驗證


 


#



容器 db1 db2 同時掛載了同一個數據卷到本地相同 /dbdata目錄。三個容器任何一個目錄下的寫入,都可以時時同步到另外兩個


三、docker 三種網絡


  docker 網絡從覆蓋範圍可分為單個 host 上的容器網絡和跨多個 host 的網絡,docker 目前提供了映射容器端口到宿主主機和容器互聯機制來為容器提供網絡服務,在啟動容器的時候,如果不指定參數,在容器外部是沒有辦法通過網絡來訪問容器內部的網絡應用和服務的


docker 安裝時會自動在host上創建三個網絡


docker   network  ls   (查看docker  網絡)


(1) docker--none網絡


none 網絡就是什麼都沒有的網絡。掛在這個網絡下的容器除了 lo,沒有其他 任何網卡。容器創建時,可以通過 --network=none 指定使用 none 網絡


 


none網絡的應用


封閉的網絡意味着隔離,一些對安全性要求高並且不需要聯網的應用可以使用 none 網絡。


(2)docker--host網絡


連接到 host 網絡的容器,共享 docker host 的網絡棧,容器的網絡配置與host 完全一樣。可以通過 --network=host 指定使用 host 網絡


 


host 網絡的應用


  直接使用 Docker host 的網絡最大的好處就是性能,如果容器對網絡傳輸效率有較高要求,就可以選擇 host 網絡。當然不便之處就是犧牲一些靈活性,比如要考慮端口衝突問題,Docker host上已經使用的端口就不能再用了。


Docker host 的另一個用途是讓容器可以直接配置 host 網路。比如某些跨host 的網絡解決方案,其本身也是以容器方式運行的,這些方案需要對網絡進行配置,比如管理 iptables


(3) docker--bridge 網絡


docker 安裝時會創建一個 命名為 docker0 linux bridge。如果不指定--network,創建的容器默認都會掛到 docker0


 


#


 


eth0@if29      veth04c5851 是一對 veth pair


#



  veth pair 是一種成對出現的特殊網絡設備,可以把它們想象成由一根虛擬網線連接起來的一對網卡,網卡的一頭(eth0@if29)在容器中,另一頭( veth04c5851)掛在網橋 docker0 上,其效果就是將 eth0@if29也掛在了docker0 上。


# 查看網絡配置信息 ( 設置容器ip 網段、網關)


docker network inspect bridge

 


#



注:容器創建時,docker 會自動從 172.17.0.0/16 中分配一個 IP,這裏 16 位的掩碼保證有足夠多的 IP 可以供容器。


四、創建 user-defined網絡 (自定義網絡)


通過 bridge 驅動創建類似前面默認的 bridge 網絡


1、利用bridge驅動創建名為my-net2網橋(docker會自動分配網段)


docker network create --driver bridge my-net2


# 查看網絡配置信息


 


# 查看網橋


 


2、利用bridge驅動創建名為my-net3網橋(user-defined (自定義)網段及網關)


docker network create --driver bridge --subnet 172.33.1.0/24 --gateway 172.33.1.1 my-net3


# 查看網絡配置信息


 


# 查看網橋


 


3、啟動容器使用新建的my-net3網絡


docker run -it  --network=my-net3  busybox:latest


4、啟動容器使用my-net3網絡並指定ip(只有使用 --subnet 創建的網絡才能指定靜態 IP,如果是docker自動分配的網段不可以指定ip


docker run -it --network=my-net3  --ip 172.33.1.100  busybox:latest

 


5、讓已啟動不同vlanbusybox容器,可以連接到my-net2(其實在busybox中新建了my-net2的網卡)(添加網卡。訪問不同的網段)


 


# #docker network connect my-net3  08493ae30117   ( 連接)


6、使用--name指定啟動容器名字,可以使用docker自帶DNS通信,但只能工作在user-defined 網絡,默認的 bridge 網絡是無法使用 DNS 的。


#docker run -it --network=my-net3 --name=bbox1 busybox:latest 

#docker run
-it --network=my-net3 --name=bbox2 busybox:latest


7、容器之間的網絡互聯


&1、創建一個 db 容器


docker run -dti --name db centos:latest


&2、創建一個 web 容器,並使其連接到 容器db


docker run -dti --name web --link db:dblink centos:latest /bin/bash

--link db:dblink 實際是連接對端的名字和這個鏈接的名字,也就是和 db 容器建立一個叫做 dblink 的鏈接


 


# 測試  


 


注:此鏈接通信是單向的


8、容器端口映射


在啟動容器的時候,如果不指定參數,在容器外部是沒有辦法通過網絡來訪問容器內部的網絡應用和服務的,當容器需要通信時,我們可以使用 -P (大) &&-p (小)來指定端口映射


(1)   -P Docker 會隨機映射一個 49000 49900 的端口到容器內部開放的網絡端口


(2)   -p :則可以指定要映射的端口,並且在一個指定的端口上只可以綁定一個容器。


支持的格式


 IP HostPort ContainerPort


 IP : : ContainerPort


 IP HostPort


&1、 查看映射


docker port   CONTAINER ID/NAMES


&2、映射所有接口地址,此時綁定本地所有接口上的 5200 到容器的 5200 接口,訪問任何一個本地接口的 5000 ,都會直接訪問到容器內部


docker run -dti -p 5200:5200 centos:latest  /bin/bash


&3、多次使用可以實現多個接口的映射


docker run -dti -p 5400:5400  -p 5300:5300 centos:latest  /bin/bash


&4、映射到指定地址的指定接口


此時會綁定本地 192.168.226.147 接口上的 5100 到容器的 5100 接口


docker run -dti -p 192.168.226.147:5100:5100 centos:latest /bin/bash

 


&5、映射到指定地址的任意接口


此時會綁定本地 192.168.226.147 接口上的任意一個接口到容器的 5500 接口


docker run -dti -p 192.168.226.147::5500 centos:latest /bin/bash


實驗、通過端口映射實現訪問本地的 IP:PORT 可以訪問到容器內的 web


1、將容器80端口映射到主機8090端口


docker run -itd -p 192.168.226.147:8090:80 --name http-test httpd:latest


2、查看剛運行docker容器


docker  ps

 


3、進入 容器


 


4、容器內部編輯網頁文件 index.html


 


5、到宿主機上打開瀏覽器輸入 IP:PORT 訪問驗證


http://192.168.226.147:8090/


 


6、宿主機上傳靜態網站測試文件


 


7、解壓


 


8、把解壓的目錄上傳至容器下的網站根目錄


docker cp jd 67b3daf15a40:/usr/local/apache2/htdocs


9、進入容器,刪除原來的index.html 文件


 


10、展開目錄


 


11web 訪問


http://192.168.226.147:8090/


 


 

【精選推薦文章】



如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!



想要讓你的商品在網路上成為最夯、最多人討論的話題?



網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線



不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務



想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!



Orignal From: docker (2)---存儲、網絡(利用docker容器上線靜態網站)

留言

這個網誌中的熱門文章

Python 併發總結,多線程,多進程,異步IO

1 測量函數運行時間 import time def profile(func): def wrapper(*args, ** kwargs): import time start = time.time() func( *args, ** kwargs) end = time.time() print ' COST: {} ' .format(end - start) return wrapper @profile def fib(n): if n<= 2 : return 1 return fib(n-1) + fib(n-2 ) fib( 35 )   2 啟動多個線程,並等待完成   2.1 使用threading.enumerate() import threading for i in range(2 ): t = threading.Thread(target=fib, args=(35 ,)) t.start() main_thread = threading.currentThread() for t in threading.enumerate(): if t is main_thread: continue t.join()   2.2 先保存啟動的線程 threads = [] for i in range(5 ): t = Thread(target=foo, args= (i,)) threads.append(t) t.start() for t in threads: t.join()   3 使用信號量,限制同時能有幾個線程訪問臨界區 from threading import Semaphore import time sema = Semaphor...

高雄十大包子名店出爐

, 圖文:吳恩文 高雄包子大賽落幕了,我只能就我個人意見, 介紹一下前十名這些包子,但是不能代表其他四位評審的意見,雖然身為評審長,我通常不會第一個表示意見,以免影響其他評審, 我主要工作是負責發問。   這次參賽的素包子很少,而且都不夠細致,又偏油,我不愛, 但是第一名的甜芝麻包-熔岩黑金包,竟然是素食得名- 漢來蔬食巨蛋店。   這包子賣相太好,竹炭粉的黑色外皮刷上金粉,一上桌,眾人驚呼, 搶拍照,內餡是芝麻餡,混一點花生醬增稠,加入白糖芝麻油, 熔岩爆漿的程度剛剛好,我一直以為芝麻要配豬油才行、 但是選到好的黑芝麻油一樣不減香醇, 當下有二位評審就想宅配回家。   尤其特別的是,黑芝麻餡室溫易化,師傅必須要輪班躲在冷藏室內, 穿著大外套才能包,一天包不了多少,我笑說,漢來美食,集團餐廳那麼多,實力雄厚,根本是「 奧運選手報名參加村裡運動會」嘛,其他都是小包子店啊, 但是沒辦法,顯然大家都覺得它好看又好吃, 目前限定漢來蔬食高雄巨蛋店,二顆88元,可以冷凍宅配, 但是要排一陣子,因為供不應求,聽說,四月份, 台北sogo店開始會賣。   第二名的包子,左營寬來順早餐店,顯然平易近人的多,一顆肉包, 十塊錢,是所有參賽者中最便宜的,當然,個頭也小, 它的包子皮明顯和其他不同,灰灰的老麵,薄但紮實有嚼勁, 肉餡新鮮帶汁,因為打了些水,味道極其簡單,就是蔥薑,塩, 香油,薑味尤其明顯,是老眷村的味道, 而特別的是老闆娘是台灣本省人, 當年完全是依據眷村老兵的口味一步一步調整而來,沒有加什麼糖、 五香粉,胡椒粉,油蔥酥。就是蔥薑豬肉和老麵香,能得名, 應該是它的平實無華,鮮美簡單,打動人心。   這是標準的心靈美食,可以撫慰人心,得名之前,寛來順已經天天排隊,現在,恐怕要排更久了, 建議大家六七點早點上門。   第三名,「專十一」很神奇,我記得比賽最後, 大家連吃了幾家不能引起共鳴的包子,有些累,到了專十一, 就坐著等包子,其他評審一吃,就催我趕快試,我一吃, 也醒了大半。   它的包子皮厚薄適中,但是高筋麵粉高些,老麵加一點點酵母, 我心中,它的皮屬一屬二,至於餡又多又好吃,蛋黃還是切丁拌入, 不是整顆放,吃起來「美味、均衡、飽滿」。一顆二十元。   老闆是陸軍專科十一期畢業取名專十一,...

韋伯連續劇終於更新 期待第一季順利完結

  地球天文學界的跳票大王詹姆斯·韋伯空間望遠鏡 (James Webb Space Telescope,縮寫為 JWST)自 1996 年以來斷斷續續不按劇本演出的連續劇終於讓焦慮的觀眾們又等到了一次更新:五層遮陽罩測試順利完成。 裝配完成的韋伯望遠鏡與好夥伴遮陽罩同框啦。Credit: NASA   嚴格的測試是任何空間任務順利成功的重中之重。遮陽罩,這個韋伯望遠鏡異常重要的親密夥伴,要是無法正常運轉的話,韋伯的這一季天文界連續劇說不準就要一直拖更了。   詹姆斯·韋伯空間望遠鏡是歷史上造出的最先進的空間望遠鏡。它不僅是一架紅外望遠鏡,還具有特別高的靈敏度。但想要達到辣么高的靈敏度來研究系外行星和遙遠的宇宙童年,韋伯童鞋必須非常"冷靜",體溫升高的話,靈敏度會大大折損。這個時候,遮陽罩就要大顯身手啦。   遮陽罩在韋伯的設計中至關重要。韋伯望遠鏡會被發射到拉格朗日 L2 點,運行軌道很高,遠離太陽、地球與月球。太陽是韋伯的主要熱量干擾的來源,其次是地球與月球。遮陽罩會有效阻斷來自這三大熱源的能量並保護韋伯維持在工作溫度正常運轉。這個工作溫度指的是零下 220 攝氏度(-370 華氏度;50 開爾文)。 上圖中我們可以看出,韋伯望遠鏡的配置大致可分為兩部分:紅色較熱的一面溫度為 85 攝氏度,藍色較冷的一面溫度達到零下 233 攝氏度。紅色的這部分中,儀器包括太陽能板、通信設備、計算機、以及轉向裝置。藍色部分的主要裝置包括鏡面、探測器、濾光片等。Credit: STSci.   遮陽罩的那一部分和望遠鏡的鏡面這部分可以產生非常極端的溫差。遮陽的這面溫度可以達到 110 攝氏度,足以煮熟雞蛋,而背陰處的部分溫度極低,足以凍結氧氣。   工程師們剛剛完成了五層遮陽罩的測試,按照韋伯在 L2 時的運行狀態安裝了遮陽罩。L2 距離地球約 160 萬公里。NASA 表示這些測試使用了航天器的自帶系統來展開遮陽罩,測試目前都已成功完成。韋伯望遠鏡遮陽罩負責人 James Cooper 介紹說這是遮陽罩"第一次在望遠鏡系統的电子設備的控制下展開。儘管這個任務非常艱巨,難度高,但測試順利完成,遮陽罩展開時的狀態非常驚艷"。   遮陽罩由五層 Kapton 製成。Kapton 是一種聚酰亞胺薄膜材料, 耐高溫絕...