一、基础知识

Docker特性:

1.启动速度为秒级,共享Kernel几乎没有性能损耗,资源消耗小

2.提供隔离的运行环境

-文件系统隔离

-网络隔离

-进程号隔离

-进程间通信隔离

3.提供资源限制

-CPU计算资源

-内存资源

-磁盘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服务端

二、命令操作

镜像操作

下载镜像

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:后台运行

2、启动容器

docker run -t -i centos:latest /bin/bash

如果不指定具体的标记,则默认使用 latest 标记信息

3、容器基本使用

容器生命周期管理 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