Docker系列-(1) 原理與基本操做

docker.png

Docker是一個開源的應用容器引擎,基於Go語言,並聽從Apache2.0協議開源。nginx

Docker可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的Linux機器上,也能夠實現虛擬化。docker

Docker容器是徹底使用沙箱機制,相互之間不會有任何接口,相比於虛擬機,容器啓動速度快,性能開銷極低。bash

Docker架構

首先介紹下Docker的架構,能夠由下圖表示,主要由Clients、Hosts、Registries組成,下面提到了幾個專有名詞,我來一個個單獨介紹:架構

Picture1.png

Image

Docker鏡像,用於建立 Docker 容器的模板。能夠當作Java裏面的Class類。工具

Container

獨立運行的一個或者一組容器。啓動Images後會生成Container,所以能夠當作Java裏面類的實例化對象。一個Image能夠啓動屢次生成多個Container。性能

Client

Docker 客戶端,使用 Docker Api與 Docker 的守護進程通訊。通常在桌面開發中,Client和下面介紹到的Host都在同一個客戶端中,使咱們感受Client和Host是在一塊兒的,其實原理是上單獨的兩個模塊。測試

Host

Docker 主機,一個物理或者虛擬的機器,用於執行 Docker 守護進程和容器。ui

Registry

Docker倉庫,用來保存鏡像。官方的Docker鏡像是 hub.docker.com/ ,註冊後能夠在這裏存放你本身的Image。spa

Machine

docker-machine就是幫助你快速去建立安裝docker環境的工具,當咱們須要在不少臺Server上安裝Docker環境時,咱們可使用Machine進行安裝。調試

Docker經常使用操做流程

平常工做中,用到的最多的Docker操做以下,主要包含:

  • 從本地提交Image到遠端鏡像
  • 從遠端獲取鏡像到本地
  • 在本地進行鏡像的測試與製做

Picture1.png

接下來進行Docker的實際安裝與操做。

安裝

Docker官方在這裏 docs.docker.com/install 給出了詳細的安裝流程,直接按照步驟一步步安裝,通常不會有什麼問題。

注意:在Ubuntu系統上進行安裝時,推薦使用Install using the repository的方式安裝,不然直接使用安裝包安裝會出現不少依賴問題。

Docker基本操做

Docker安裝好了之後,咱們能夠運行

docker run hello-world
複製代碼

來啓動咱們的第一個docker容器,正常狀況下,docker會從遠端倉庫下載好hello-world之後直接啓動。

Screen Shot 2019-11-23 at 8.43.17 PM.png

Docker的操做主要包括兩類,一類是對Image鏡像的操做,另外一類是對Container容器的操做。

容器與鏡像的關係

首先經過下圖再次認識一下容器與鏡像的關係,簡單來說,鏡像相似Class類,容器相似new對象。另外鏡像相似於Class類,也有繼承的關係,也就是說一個鏡像能夠基於另外一個鏡像,增長本身的新的功能和需求,這點在後續的製做Docker鏡像和Docker文件結構中會詳細講到。

Picture1.png

鏡像操做

如下是主要的鏡像操做,

docker [images|rmi|tag|build|history|save|load]
複製代碼
  • images:列出本地鏡像列表
  • rmi [鏡像名:版本]:刪除鏡像
  • tag [鏡像名:版本] [倉庫]/[鏡像名:版本]:標記本地鏡像,將其納入某一倉庫
  • build -t [鏡像名:版本] [path]:Dockerfile 建立鏡像
  • history [鏡像名:版本]: 查看指定鏡像的建立歷史
  • save -o xxx.tar [鏡像名:版本] / save [鏡像名:版本]>xxx.tar : 將鏡像保存成 tar 歸檔文件
  • load --input xx.tar / docker load<xxx.tar : 從歸檔文件加載鏡像

容器操做

相比於對鏡像的操做,對於容器的操做更多,

docker [run|start|stop|restart|kill|rm|pause|unpause]
複製代碼
  • run/create[鏡像名]: 建立一個新的容器並運行一個命令
  • start/stop/restart[容器名]:啓動/中止/重啓一個容器
  • kill [容器名]: 直接殺掉容器,不給進程響應時間
  • rm[容器名]:刪除已經中止的容器
  • pause/unpause[容器名]:暫停/恢復容器中的進程
docker [ps|inspect|exec|logs|export|import]
複製代碼
  • ps:查看容器列表(默認查看正在運行的容器,-a查看全部容器)
  • inspect[容器名]:查看容器配置元數據
  • exec -it [容器名] /bin/bash:進入容器環境中交互操做
  • logs --since="2019-02-01" -f --tail=10 [容器名]:查看容器日誌
  • cp path1 [容器名]:path 容器與主機之間的數據拷貝
  • export -o test.tar [容器名] / docker export [容器名]>test.tar : 文件系統做爲一個tar歸檔文件
  • import test.tar [鏡像名:版本號]:導入歸檔文件,成爲一個鏡像

以上給出了容器和鏡像的基本操做,通常狀況下,開發比較常見的是下面三個,

1. 啓動容器而且後臺運行

docker run -d --name myhello-world hello-world
複製代碼

Screen Shot 2019-11-23 at 9.09.25 PM.png

注意到-d參數是後臺運行,--name指定容器的名稱.

同時在運行時能夠綁定容器端口,好比啓動nginx容器的時候,能夠將nginx的80端口綁定到本機的8080端口。

docker run -d -p 8080:80 --name nginx nginx:latest
複製代碼

2. 進入正在運行的容器

docker exec -it nginx /bin/bash
複製代碼

-it交互式的啓動bash,這個在後面會常常用到,由於常常會進入容器進行調試。

這一節主要介紹了Docker的基本架構和操做,後續會介紹Docker的文件結構和Docker的製做。

相關文章
相關標籤/搜索