Docker入門學習

Python爬蟲

最近斷斷續續的寫了幾篇Python的學習心得,因爲有開發經驗的同窗來講上手仍是比較容易,並且Python提供了強大的第三方庫,作一個小的示例程序仍是比較簡單,這不我以前就是針對Python的爬蟲作了好幾個程序,爬取了幾個圖片網站的圖片,並保存到本地。html

Python web服務

寫了幾個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()
  1. 啓動命令行,切換到該文件所在路徑,輸入:python xx.py啓動web服務,以下圖所示
    web服務
  2. 打開瀏覽器,輸入localhost:8080,而後回車,能夠看到頁面顯示
    訪問web服務

上述代碼比較測試過程比較簡單,主要是爲了演示怎麼寫一個Python web服務,這個演示流程存在一個比較大的問題,就是每當服務須要重啓的時候咱們須要關閉命令行工具,而後從新啓動,這個過程太繁瑣了,怎麼可讓它程序化呢!解決辦法也是有的,那就是Docker,所以我決定學習一下開源的應用程序引擎Dockerlinux

Docker是什麼

Docker入門總結web

Docker是什麼

Docker Logo

  1. go語言實現
  2. Build、Ship and Run App,AnyWhere
  3. 一次封裝、處處運行

如上圖,Docker設想是交付運行環境如同海運,OS如同一個貨輪,每個在OS基礎上的軟件都如同一個集裝箱,用戶能夠經過標準化手段自由組裝運行環境,同時集裝箱的內容能夠由用戶自定義,也能夠由專業人員製造。這樣,交付一個軟件,就是一系列標準化組件的集合的交付,如同樂高積木,用戶只須要選擇合適的積木組合,而且在最頂端署上本身的名字(最後一個標準化組件是用戶的app)。docker

瞭解Docker,首先須要知道LXC是什麼。LXC是指Linux內核(尤指命名空間和CGroup)的一個特性,它容許其餘一些沙盒進程運行在一塊相對獨立的空間,並能方便的控制他們的資源調度。數據庫

  • Docker 底層是基於LXC實現的,它提供了一系列更強的功能。Docker定義了一種新的格式,將應用和其依賴環境所有打包到一個單一對象中,這個對象能夠在任何安裝有Docker的機器上共享,而且執行這個對象的效果都是同樣的ubuntu

  • 可移植的跨機器部署:LXC實現了進程級的沙盒封裝,而Docker爲移植部署定義了規範,使用了抽象層的概念,把機器配置打包進了容器,這樣使得進程和環境一塊兒進行了分發windows

Docker三個基本概念:Image(鏡像)、Container(容器)和Repository(倉庫)

Docker三個基本概念

Image(鏡像)

Docker 鏡像能夠看做是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。centos

鏡像不包含任何動態數據,其內容在構建以後也不會被改變。瀏覽器

Container(容器)

容器(Container)的定義和鏡像(Image)幾乎如出一轍,也是一堆層的統一視角,惟一區別在於容器的最上面那一層是可讀可寫的。

容器 = 鏡像 + 讀寫層。

Repository(倉庫)

Docker 倉庫是集中存放鏡像文件的場所。

倉庫(Repository)和倉庫註冊服務器(Registry),一個 Docker Registry 中能夠包含多個倉庫(Repository),每一個倉庫能夠包含多個標籤(Tag),每一個標籤對應着一個鏡像。

下圖能夠直觀的看到Docker的結構。Docker 使用 C/S 結構,即客戶端/服務器體系結構。Docker 客戶端與 Docker 服務器進行交互,Docker服務端負責構建、運行和分發 Docker 鏡像。

Docker 客戶端和服務端能夠運行在一臺機器上,也能夠經過 RESTful 、 Stock 或網絡接口與遠程 Docker 服務端進行通訊。
Docker 結構圖

Docker vs VM

虛擬化

虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一臺物理的服務器上能夠跑多臺虛擬機,虛擬機共享物理機的 CPU、內存、IO 硬件資源,但邏輯上虛擬機之間是相互隔離的。
物理機咱們通常稱爲宿主機(Host),宿主機上面的虛擬機稱爲客戶機(Guest)。

宿主機(Host)給客戶端(Guest)提供硬件資源虛擬機是經過Hypervisor實現的,根據根據Hypervisor的實現方式和所處的位置不一樣,虛擬化又分爲兩種

  1. Hypervisor 直接安裝在物理機上,多個虛擬機在 Hypervisor 上運行。
    無宿主機
  2. 物理機上首先安裝常規的操做系統,好比 Redhat、Ubuntu或 Windows。Hypervisor 做爲 OS 上的一個程序模塊運行,並對管理虛擬機進行管理。KVM、VirtualBox 和 VMWare Workstation 都屬於這個類型。
    有宿主機

下邊咱們用使用比較多的有宿主機用Hypervisor實現方式的虛擬機VMWare Station和容器進行比較,方便咱們理解

Container與VM

使用場景

  • Automating the packaging and deployment of applications(使應用的打包與部署自動化)
  • Creation of lightweight, private PAAS environments(建立輕量、私密的PAAS環境)
  • Automated testing and continuous integration/deployment(實現自動化測試和持續的集成/部署)
  • Deploying and scaling web apps, databases and backend services(部署與擴展webapp、數據庫和後臺服務)

Docker環境

Docker 是基於Linux 64bit的,沒法在32bit的linux/windows/unix環境下使用,並且Docker是基於LXC實現的,所以容器的宿主機必須是Linux系統。

windows系統安裝docker

Win 10之前的系統沒有Hyper-v技術,所以若是想使用Docker就須要安裝Docker Toolbox工具,Win 10系統能夠直接安裝Docker for Windows這個包,而後使用。

Windows系統上直接使用Docker,發現問題仍是挺多,所以想到了另一種方式,如今windows系統上安裝Linux 64bit系統,而後在安裝Docker

  1. 首先是安裝VMware Workstation
  2. 下載Linux系統,並建立新的虛擬機系統
  3. 下邊的操做和直接在Linux系統上安裝同樣

Linux系統安裝docker

Ubuntu Docker安裝和鏡像加速

Docker經常使用命令

啓動Docker後臺服務

sudo service docker start

容器命令

  • docker ps :查看當前運行容器
  • docker ps -l :查看最後一次建立的容器
  • docker logs 容器id(名稱):查看鏡像內日誌
  • docker stop 容器id(名稱):中止容器
  • docker start 名稱:啓動容器
  • docker rm 容器id(名稱) #刪除容器時,容器必須是中止狀態
  • docker port 容器id(名稱) #查看網絡端口
  • docker run -d -P --name runoob training/webapp python app.py --name 容器名稱 :運行容器示例

-t:在新容器內指定一個僞終端或終端。
-i:容許你對容器內的標準輸入 (STDIN) 進行交互。

鏡像命令

  • docker images :查看鏡像列表
  • docker pull python:3.6:拉取鏡像
  • docker search 名稱:查找鏡像 默認在Docker Hub中查找

構建鏡像

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
  1. 每個指令都會在鏡像上建立一個新的層,每個指令的前綴都必須是大寫的。
  2. 第一條FROM,指定使用哪一個鏡像源
  3. RUN 指令告訴docker 在鏡像內執行命令,安裝了什麼。。
  4. 而後,咱們使用 Dockerfile 文件,經過 docker build 命令來構建一個鏡像。
  5. docker build -t runoob/centos:6.7 .

參考資料



轉載聲明:本站文章無特別說明,皆爲原創,版權全部,轉載請註明:朝十晚八 or Twowords

相關文章
相關標籤/搜索