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