1、基礎知識
python
Docker特性:docker
1.啓動速度爲秒級,共享Kernel幾乎沒有性能損耗,資源消耗小shell
2.提供隔離的運行環境centos
-文件系統隔離bash
-網絡隔離網絡
-進程號隔離app
-進程間通訊隔離運維
3.提供資源限制socket
-CPU計算資源tcp
-內存資源
-磁盤I/O資源
4.一個容器只幹一件事情
保證容器提供服務的服務質量而且能夠下降容器之間的相互干擾
5.docker鏡像是分層的,好比把一個centos啓動成容器,而後裝一個服務保存,就是在本來的鏡像層上又加了一層
隔離的原理
CGroups:限制容器的資源使用,
Namespace機制實現容器間的隔離
chroot:文件系統的隔離
liunx內核提供的限制,記錄和隔離進程組所使用的資源
經過不一樣的子系統來實現對不一樣資源使用的控制和記錄
docker的守護進程和客戶端的鏈接方式
經過socket連接
unix:///var/run/docker.sock
tcp://host:port
fd://socketfd
docker的運行模式
用戶能夠經過命令行的接口或者自定義的應用和客戶端鏈接,客戶端能夠是docker提供的二進制程序、shell中運行的docker命令、用戶自定義的程序,程序是經過remoteAPI來調用docker的服務,docker的客戶端和服務端經過socket鏈接,這種鏈接意味着docker的客戶端和服務端既能夠在同一臺機器上運行也能夠在不一樣的機器上運行,docker的客戶端能夠經過遠程訪問的方式來訪問docker服務端
2、命令操做
鏡像操做
下載鏡像
docker pull centos
上傳鏡像
docker push centos
刪除鏡像
docker rmi p_w_picpathID
打標籤
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
列出鏡像
docker p_w_picpaths
導出鏡像
docker save -o p_w_picpath.tar 鏡像名稱+tag
導入鏡像
docker load --input tar包名稱
查找鏡像:從官方倉庫中
docker search centos
構建鏡像:把鏡像啓動起來就是容器而後進行修改,修改完exit退出,commit命令保存
docker commit p_w_picpathID
列出鏡像
docker p_w_picpaths
容器操做
啓動容器
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] docker run -t -i centos:latest /bin/bash docker run --help -i:交互式操做 -t:分配一個tty -d:後臺運行
二、啓動容器
docker run -t -i centos:latest /bin/bash
若是不指定具體的標記,則默認使用 latest 標記信息
三、容器基本使用
容器生命週期管理 docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操做運維 docker [ps|inspect|top|attach|events|logs|wait|export|port] 鏡像倉庫 docker [login|pull|push|search]
4.不進入容器對容器進行操做
docker run p_w_picpath_name yum install -y app_name
5.中止一個容器
docker stop CONTAINER_ID
6.啓動一箇中止的容器,並附着
docker start CONTAINER_ID docker attach CONTAINER_ID #須要多敲一次回車
7.重啓一個容器
docker restart CONTAINER_ID
8.刪除一個容器
docker rm CONTAINER_ID
9.列出某個容器與宿主機之間的端口映射關係
docker port CONTAINER_ID
10.docker刪除全部stop的容器
docker rm $(docker ps -q -a)
腳本還原p_w_picpaths並跟系統已有鏡像對比,若是系統不存在這個鏡像,就還原
#!/bin/bash c=`docker p_w_picpaths | awk '{print $1}' | grep -v REPOSITORY` #過濾出鏡像名稱 echo $c >> p_w_picpaths.txt #把全部鏡像名稱追加到 for i in `ls *.tar` #tar包名賦值給i do a=`echo $i | awk -F '.' '{print $1}'` #去掉.tar grep "$a" p_w_picpaths.txt #查詢$a是否在文件中 if [ $? != 0 ] #返回值不爲0就是 then cat $i | docker import - $a #就還原 else continue fi done