《Docker Book》-笔记

  • 容器与管理程序虚拟化(hypervisor virtualization HV)
    • HV通过中间层运行独立虚拟机器于硬件之上
    • 容器则是直接运行在操作系统内核之上的用户空间,由于客居于操作系统,只能运行与底层宿主机相似的操作系统。
  • 权限隔离监牢(chrooot jail)
  • 容器有独立的网络和存储栈,还拥有自己的资源管理能力
  • 需要的开销有限,不需要模拟层和管理层,而是使用操作系统的系统调用接口,降低了运行各个容器所需的开销。
  • Docker是一个能够把开发的应用程序自动部署到容器的开源引擎,帮助用户构建和部署容器。
  • 所需的全部环境,仅仅是一台安装了兼容版本的Linux内核和二进制最小限的宿主机
  • 提供
    • 简单,轻量的建模方式
      • 只需几分钟,就可以把自己的程序Dockerize,依赖写时复制模型,达到随心所至,代码即改。
      • 去除管理程序的开销,拥有很高的性能
    • 职责的逻辑分离
      • 开发人员只需关心容器中运行的程序,运维只需关心如何管理容器。
    • 快速,高效的开发生命周期
    • 鼓励使用面向服务的架构
      • 推荐单个容器只运行一个应用程序。
  • Docker组件
    • 客户端与服务器(c/s)
      • Docker守护线程也称为Docker引擎,通过客户端(docker命令行工具或RESTAPI)
    • 镜像(构建或打包阶段)
    • Registry(Docker Hub)
    • 容器(基于镜像,启动或执行阶段)
  • 安装
    • 只支持64位的CPU架构计算机
    • docker info
  • 3种方式可以唯一指定容器
    • 短UUID
    • 长UUID
    • 名称
  • docker run
    • 使用镜像创建并运行新容器
    • 容器拥有自己的网络,以及一个用来和宿主机通信的桥接网络接口
    • -i -t
    • --name [a-zA-Z0-9_.-], 否则为随机名称
    • -d 守护式容器(detached)
    • --restart(2.0+),自动重启容器 e.g. --restart=always/on-failure/on-failure:5(最多重启5次)
    • -p
      • 在宿主机随机选择32768-61000映射, e.g. run -p 80
      • 指定端口映射 e.g. -d 32798:80/ -d 127.0.01:[8080]:80
    • -P,对外公布Dockerfile中EXPOSE公开的所有端口
    • -e ENV
    • -w WORKDIR
    • -v 可以绕过分层联合文件系统,提供持久化或共享数据, 目录后可加:rw/ro,标明读写状态
    • --net=[network name] 指定新容器将会在哪个网络中运行
    • --link [container name] : [alias],可访问容器公开端口,只有链接到这个容器的容器,才能连接到这个端口
    • -h 指定容器名
    • --add-host 添加/etc/hosts解析,e.g. =docker:10.0.0.1
    • --privileged 特权模式,容器对宿主机拥有root权限
    • --cidfile=,将container ID存至文件
    • --volumes-from [container name] 把指定容器里所有的卷(容器中的卷),都加入这个新建的容器里
    • --rm 对于只用一次的容器,自动删除。
  • docker ps -a
    • -l, 最后一个运行的容器,无论是否还在运行
    • -p,只返回容器ID
  • docker start name/id
  • docker restart
  • docker create
  • docker attach name/id
    • 重新附着到容器会话上,沿用run命令时指定的参数
  • docker logs name/id
    • -f
    • docker log --tail 0 -f
    • 获取容器内日志
  • 日志驱动(1.6+)
    • --log-driver, json-file/syslog/none
  • docker top name/id
  • docker stats (1.5+)
  • docker exec (1.3+)
    • 额外启动新线程(后台任务 -d、交互式任务 -it)
  • docker stop name/id
    • 发送SIGTERM信号
  • docker kill
    • 发送SIGKILL,立即停止
  • docker inspect
    • 深入容器信息
    • -f支持Go语言模板
  • docker rm
    • 删除容器
    • -f(1.6.2) 删除运行中的容器
    • docker rm `sudo docker ps -a -q
  • 镜像
    • 由文件系统叠加而成
    • 最低端是一个引导文件系统,bootfs
      • 当一个容器启动后,被移到内存,bootfs被卸载
    • 第二层是root文件系统,rootfs(一种或多种操作系统)
      • 始终为只读状态,传统的Linux引导过程,以只读方式加载,完成完整性检查后,被切换为读写模式
      • docker利用联合加载,又在rootfs上加载更多只读文件系统(镜像)
    • 顶层为镜像启动容器时,加载的可写的文件系统
    • 镜像栈
    • 写时复制(copy on write),当第一次启动容器,初始读写层为空,文件系统发生更改,从下层的只读层复制到该读写层,用副本隐藏只读版本。
    • ubuntu只是一个裁剪版,包含最低限度的支持系统运行组件。
    • docker pull
    • 仓库
      • 用户仓库(user repository)
      • 顶层仓库(top-level repository)
    • 镜像签名
    • docker search
    • docker login/logout
    • docker cp
    • 构建镜像
      • docker commit -m '' containerId 目标镜像仓库/镜像名
        • 只提交与创建容器的镜像差异部分,非常轻量
        • docker inspect
      • docker build/ Dockerfile文件
        • dockerfile使用DSL语法,构建镜像更具备可重复性,透明性,幂等性
          • Dockerfile所在目录为构建环境/构建上下文, 在构建镜像时,将目录中的文件上传到Docker守护进程,这样就能直接访问用户想在镜像中存储得数据。
          • 指令:必须为大写字母,从上到下顺序执行
          • 每条指令都会创建一个新的镜像层并对镜像进行提交,每次都运行一个新容器。
          • 构建的每一步及其对应指令,都会独立运行,并逐步提交。
          • 第一条指令必须是FROM,基础镜像
          • MAINTAINER
          • RUN(使用命令包装器 /bin/sh -c,可能导致意料外行为)/exec格式[]
          • EXPORT
        • docker build -t "仓库名/ 镜像名" .(Dockerfile所在目录)
        • 1.5+,build可以使用-f,定义文件名可不为dockerfile
        • .dockerignore
        • 错误调试,可run最后成功创建的容器。
        • 构建缓存??
        • docker history ,查看镜像如何构建出来
        • docker port containerID/name 内部端口, 映射到宿主机端口
        • 推荐使用数组语法,设置要执行的命令 e.g. CMD ["/bin/bash", "-l"]
        • Dockerfile指令
          • CMD,指定多条CMD指令,也只有最后一条会被使用,run可以覆盖
          • ENTRYPOINT,不会被run覆盖,如果需要使用run --entrypoint覆盖
          • WORKDIR,在容器内部设置一个工作目录
          • ENV
          • USER
          • VOLUME
            • 用来向基于镜像创建的容器添加卷
            • 存放在宿主机 的/var/lib/docker/volumes
          • ADD
            • 将构建环境下的文件和目录复复制到镜像中
            • 通过判断目的地址末尾是否/,确定是否为文件
            • 自动解压归档文件,不会覆盖
            • 使构建缓存变无效
          • COPY
            • 不进行提取或解压
            • 不能复制构建目录之外的任何文件
          • LABEL
            • 1.6+, 添加元数据,通过docker inspect查看信息
          • STOPSIGNAL
            • 1.9+,设置停止容器时,发生什么系统调用信号给容器
          • ARG
            • build --build-arg
          • ONBUILD
            • 为镜像添加触发器,当作为基础镜像。
            • 只被继承一次,在子镜像中FROM后被执行
        • docker push
        • docker rmi
          • docker rmi `docker images -a -q` 删除所有镜像
      • 使用volume构建测试环境
      • 容器间通信
        • 1. 内部连网
          • 每个容器都在docker0(宿主机网关)这个新网络接口,分配到一个ip(veth)
          • 同一宿主机上,不同容器可不一定通过映射后端口通信,可使用原始端口。
          • 由于ip动态变化,不是一个好方案
        • 2. Docker networking
          • 1.9+,创建自己的网络,可跨越不同宿主机。
          • docker network create app //创建新的桥接网络
          • docker network inspect app
          • docker network ls
          • 容器在指定网络中启动,docker会感知到所有在这个网络中运行的容器,通过每个容器中的/etc/hosts维护DNS信息
            • 其他容器的ip、和主机名
            • 任何容器重启,其他容器/etc/hosts都会重新更新
          • docker network connect app db //已有容器添加到网络中
          • docker network disconnect app db
        • 3. 通过docker链接
          • 容器名是唯一的,只有链接到这个容器的容器,才能连接到这个端口。
          • 是个安全模型
          • 通过container name或alias进行简陋的服务发现
          • 1.3+,被连接的容器重启,hosts文件会用新的ip更新
        • Docker中递归使用Docker,必须骗过docker,存储容器的目录/var/lib/docker必须是真实文件系统,必须使用挂载宿主文件系统。
      • docker wait,一直阻塞,直到容器 命令执行完成,返回容器退出时的返回码。
      • Docker toolbox
        • screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty, vm真实执行环境
      • docker run -it --rm --volumes-from redis_primary ubuntu cat /var/log/redis/redis-server.log, 查看文件日志
    • docker编排和服务发现
      • orchestration,自动配置、协作和管理服务的过程。
        • docker compose
          • 使用YAML定义一组要启动的容器以及运行时的属性
          • docker-compose up
          • -d
          • docker-compose ps
          • stop/kill/start/rm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值