最近斷斷續續的寫了幾篇
Python
的學習心得,因爲有開發經驗的同窗來講上手仍是比較容易,並且Python
提供了強大的第三方庫,作一個小的示例程序仍是比較簡單,這不我以前就是針對Python
的爬蟲作了好幾個程序,爬取了幾個圖片網站的圖片,並保存到本地。html
寫了幾個
Python
爬蟲後,想試試Python web
服務怎麼寫。隨手百度了下,寫了以下代碼python
import socket HOST,PORT = 'localhost',8080 listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listen_socket.bind((HOST, PORT)) listen_socket.listen(1) print('Serving HTTP on port %s ...' % PORT) while True: client_connection, client_address = listen_socket.accept() request = client_connection.recv(1024) print(request) http_response = b""" HTTP/1.1 200 OK\r\n \r\n Hello,world! """ client_connection.send(http_response) client_connection.close()
python xx.py
啓動web服務,以下圖所示localhost:8080
,而後回車,能夠看到頁面顯示上述代碼比較測試過程比較簡單,主要是爲了演示怎麼寫一個
Python web
服務,這個演示流程存在一個比較大的問題,就是每當服務須要重啓的時候咱們須要關閉命令行工具,而後從新啓動,這個過程太繁瑣了,怎麼可讓它程序化呢!解決辦法也是有的,那就是Docker
,所以我決定學習一下開源的應用程序引擎Dockerlinux
Docker入門總結web
- go語言實現
- Build、Ship and Run App,AnyWhere
- 一次封裝、處處運行
如上圖,Docker設想是交付運行環境如同海運,OS如同一個貨輪,每個在OS基礎上的軟件都如同一個集裝箱,用戶能夠經過標準化手段自由組裝運行環境,同時集裝箱的內容能夠由用戶自定義,也能夠由專業人員製造。這樣,交付一個軟件,就是一系列標準化組件的集合的交付,如同樂高積木,用戶只須要選擇合適的積木組合,而且在最頂端署上本身的名字(最後一個標準化組件是用戶的app)。docker
瞭解Docker,首先須要知道LXC是什麼。LXC是指Linux內核(尤指命名空間和CGroup)的一個特性,它容許其餘一些沙盒進程運行在一塊相對獨立的空間,並能方便的控制他們的資源調度。數據庫
Docker 底層是基於LXC實現的,它提供了一系列更強的功能。Docker定義了一種新的格式,將應用和其依賴環境所有打包到一個單一對象中,這個對象能夠在任何安裝有Docker的機器上共享,而且執行這個對象的效果都是同樣的ubuntu
可移植的跨機器部署:LXC實現了進程級的沙盒封裝,而Docker爲移植部署定義了規範,使用了抽象層的概念,把機器配置打包進了容器,這樣使得進程和環境一塊兒進行了分發windows
Docker 鏡像能夠看做是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。centos
鏡像不包含任何動態數據,其內容在構建以後也不會被改變。瀏覽器
容器(Container)的定義和鏡像(Image)幾乎如出一轍,也是一堆層的統一視角,惟一區別在於容器的最上面那一層是可讀可寫的。
容器 = 鏡像 + 讀寫層。
Docker 倉庫是集中存放鏡像文件的場所。
倉庫(Repository)和倉庫註冊服務器(Registry),一個 Docker Registry 中能夠包含多個倉庫(Repository),每一個倉庫能夠包含多個標籤(Tag),每一個標籤對應着一個鏡像。
下圖能夠直觀的看到Docker的結構。Docker 使用 C/S 結構,即客戶端/服務器體系結構。Docker 客戶端與 Docker 服務器進行交互,Docker服務端負責構建、運行和分發 Docker 鏡像。
Docker 客戶端和服務端能夠運行在一臺機器上,也能夠經過 RESTful 、 Stock 或網絡接口與遠程 Docker 服務端進行通訊。
虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一臺物理的服務器上能夠跑多臺虛擬機,虛擬機共享物理機的 CPU、內存、IO 硬件資源,但邏輯上虛擬機之間是相互隔離的。
物理機咱們通常稱爲宿主機(Host),宿主機上面的虛擬機稱爲客戶機(Guest)。
宿主機(Host)給客戶端(Guest)提供硬件資源虛擬機是經過
Hypervisor
實現的,根據根據Hypervisor
的實現方式和所處的位置不一樣,虛擬化又分爲兩種
下邊咱們用使用比較多的有宿主機用Hypervisor實現方式的虛擬機VMWare Station
和容器進行比較,方便咱們理解
Docker
是基於Linux 64bit的,沒法在32bit的linux/windows/unix環境下使用,並且Docker
是基於LXC實現的,所以容器的宿主機必須是Linux系統。
Win 10之前的系統沒有Hyper-v技術,所以若是想使用Docker
就須要安裝Docker Toolbox工具,Win 10系統能夠直接安裝Docker for Windows這個包,而後使用。
Windows系統上直接使用
Docker
,發現問題仍是挺多,所以想到了另一種方式,如今windows系統上安裝Linux 64bit系統,而後在安裝Docker
sudo service docker start
-t:在新容器內指定一個僞終端或終端。
-i:容許你對容器內的標準輸入 (STDIN) 進行交互。
cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
docker build -t runoob/centos:6.7 .