Docker是在Linux容器裏運行應用的開源工具,是一種輕量級的虛擬化方式。Docker的設計宗旨是經過對應用軟件的封裝、發佈、部署、運行等生命週期的管理,達到應用組件級別「一次封裝,處處運行」的目的。這裏的組件能夠是一個應用,也能夠是一套服務,甚至可使一個完整的操做系統。docker
- Docker的容器技術能夠在一臺主機上輕鬆地爲任何應用建立個輕量級的、可移植的、自給自足的容器。經過這種容器打包應用程序,簡化了從新部署、調試這些瑣碎的重複工做,極大地提升了工做效率。採用Docker容器技術,遷移只須要在新的服務器上啓動須要的容器就能夠。
- Dockerer容器很快,啓動和中止能夠在秒級實現,比傳統虛擬機要快不少。
- Docker核利用容器來實現相似VM的功能,從而以更加節省的硬件資源提供,使得在一臺主機上同時運行數幹個Docker容器成爲可能。
- Docker 操做方便,還能夠經過Dockerfle配置鏡像文件,支持靈活的自動化建立和部署。
Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲是一個面向Docker容器引擎的只讀模板,好比一個鏡像能夠是一個完整的centos操做系統,也能夠是一個安裝了MySQL的應用程序,稱之爲一個鏡像。
鏡像文件用戶能夠本身建立和更新現有鏡像,也能夠從網上下載已經作好的應用鏡像直接使用。shell
容器是鏡像的另外一個運行實例,是獨立運行的一個或一組應用以及他們所必須的運行環境,包括文件系統、系統庫類、shell環境等。鏡像是隻讀模板,而容器會給這個只讀模板一個額外的可寫層。json
倉庫是用來集中存放鏡像的地方,當本身建立了鏡像後,可使用push命令將它上傳到公共倉庫(Public)或者私有倉庫(Private),這樣,當其餘機器想要使用時,直接下載下來便可使用。倉庫註冊服務器(Registry)是存放倉庫的地方,其中包含了多個庫,每一個倉庫集中存放某一類鏡像,而且使用不一樣的標籤來區分它們。vim
安裝docker有兩種方式:其一:使用curl得到docker的安裝腳本進行安裝;其二:使用docker本身的Yum源來安裝。這裏以yum源爲例安裝docker。centos
vim /etc/yum.repos.d/docker.repo [docker-repo] name=Doker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg
yum install docker-engine -y
systemctl start docker systemctl enable docker.service #開機自啓動
vim /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn.com" #官方提供的國內鏡像加速器地址 ], "insecure-registries": [] }
systemctl daemon-reload systemctl restart docker
docker version
Docker運行容器前須要本地存在對應的鏡像。若是不存在本地鏡像,docker就會嘗試從默認鏡像倉庫(官方倉庫)https://hub.docker.com下載bash
命令格式:docker search 關鍵字
例如搜索關鍵字爲lamp的鏡像服務器
下載鏡像不指定標籤,默認下載最新版本的鏡像,也能夠經過指定的標籤下載特定版本的鏡像。這裏的標籤(tag)是用來區分鏡像版本的。curl
命令格式:docker pull 倉庫名稱[:標籤]
例以下載鏡像nickistre/centos-lamp ide
整個下載過程能夠看出,鏡像文件由若干層(Layer)組成,咱們稱之爲AUFS(文件聯合系統),是實現增量保存與更新的基礎,下載過程當中會輸出鏡像的各層信息工具
命令格式:docker images 倉庫名稱[:標籤]
例如查看本地全部鏡像
REPOSITORY ---鏡像屬於的倉庫
TAG ---鏡像的標籤信息,標記同一個倉庫中不一樣鏡像
IMAGE ID ---鏡像的惟一ID號,惟一標識了該鏡像
CREATED ---鏡像建立時間
SIZE ---鏡像大小
命令格式:docker inspect 鏡像ID號
例如獲取鏡像的詳細信息
命令格式:docker tag 名稱[:標籤] 新名稱[:標籤]
例如本地鏡像 添加新的名稱爲lamp,新的標籤爲lamp
命令格式:docker rmi 倉庫名稱:標籤 或者docker rmi 鏡像ID號
例如刪除鏡像lamp:lamp
注意:當一個鏡像有多個標籤的時候,docker rmi 命令只是刪除該鏡像多個標籤中的指定標籤,不會影響鏡像文件。但當該鏡像只剩下一個標籤的時候,此時刪除該標籤的時候會完全刪除該鏡像。
使用docker rmi 鏡像ID號命令時,必須確保該鏡像沒有被容器使用才能進行,刪除時系統會先刪除掉指向該鏡像的全部標籤,而後刪除鏡像自己。若是該鏡像已經被容器使用,正確的作法是先刪除依賴該鏡像的全部容器,再刪除鏡像
存出鏡像,也就是將鏡像保存成本地文件。
命令格式:docker save -o 存儲文件名 存儲的鏡像
例如將本地的鏡像存出爲文件lamp
載入鏡像,也就是將導出的文件導入到其餘機器的鏡像庫中
命令格式:docker load < 存出的文件 或者docker --input 存出的文件
例如從文件lamp中載入鏡像本地鏡像庫
本地存儲的鏡像愈來愈多,就須要指定一個專門的地方存放這些鏡像-倉庫。
命令格式:docker push 倉庫名稱:標籤
例如在公共倉庫上成功註冊了一個帳號,這個帳號叫作xiang10,新增的鏡像的標籤爲xiang10/lamp:centos7
docker tag nickistre/centos-lamp xiang10/lamp:centos7
成功登錄後上傳鏡像
建立容器就是將鏡像加載到到容器,新建立的容器默認處於中止狀態,不運行任何程序。
命令格式:docker create [選項] 鏡像 運行的程序 -i 讓容器對的輸入保持打開 -t 讓Docker分配一個僞終端
docker ps #查看全部容器的運行狀態 docker ps -a #查看最近一次啓動的容器的運行狀態
能夠直接執行docker run命令
其運行過程:
1.檢查本地是否存在指定的鏡像,當鏡像不存在時,會從公共倉庫下載;
2.利用鏡像建立並啓動容器;
3.執行用戶指定的應用程序;
4.執行完畢後容器被停止運行
例如建立容器並啓動執行一條shell命令
docker run centos /usr/bin/bash -c ls /
但有時候須要在後臺持續運行這個容器,就要讓docker以守護態在後臺運行,能夠在docker run命令後添加「-d」選項實現。那麼,容器運行的程序就不能結束。
docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"
命令格式:docker start 容器的ID/名稱 #啓動中止狀態的容器 命令格式:docker stop 容器的ID/名稱 #停止運行狀態的容器
當不進入容器時,容器運行完所執行的程序後會自動中止,爲了不這樣的狀況,咱們須要進入容器執行,且退出容器後,容器並不會中止。
命令格式:docker exec -it 容器的ID/名稱 /bin/bash -i 讓容器對的輸入保持打開 -t 讓Docker分配一個僞終端
導出容器,也就是將已經建立好的容器容器導出爲文件
命令格式:docker export 容器的ID/名稱 > 文件名
例如導出容器到文件centos7tar
導入容器,也就是將導出文件傳輸到其餘機器
命令格式:cat 文件名| docker import - 生成的鏡像名稱:標籤
例如導入文件centos7tar成爲本地鏡像
將一個已經處於停止狀態的容器刪除
命令格式:docker rm 容器的ID/名稱
若是要刪除一個正在運行的容器,能夠添加-f選項強制刪除,但建議先將容器中止再作刪除操做。