Docker簡介
Docker是容器虛拟化技術的實作。将運作應用所需要的系統環境,由下而上打包成鏡像,以達到應用跨平台間的無縫接軌運作。
Docker和傳統虛拟化方式的不同之處1)傳統虛拟機技術是虛拟出一套硬體,并在其上運作一個作業系統,在該系統上再運作所需應用程序。而容器沒有進行硬體虛拟,容器内沒有自己的核心,容器内的應用程序直接運作于宿主的核心。是以容器要比傳統虛拟機更為輕便。
2)每個容器之間互相隔離,每個容器有自己的檔案系統,容器之間不會互相影響。
優點占用資源少,啟動快。
三個概念
1)倉庫:repository,集中存放鏡像檔案的場所。倉庫(Repository)和倉庫注冊伺服器(Registry)是不同的。倉庫注冊伺服器上存放着多個倉庫,每個倉庫中存儲多個鏡像,每個鏡像有不同的标簽(tag)。
2)鏡像:iamge,隻讀的模闆,用來建立Docker容器。
3)容器:container,用鏡像建立的運作執行個體。
Docker常用指令
鏡像指令1)service docker start:啟動Docker背景服務
2)docker images [OPTIONS] :列出本地主機上的鏡像
OPTIONS說明
-a :列出本地所有的鏡像(含中間映像層)
-q :隻顯示鏡像ID。
--digests :顯示鏡像的摘要資訊
3)docker search 鏡像名字:查找鏡像
4)docker pull 鏡像名字[:TAG]:下載下傳某個版本鏡像
5)docker rmi 鏡像ID1 [鏡像ID2...]:删除鏡像
組合指令:一次性删除多個指令 docker rm -f $(docker ps -a -q)
6)docker save 鏡像名1:版本号 鏡像名2:版本号 -o ./壓縮包名.tar :打包鏡像
容器指令1)docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:建立并啟動容器
OPTIONS說明
--name="容器新名字": 為容器指定一個名稱
-d: 背景運作容器,并傳回容器ID,也即啟動守護式容器
-i:以互動模式運作容器,通常與 -t 同時使用
-t:為容器重新配置設定一個僞輸入終端,通常與 -i 同時使用
-P: 随機端口映射
-p: 指定端口映射,有以下四種格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
2)docker ps [OPTIONS]:列出目前所有正在運作的容器
OPTIONS說明
-a :列出目前所有正在運作的容器+曆史上運作過的
-l :顯示最近建立的容器。
-n:顯示最近n個建立的容器。
-q :靜默模式,隻顯示容器編号。
3)docker start 容器ID或者容器名:啟動容器
4)docker restart 容器ID或者容器名:重新開機容器
5)docker stop 容器ID或者容器名:停止容器
6)docker kill 容器ID或者容器名:強制停止容器
7)docker rm 容器ID:删除已停止的容器
8)docker logs -f -t --tail 數字 容器ID:檢視容器日志
-t 是加入時間戳
-f 跟随最新的日志列印
--tail 數字 顯示最後多少條
9)docker top 容器ID:檢視容器内運作的程序
10)docker inspect 容器ID:檢視容器内部細節
11)docker exec -it 容器ID /bin/bash:進入正在運作的容器并以指令行互動
12)docker cp 容器ID:容器内路徑 目的主機路徑:從容器内拷貝檔案到主機上
13)docker commit -m="送出的描述資訊" -a="作者" 容器ID 要建立的目标鏡像名:[标簽名] :送出容器副本生成新的鏡像
Docker鏡像原理
鏡像是一種輕量級、可執行的獨立軟體包,打包了軟體運作環境和基于運作環境開發的軟體。它包含運作某個軟體所需的所有内容,包括代碼、運作時、庫、環境變量和配置檔案。
鏡像是由一層一層的檔案系統(UnionFS)組成。
為什麼Docker鏡像要采用這種分層結構共享資源,複用中間層。不用鏡像可以使用相同的鏡像層來建構。主控端隻需在磁盤上儲存一份基礎的鏡像層,記憶體中也隻需加載一份鏡像層,就可以為所有使用到該鏡像層的容器服務了。
鏡像的每一層都可以被共享。
Docker容器資料卷
作用:持久化資料,将關鍵的資料儲存在主控端,以避免容器關閉後,資料跟着消失。
資料卷添加方式1)直接指令添加
a) 指令: docker run -it -v /主控端絕對路徑目錄:/容器内目錄的絕對路徑 鏡像名
b) 使用指令:docker inspect 容器ID 檢視容器資料卷是否挂載成功
c)注意:如果docker挂載主機目錄Docker通路出現cannot open directory .: Permission denied。解決辦法:在挂載目錄後多加一個--privileged=true參數即可。
2)Dockerfile添加
a)格式:VOLUME["/containerName1","/containerName2"]
b)注意:編寫Dockerfile時,不能指定主控端目錄,而會在運作Dockerfile時,自動生成主控端的挂載目錄。