Docker知識點總結

一. docker介紹html

是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。nginx

1.一個完整的docker組成部分1.dockerClient客戶端,2.docker Daemon守護進程,3.docker Image鏡像,4.dockerContainer容器web

2.Docker和KVM的對比redis

kvm: 1.虛擬機;2.使用複雜;3.啓動過程慢(分鐘);4.模板文件大;5.和物理機徹底隔離;6.模擬的是一個完成系統,能夠登入並實現管理。docker

docker1.直接虛擬出一個用戶空間;2.使用簡單;3.啓動很是快(秒級);4.模板文件小;5.在必定程度上和物理機隔離;6.僅僅是模擬一部分用戶空間,不方便管理。json

3.docker使用理由vim

1.快速部署服務;2.實現隔離;3.讓一個主機運行多個容器;4.提升開發效率;5.實現軟件的跨平臺。centos

二.docker鏡像的操做命令安全

  1.docker search nginx                                查看註冊表中是否有nginx鏡像
  2.docker  image pull  nginx                          下載nginx鏡像
  3.docker  image  ls                                  查看本地鏡像
  4.docker  image load < redis-img.tar.gz              導入redis鏡像
  5.docker  image save nginx > nginx.tar.gz            導出nginx鏡像
  6.dcker  inspect nginx                               顯示nginx鏡像的詳細信息
  7.docker image rm nginx                              刪除鏡像
  8.docker  push  ip/nginx:v1                          推送鏡像nginx到本地倉庫
  9.docker  tag  nginx   nginx:v1                      給鏡像nginx標記標籤v1
  10.docker history  nginx                             查看鏡像nginx的歷史構建信息

三.docker容器的操做命令bash

 1.docker run -d redis                                後臺啓動容器
  2.docker ps                                         查看啓動的容器
  3.docker  stop/start  redis                         中止/啓動容器
  4.docker exec -it redis  bash                       登入容器(經常使用用法)
  5.docker rm -f redis                                刪除容器
  6.docker rm $(docker ps -aq)                        刪除所有已退出的容器

四.docker端口映射的四種方法(外網訪問容器服務)

1.將容器中的一個端口映射成宿主機中的一個隨機端口

  命令:docker run -d -P httpd       (P大寫)

2. 將容器中的一個端口映射成宿主機中的一個端口

  命令:docker run -d -p  1234:80  httpd 

3. 將容器中的一個端口映射成宿主機中的一個特定網卡上的隨機端口

  命令:docker run -d -p 10.220.5.13: :80  httpd

4. 將容器中的一個端口映射成宿主機中的一個特定網卡上的一個端口

  命令:docker run -d -p 10.220.5.13:80:80  httpd

五.數據卷Volume

1.功能和特性:

容器中數據的持久存儲;容器間資源共享;容器的遷移;

對數據卷的修改會立馬生效;對數據卷的更新,不會影響鏡像;

2.數據卷Volume共享方式(3種)

(1).Bind mount volume用戶須要明確指定容器中的目錄和宿主機中的哪一個目錄進行綁定

  主要實現命令:docker run -it -v /ken:/data/  busybox

(2).Docker Management Volumedocker daemon自行管理將容器中的目錄和宿主機中的哪一個目錄進行綁定

  主要實現命令:docker run -it -v  /data/ busybox

(3).基於一個現有容器實現多個容器之間文件共享

  主要實現命令:docker run -it  --volume-from ken1(啓動的容器)  busybox [提早啓動一個容器]

3.volume生命週期管理

(1).備份

由於volume 其實是 host 文件系統中的目錄和文件,因此 volume 的備份其實是對文件系統的備份

(2).恢復

volume 的恢復也很簡單,若是數據損壞了,直接用以前備份的數據拷貝到 /ken 就能夠了。

(3).遷移

若是咱們想使用httpd,那就涉及到數據遷移,方法是:

1.docker stop 當前容器;

2.啓動新版本容器並mount原有volume(docker run -d -v /ken:/var/www/html  httpd)  這裏要確認新版本的默認數據路徑是否發生改變

(4).銷燬

對於 docker managed volume,在執行 docker rm 刪除容器時能夠帶上 -v 參數,docker 會將容器使用到的 volume 一併刪除,但前提是沒有其餘容器 mount 該 volume,目的是保護數據,很是合理。

若是刪除容器時沒有帶 -v 呢?這樣就會產生孤兒 volume。可用docker volume ls 查看。若是想批量刪除孤兒 volume,能夠執行:docker volume rm $(docker volume ls -q)

六.實現容器的底層技術

cgroup:實現資源限額;namespace實現資源隔

1.對內存限制:docker run -it -m 512 busybox

2.對cpu限制:docker run -c 1024 httpd

Namespace:主要有六種資源:Mount,UTS,IPC,PID,Network和User

Mount namespace:讓容器看上去擁有整個文件系統;

UST namespace:讓容器有本身的hostname

IPC namespace:讓容器擁有本身的共享內存和信號量來實現進程間通訊,而不會與host和其餘容器的IPC混在一塊兒

PID namespace:容器在host中以進程形式運行。容器擁有本身獨立的一套PID。

Network namespace:讓容器擁有本身獨立的網卡,IP,路由等資源。

User namespace:讓容器可以管理本身的用戶,host不能看到容器建立的用戶。

七.docker鏡像構建的兩種方式:

1.docker commit構建鏡像

三步:運行容器,修改容器,將容器保存爲新的容器

如:docker run -it centos(進入容器)>yum install vim -y(容器裏下載)>docker commit container id  centos-vim(推出容器運行,使用commit存爲新的鏡像)

注意:可是docker不建議使用這種方式建立鏡像,緣由以下:

這是一種手工建立鏡像的方式,容器出錯,並且效率低且可重複性弱

更重要的是。使用者並不知道鏡像是如何建立出來的。裏面是否有惡意程序

2.Dockerfile構建鏡像

(1).Dockerfile經常使用命令:

FROM:指定base鏡像

COPY:將文件從build context複製到鏡像

ADD:與copy相似,不一樣的是,若是複製的是歸檔文件(tar,zip,tgz,xz),文件會被自動解壓到dest.

ENV:設置環境變量,環境變量可被後面的指令使用

EXPOSE:指定容器中的進程監聽某個端口,docker能夠將該端口暴露出來

VOLUME:將文件或目錄聲明爲volume

WORKDIR:爲後面的run,entpypint,add,copy指令設置鏡像中的當前工做目錄(容器目錄)

RUN:在容器中運行指定的命令

CMD:容器啓動時運行指定的命令。Dockerfile中能夠有多個CMD指令,但只有最後一個生效。CMD能夠被docker run 以後的參數替換。

ENTRYPOINT:設置容器啓動時的命令。Dockerfile中能夠有多個ENTRYPOINT,但只有最後一個生效,CMD或者docker run以後的參數會被看成參數傳遞給ENTRYPOINT.

(2)Dockerfile演示

3.RUN,CMD,ENTRYPOINT區別

RUN:執行命令建立新的鏡像層,RUN常常用於安裝軟件包

CMD:設置容器啓動後默認執行的命令及參數,但CMD可以被docker run後面跟的命令行參數替換

ENTRYPOINT:配置容器啓動時運行的命令

(1).使用 RUN 指令安裝應用和軟件包,構建鏡像。

(2).若是 Docker 鏡像的用途是運行應用程序或服務,好比運行一個 MySQL,應該優先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可爲 ENTRYPOINT 提供額外的默認參數,同時可利用 docker run 命令行替換默認參數。

(3).若是想爲容器設置默認的啓動命令,可以使用 CMD 指令。用戶可在 docker run 命令行中替換此默認命令。

八.Docker網絡

1.docker的四種網絡模式

(1).bridge模式docker網絡隔離基於網絡命名空間,在物理機上建立docker容器時會爲每個docker容器分配網絡命名空間,而且把容器IP橋接到物理機的虛擬網橋上。

(2).none模式:此模式下建立容器是不會爲容器配置任何網絡參數的,如:容器網卡、IP、通訊路由等,所有須要本身去配置。

(3).host模式:此模式建立的容器沒有本身獨立的網絡命名空間,是和物理機共享一個Network Namespace,而且共享物理機的全部端口與IP,而且這個模式認爲是不安全的。

(4).container模式:此模式和host模式很相似,只是此模式建立容器共享的是其餘容器的IP和端口而不是物理機,此模式容器自身是不會配置網絡和端口,建立此模式容器進去後,你會發現裏邊的IP是你所指定的那個容器IP而且端口也是共享的,並且其它仍是互相隔離的,如進程等。

2.自定義網絡

除了none,host,bridge這三個自動建立的網絡,用戶也能夠根據業務須要建立user-defined 網絡。

建立命令docker network create --driver bridge ken

建立網段時指定—subset—gateway參數docker network create –driver bridge –subnet 172.21.0.0/16  --gateway 172.21.0.1 ken1

容器使用新定義的網絡:docker run –it –network=ken1 busybox

指定分配IP docker run -it –network=ken1 –ip=172.121.0.7 busybox

3.容器間通訊

容器之間可經過 IP,Docker DNS Server 或 joined 容器三種方式通訊。

(1)經過IP通訊:處於同一網段的容器間能夠通訊;若是兩個容器處於不一樣網段,能夠經過給一個容器添加另外一個容器所處網段的網卡,命令爲:docker network connect ken1 container1(現有容器)

(2)Docker DNS server通訊:經過 IP 訪問容器雖然知足了通訊的需求,但仍是不夠靈活。由於咱們在部署應用以前可能沒法肯定 IP,部署以後再指定要訪問的 IP 會比較麻煩。對於這個問題,能夠經過 docker 自帶的 DNS 服務解決。方法很很簡單,在啓動容器時給容器命名就能夠,訪問直接ping

容器名便可。但要注意:使用 docker DNS 有個限制:只能在 user-defined 網絡中使用

(3)joined容器:joined 容器很是特別,它可使兩個或多個容器共享一個網絡棧,共享網卡和配置信息。實現以下:先啓動一個名爲web1的容器,而後再建立busybox容器並經過—network=container:web1 指定jointed容器爲web1。這時busybox和web1的網卡mac地址與IP徹底同樣。

joined 容器很是適合如下場景:

1.不一樣容器中的程序但願經過 loopback 高效快速地通訊,好比 web server   與 app server。

2.但願監控其餘容器的網絡流量,好比運行在獨立容器中的網絡監控程序。

4.容器與外界交互

(1).容器訪問外部世界只要宿主機能夠訪問外網,默認容器時能夠訪問外網的;

(2).外部世界訪問容器經過端口映射來。

九.docker公共&本地鏡像倉庫   

1.公共鏡像倉庫—Docker Hub 

2.搭建本地的registry

(1) 運行registry容器  docker run -d -p 5000:5000 -v /test:/var/lib/registry  registry:2

(2) 經過docker tag重命名鏡像,使之與registry匹配

Docker tag httpd  172.20.10.2:5000/httpd:v1

(3) 修改damon.json文件  

在文件中添加:」insecure-registries」:[「172.20.10.2:5000」]

(4) 重啓docker和容器

(5) 上傳鏡像

Docker push 172.20.10.2:5000/httpd:v1

(6) 從其餘主機進行下載鏡像

Docker pull 172.20.10.2:5000/httpd:v1

十.docker容器監控

1.自帶的監控命令ps,top,stats

2.weave scope監控Weave Scope 的最大特色是會自動生成一張 Docker 容器地圖,讓咱們可以直觀地理解、監控和控制容器。還能夠監控多主機,只需在主機上安裝weave scope。

 十一.docker日誌管理

1.docker logs

2.ELK:開源的日誌管理方案。

Elasticsearch一個近乎實時查詢的全文搜索引擎。Elasticsearch 的設計目標就是要可以處理和搜索巨量的日誌數據。

Logstash讀取原始日誌,並對其進行分析和過濾,而後將其轉發給其餘組件(好比 Elasticsearch)進行索引或存儲。Logstash 支持豐富的 Input和Output 類型,可以處理各類應用的日誌。Kibana一個基於 JavaScript 的 Web 圖形界面程序,專門用於可視化 Elasticsearch 的數據。Kibana 可以查詢 Elasticsearch 並經過豐富的圖表展現結果。用戶能夠建立 Dashboard 來監控系統的日誌

3.ELK日誌處理流程:

Logstash 負責從各個 Docker 容器中提取日誌,Logstash將日誌轉發到Elasticsearch 進行索引和保存,Kibana 分析和可視化數據。

4.Filebeat

ELK 提供了一個配套小工具 Filebeat,它能將指定路徑下的日誌文件轉發給 ELK。同時 Filebeat 很聰明,它會監控日誌文件,當日志更新時,Filebeat 會將新的內容發送給 ELK。

在配置filebeat時,配置文件/etc/filebeat/filebeat.yml中需告訴filebeat兩件事:1.監控哪些日誌?2.將日誌發送到哪?

相關文章
相關標籤/搜索