Docker是在Linux容器裏運行應用的開源工具,是一種輕量級的虛擬機,誕生於2013年。Docker的設計宗旨:Build、Ship and Run Any、Anywhere,即經過對應用組件的封裝、發佈、部署、運行等生命週期的管理,達到應用組件級別的「一次封裝,處處運行」的目的。nginx
如上圖所示,Docker的logo設計爲藍色鯨魚,拖着許多集裝箱。其中鯨魚能夠看做爲宿主機,而集裝箱能夠理解爲相互隔離的容器,每一個集裝箱中都包含本身的應用程序。docker
Docker容器與傳統虛擬的比較json
特性 | Docker容器 | 虛擬機 |
---|---|---|
啓動速度 | 秒級 | 分鐘級 |
計算能力耗損 | 幾乎無 | 損耗50%左右 |
性能 | 接近原生 | 弱於 |
系統支持量(單機) | 上千個 | 幾十個 |
隔離性 | 資源限制 | 徹底隔離 |
Docker之因此擁有衆多優點,跟操做系統虛擬化自身的特色是分不開的。傳統虛擬機須要有額外的虛擬化管理程序和虛擬機操做系統層。而Docker容器是直接在操做系統層面之上實現的虛擬化。以下圖centos
Docker的鏡像是建立容器的基礎,相似虛擬機的快照,能夠理解爲是一個面向Docker容器引擎的只讀模板。安全
Docker容器是從鏡像建立的運行實例,容器能夠被啓動、中止和刪除。所建立的每個容器都是相互隔離的,互不可見的,能夠保證平臺的安全性。bash
Docker倉庫是用來集中保存鏡像的地方,當建立了本身的鏡像以後,可使用push命令將它上傳到公共倉庫(Public)或者私有倉庫(Private)。服務器
倉庫註冊服務器(Registry)是存放倉庫的地方,其中包括了多個倉庫,每一個倉庫集中存放某一類鏡像,而且使用不一樣的標籤(tag)來區分它們。目前最大的公共倉庫是Docker Hub,其中存放了數量龐大的鏡像供用戶下載使用。架構
systemctl stop firewalld.service setenforce 0
yum -y install docker
yum安裝好docker以後,就能夠直接啓動服務了。ide
systemctl start docker.service //開啓服務 systemctl enable docker.service //設置開機自啓動
安裝好的Docker系統有兩個程序:Docker服務端和Docker客戶端。其中Docker服務端是一個服務進程,管理着全部的容器。Docker客戶端則扮演着Docker服務端的遠程控制器,能夠用來控制Docker的服務端進程。通常狀況下,Docker服務端和客戶端運行在一臺機器上。工具
能夠經過查看docker版本信息檢查docker服務。
docker search nginx //搜索遠端官方倉庫中的共享nginx鏡像
docker pull docker.io/nginx //獲取上面搜索到的星級最高的鏡像
從整個下載過程當中能夠看出,鏡像文件由若干層(Layer)組成,稱之爲AUFS(聯合文件系統),是實現增量保存與更新的基礎。
下載到本地的鏡像文件保存在/var/lib/docker/image/overlay/文件下的repositories.json文件
docker images //查看下載到本地的全部鏡像
圖中各個參數的釋義:
REPOSITORY: 鏡像屬於的倉庫
TAG: 鏡像的標籤信息,標記同一個倉庫中的不一樣鏡像
IMAGE ID: 鏡像的惟一ID號,惟一標識了該鏡像
CREATED: 鏡像建立時間
VIRTUAL SIZE: 鏡像大小
docker inspect c82521676580 //獲取鏡像惟一標識號爲c82521676580的鏡像的詳細信息
docker tag docker.io/nginx nginx:test //本地鏡像docker.io/nginx添加新的名稱爲nginx,新的標籤爲test docker images | grep test //過濾查看新添加的標籤信息
使用docker rmi命令刪除多餘的鏡像
刪除鏡像的方法有兩種:1、使用鏡像的標籤刪除鏡像;2、使用鏡像的ID刪除鏡像
命令格式:
docker rmi 倉庫名稱:標籤 docker rmi 鏡像ID號
把一臺機器上的鏡像遷移到另外一臺機器上時,將鏡像保存成本地文件的過程叫作存出鏡像;將存出的鏡像從A機器拷貝到B機器,須要在B機器上使用該鏡像,能夠將該導出文件導入到B機器的鏡像庫中,這個過程叫作載入鏡像。
docker save -o nginx docker.io/nginx //存出鏡像 docker load < nginx或者docker --inputnginx //導入鏡像
當本地鏡像越存越多的時候,就須要指定一個專門的地方存放鏡像——倉庫。目前比較方便的就是公共倉庫,默認上傳到Docker Hub官方倉庫,可是這個方法必須先註冊使用公共倉庫的帳號。可使用docker login命令輸入用戶名、密碼和郵箱來完成註冊和登陸。登陸以後可使用「docker push 倉庫名稱:標籤」進行上傳鏡像。
docker push li(帳號)/nginx:centos //上傳鏡像
docker create -it docker.io/nginx /bin/bash //建立容器 docker ps -a //查看全部容器 docker start 1ad3c22a5e36 //開啓容器 docker stop 1ad3c22a5e36 //關閉容器 參數詳解: -i:讓容器的輸入保持打開 -t:讓Docker分配一個僞終端 /bin/bash : 表示啓動容器時要運行的命令
docker exec -it 1ad3c22a5e36 /bin/bash //進入容器 參數詳解: -i:表示讓容器的輸入保持打開 -t:表示讓Docker分配一個僞終端
docker export 1ad3c22a5e36 > nginxtar //容器的導出 cat nginxtar | docker import - nginx:test //容器的導入
要刪除正在運行的容器能夠添加 -f 選項強制刪除,建議先關閉容器在刪除。
docker rm 1ad3c22a5e36 //刪除時指定 ID
docker run -d jasonlix/docker-cobbler /usr/bin/bash -c "while true;do echo hello;done"
注意:docker run ,等於執行了docker create ,在執行docker start 。就是說:在使用docker run建立容器的時候 若是檢查鏡像,若沒有鏡像,會從公共倉庫下載,而後在建立容器,運行容器。
docker run -itd --name c7 --network bridge --ip 172.16.10.135 centos:latest /bin/bash
下載資源 名字c7 網卡橋接 本地IP 鏡像倉庫centos 最新latest
docker run --cpu-quota 20000 centos(容器名) //cpu的使用率限定爲20%
docker run --cpu-shares 1024 centos
限制CPU內核使用
docker run --cpuset-cpus 0,1 centos //容器centos獨享 第1和第2個內核
docker run -m 512m centos //限制cents容器內存512M 對blkio限制
例如:限制容器的/dev/sda1 的寫入ipos爲1MB docker run --device-write-bps /dev/sda1:1mb centos