Docker簡介
Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的鏡像中,而後發佈到任何流行的不一樣操做系統(linux、Windows)機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。
Containers 與 VMs相比
linux
Docker特色
- 靈活:即便是最複雜的應用也能夠集裝箱化。
- 輕量級:容器利用並共享主機內核。
- 可互換:即時部署更新和升級。
- 便攜式:在本地構建,部署到雲,並在任何地方運行。
- 可擴展:增長並自動分發容器副本。
- 可堆疊:垂直和即時堆疊服務。
Docker主要模塊
Docker主要由三部分組成:鏡像Image、容器Container、倉庫Repository
各個模塊以下:golang
Docker Client
docker client 是docker架構中用戶用來和docker daemon創建通訊的客戶端,用戶使用的可執行文件爲docker,經過docker命令行工具能夠發起衆多管理container的請求。docker
- docker client能夠經過一下三種方式和docker daemon創建通訊:
tcp://host:port;
unix:path_to_socket;
fd://socketfd。
- docker client能夠經過設置命令行flag參數的形式設置安全傳輸層協議(TLS)的有關參數,保證傳輸的安全性。
- docker client發送容器管理請求後,由docker daemon接受並處理請求,當docker client 接收到返回的請求相應並簡單處理後,docker client 一次完整的生命週期就結束了,當須要繼續發送容器管理請求時,用戶必須再次經過docker能夠執行文件建立docker client。
Docker server
docker server在docker架構中時專門服務於docker client的server,該server的功能是:接受並調度分發docker client發送的請求,架構圖以下:
api
- 在Docker的啓動過程當中,經過包gorilla/mux(golang的類庫解析),建立了一個mux.Router,提供請求的路由功能。在Golang中,gorilla/mux是一個強大的URL路由器以及調度分發器。該mux.Router中添加了衆多的路由項,每個路由項由HTTP請求方法(PUT、POST、GET或DELETE)、URL、Handler三部分組成。
- 若Docker Client經過HTTP的形式訪問Docker Daemon,建立完mux.Router以後,Docker將Server的監聽地址以及mux.Router做爲參數,建立一個httpSrv=http.Server{},最終執行httpSrv.Serve()爲請求服務。
- 在Server的服務過程當中,Server在listener上接受Docker Client的訪問請求,並建立一個全新的goroutine來服務該請求。在goroutine中,首先讀取請求內容,而後作解析工做,接着找到相應的路由項,隨後調用相應的Handler來處理該請求,最後Handler處理完請求以後回覆該請求。
- Docker Server的運行在Docker的啓動過程當中,是靠一個名爲」serveapi」的job的運行來完成的。原則上,Docker Server的運行是衆多job中的一個,可是爲了強調Docker Server的重要性以及爲後續job服務的重要特性,將該」serveapi」的job單獨抽離出來分析,理解爲Docker Server。
Engine
Job
Docker Daemon
Docker Registry
Graph
Driver
libcontainer
Docker container
安裝Docker
最簡單方式,即便用阿里雲一鍵安裝腳本:安全
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
systemctl enable docker
docker version
Docker中的鏡像管理
搜索鏡像:bash
docker search
獲取鏡像:網絡
docker pull
查看鏡像:架構
docker images
刪除鏡像:curl
docker rmi
Docker中的容器管理
啓動容器:socket
docker run –-name –h hostname
中止容器:
docker stop CONTAINER ID
查看容器:
docker ps
進入容器:
docker exec | docker attach
刪除容器:
docker rm
Docker中對網絡進行訪問
隨機映射:
docker run -P
指定映射:
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p hostPort:containerPort
-p hostPort:containerPort