Docker是容器虛擬化技術的實現。將運做應用所須要的系統環境,由下而上打包成鏡像,以達到應用跨平臺間的無縫接軌運做。docker
Docker和傳統虛擬化方式的不一樣之處bash
1)傳統虛擬機技術是虛擬出一套硬件,並在其上運行一個操做系統,在該系統上再運行所需應用進程。而容器沒有進行硬件虛擬,容器內沒有本身的內核,容器內的應用進程直接運行於宿主的內核。所以容器要比傳統虛擬機更爲輕便。服務器
2)每一個容器之間互相隔離,每一個容器有本身的文件系統,容器之間不會相互影響。ide
優勢學習
佔用資源少,啓動快。操作系統
1)倉庫:repository,集中存放鏡像文件的場所。倉庫(Repository)和倉庫註冊服務器(Registry)是不一樣的。倉庫註冊服務器上存放着多個倉庫,每一個倉庫中存儲多個鏡像,每一個鏡像有不一樣的標籤(tag)。命令行
2)鏡像:iamge,只讀的模板,用來建立Docker容器。rest
3)容器:container,用鏡像建立的運行實例。日誌
鏡像命令blog
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 要建立的目標鏡像名:[標籤名] :提交容器副本生成新的鏡像
鏡像是一種輕量級、可執行的獨立軟件包,打包了軟件運行環境和基於運行環境開發的軟件。它包含運行某個軟件所需的全部內容,包括代碼、運行時、庫、環境變量和配置文件。
鏡像是由一層一層的文件系統(UnionFS)組成。
爲何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時,自動生成宿主機的掛載目錄。