Docker组件简介、常用命令

Docker服务端与客户端

      作为一个C/S架构的程序,Docker提供了一个命令行工具docker,及一套RESTful风格的API,用于C/S间的交互。Docker Server端也称Docker引擎,通常都会以守护进程的方式运行。

仓库
  仓库用来存放镜像,根据创建者类型,分为用户仓库和顶层仓库

  • 用户仓库,由普通用户创建,仓库全名由用户名/仓库名组成,用户名即Dk Hub帐号;
  • 顶层仓库,由Docker组织或其认定的第三方管理,有官方特权,名称只需要包含仓库名部分;
  • 像centos、ubuntu等都是顶层仓库,像dnmy/jdk8等就是用户仓库。  


  往仓库中push镜像时需要先登录,登录之后生成的auths信息存储在/root/.docker/config.json。
    (注:docker push只会push当前镜像与基础镜像之间的差异数据)

[root@localhost ~]# docker login
[root@localhost ~]# cat /root/.docker/config.json
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "..."
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/19.03.4 (linux)"
        }
}[root@localhost ~]# 

镜像
  一个分层的文件系统,最底层是boots引导文件系统,然后是rootfs文件系统, 最上面是用户文件系统

  • boots可以理解成是与内核相关的一系列文件,主要是与启动、内存/磁盘管理等相关的文件
  • rootfs可以看成是Unbutu、Centos等文件系统,它在boots基础上,额外提供一些工具软件,比方软件包、函数库等。
  • 用户文件系统,可以简单对应成应用软件,如Java、Tomcat、Rocket等。

  镜像一次构建任意运行的原理:因为Docker容器是基于内核实现的,且容器与主机共享内核(CentOS与Ubuntu等系统的内核是相同的<版本或不同>),所以同一Docker容器可以运行在任意Linux系统之上。在CentOS上运行Ubuntu镜像容器时,容器使用的是CentOS主机的内核+Ubuntu镜像,可理解成boots系统是宿主机的,而rootfs是Ubuntu的,反过来也一样。
  镜像默认存储在/var/lib/docker/驱动...,这个目录下也包含镜像创建过程中生成的中间镜像

[root@localhost sha256]# pwd
/var/lib/docker/image/overlay2/imagedb/metadata/sha256
[root@localhost sha256]# ll
总用量 0
drwx------. 2 root root 20 11月 27 15:58 1690c2967fd88b59c463a0ef1a923c21be94b40353c4367161afa759cdee5cea
drwx------. 2 root root 39 12月  2 20:03 1955400068857a3486419535dac96a18680fcbe3becb5b9401d007f05f719479
drwx------. 2 root root 20 11月 27 15:58 285e3e2b9172e64c55296c80957fc7c5381e4156ab3b31586d7e8ceae6920a53

 生成镜像的方式主要三种,实际中主要通过Dockerfile的方式生成。

docker commit cid/cname [repository:tag]   #基于指定容器生成镜像
docker build -t=[repository:tag] .         #基于Dockerfile生成镜像
docker  load < xxx.tar                     #基于已有镜像模板生成镜像

镜像名与仓库名
  Docker通过Tag来区分同一仓库中的不同镜像,即镜像由仓库全名:Tag来确定如centos:latest、dnmy/jdk8:tag01。推送镜像时,docker hub也通过镜像名前缀来确定其所属仓库。
  值得注意的是,不要在同一仓库中放不同类型的镜像虽然在仓库中可以通过Tag进行区分,但这种区分并没不直观。比如有一个镜像dnmy/soft:tag08,你无法通过这个名称知道它是jdk、rocketmq还是其它镜像。(同样也不要用docker tag将镜像重定向,如docker tag dnmy/jdk:tag01 dnmy/rocket:tag01)


容器
  
镜像是一个分层的文件系统,是静态的。容器是动态的,是基于镜像启动的一个进程,在内部又可以运行一个或多个进程,是一个运行环境。这里再提一下,容器和宿主机是共享内核kernel的,并且kernel版本也与宿主机一致。容器默认也存储在/var/lib/docker/container..目录下 

[root@localhost containers]# pwd
/var/lib/docker/containers
[root@localhost containers]# ll
总用量 0
drwx------. 3 root root  70 12月  2 20:18 475884b80e6596ebe7def7692edf864c51adf0c1a499700f37663f5d1523fcf4
drwx------. 3 root root  70 12月  2 20:18 97b86028143301a7dcb7f95e4eba69bb0648b5abfe867768daa623e54cfd3c49
drwx------. 4 root root 237 12月  2 19:55 a9d07207627ad18a6fcb67ae5f4142b681a64449917cfb07511bb2f6dd5cea4e
drwx------. 4 root root 237 12月  2 20:17 b9a50c1420cf49916d98615152e18f8b78ecf9594d52263f590544ca889c3e93

常用命令

Docker启动/状态等命令
systemctl stop docker
systemctl start docker
systemctl restart docker
systemctl status docker
docker login           //登录到docker hub
docker logout          //退出登录
docker push  镜像名    //推送镜像到docker hub
docker info
镜像相关命令
docker search [image]    //搜索镜像
docker pull name[:tag]  //拉取镜像:未指定tag的情况下默认拉取该仓库下的latest镜像
docker rmi name[:tag]   //删除镜像:未指定tag的情况下默认删除该仓库下的latest镜像
docker images                //镜像列表
docker inspect name[:tag] //查看镜像元数据信息
docker commit  容器Id 镜像名  //创建镜像(注:创建镜像有三种方式:提交容器,基于dockerfile构建,基于本地模板创建
docker save  -o xxx.tar [image]   //保存镜像为tar文件,可以提供给其它人员,-o指定tar文件全名
docker  load < xxx.tar            //载入保存的镜像
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]   //镜像重命名,实际会产生一个新的image指向同一镜像(镜像ID相同)
[root@localhost ~]# docker tag dnmy/rocket:tag01 dnmy/rocket:tag02
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dnmy/rocket         tag01               195540006885        5 days ago          1.09GB
dnmy/rocket         tag02               195540006885        5 days ago          1.09GB
容器相关命令
docker create -t -i imageName  //基于镜像创建一个容器,更多参数参见-help
docker run -i -t imageName     //基于镜像运行一个容器=创建+启动
docker start cid/cname         //启动一个容器
docker stop cid/cname          //停止容器
docker restart  cid/cname      //重启容器
docker attach cid/cname //附加到容器
docker rm cid/cname     //删除容器
docker ps -a            //所有容器列表      
docker ps 或 docker container ls     //正在运行的容器列表            
docker top cid/cname    //查看容器中运行的进程
docker stats cid/cname  //查看容器状态信息,如CPU使用率、内存使用率等
docker inspect cid      //查看容器元数据信息,如创建信息、主机配置、网络、端口等等
docker export cid/canme -o xxx.tar    //导出容器,-o指定tar文件全名
docker import xxx.tar [newimagename:tag]  //导入容器生成镜像,可以指定新镜像名称和标签,否则默认为<none>
docker exec cid/cname 命令 //在外部(即宿主机的终端上)控制容器执行指定命令,而不需要先附加到容器
docker cp cid /cname:文件路径 宿主机路径    //文件拷贝
或
docker cp 宿主机路径 cid:路径       

命令归纳
//与容器相关的命令
docker [run|start|stop|restart|kill|rm|pause|unpause] 
docker [ps|top|attach|exec|events|logs|wait|export|import|port]
docker [commit|cp|diff]
//仓库相关命令
docker [login|pull|push|search]
//与镜像相关的命令 
docker [images|rmi|tag|build|history|save|import]   
//其它命令 
docker [info|version|inspect]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值