docker 摘要(入门版)

Docker

安装

macOS或者windows

  • 下载boot2docker工具

CentOS

  • yum install docker-io -y
  • systemctl start docker

docker摘要

docker虚拟化

  • 只虚拟User space
  • 一台机器可以运行20-50个container
  • 启动速度快
  • 对内核有要求(不能像VMware一样可以安装mac,windows和linux)
  • 用于大数据,分布式和集群

container实现

  • cgroup(内核中对资源的限制机制,通过控制进程(一个container实例)来限制)

  • namespace(每一个容器都是有一个自己网络进程的独立的虚拟环境,实现容器间的隔离

  • chroot(文件系统的隔离,有一个真实的物理文件系统(物理机上),其他的都是虚拟的文件系统(虚拟的文件系统在内存中))

  • 以上,cgroup,namespace,chroot都是在linux中,也就是直接调用linux,后来为了跨平台,将上面的封装成了libcontainer库,让docer依赖于它

  • pid,容器有自己独立的进程表和1号进程

  • net,容器有自己的network info

  • ipc,container之间的通信

  • mnt,每个容器都有自己唯一的目录挂载,是真实的挂载目录的子目录

  • utc,有独立的hostname和domain

层次

  • server -> hostOS -> docker engine -> app1

使用aufs实现分层的文件系统管理

  • Image是一种文件系统,里面必须有操作系统或者软件,docker中的系统Image很小,因为只包含很好的最核心的部分,每一个那么多的外围
  • 只读为Image,可写为container,image是java中的class,container是对象
  • Image类似一个单链表系统,每一个image包含一个指向parent image的指针
  • 每一个parent image的image是base image
    • 层次: debain image(base image) -> apache image -> container
    • 一般base image是操作系统镜像
    • 建议:一个container干一件事情

dockerfile(类似于makefile,是命令的集合)

  • 描述一个Image的层次,就提描述了一个依赖次序,centos -> apache -> container
  • 有了它可以完美的重现出开发环境,方便了测试人员

docker hub(镜像仓库,类似于github)

C/S运行

  • client request -> server -> http server -> router -> job -> driver

使用

  • docker pull

  • docker images --no-trunc

  • docker run [OPTIONS] IMAGE[:TAG] [CMD][ARG...]

    • -name
    • -i: iteract
    • -t: tag
    • -d: detach
  • docker ps

    • 不加上-a选项显示的正在运行的容器
    • 加上-a显示所有的容器,包括停止的
  • docker inspect [ID]

  • docker logs

  • docker build

  • docker rm/kill/stop id, 关闭容器

    • 批量操作: docker rm/kill/stop $(docker ps -a -q)
  • docker run -t -i centos /bin/bash, -t表示是伪tty(就是给一个终端,如果每一个则容器一start就stop了),-i表示iteract(在有了终端这个前提之下,如果attach到容器中,可以执行交互式的命令,如果没有则什么都干不了),-d就是在后台运行,不会在执行了上面这个命令之后直接进入到容器中

    • 进入到了交互之界面,使用exit退出,但是也会stop容器,如果要在一次进入到该容器,需要先start容器,则attach容器,因为-i会前台运行,使用-d则是相反的
  • docker cp id:path hostpath

自己的摘要

  • docker在某些方面和git是一样的,不如说对于image镜像都是通过版本控制的,我们从dockeruhb中pull下来镜像文件,如果我们将其启动为一个容器,如果我们在这个容器中进行了修改,docker会通过文件将其修改记录下来,我们可将当当前的容器commit成一个新的image,这就类似于git中的一个commit点
  • 在确定一个容器的时候是使用container id
  • 在确定一个image的时候,是通过name:tag,如果只有name则会选中所有的tag,tag表示一个版本
  • 生成一个image(提交点)的方法有两种,docker commit 和 docker build,在docker build中就是在一个image中执行一个命令的集合在提交成一个新的image
posted @ 2018-11-12 08:48  gogogo11  阅读(652)  评论(0编辑  收藏  举报