Published on

Docker核心技术与企业级应用实战指南

Authors
  • avatar
    Name
    Liant
    Twitter

介绍

Docker是什么

出现的原因

  • 虚拟机占用资源特别大 启动慢
  • 传统的交换模式:只给程序,不给环境
    1. 开发和运维之间的鸿沟
    2. 减少运维的工作量

设计理念

  • 解决了什么问题:运行环境和配置的问题,方便持续集成,有助于整体发布

能干什么

企业级:可以作为作为企业级别的容器技术

开发和运维

  • 对开发和运维比较简单

docker与传统虚拟机之间的差异

  • 虚拟机:虚拟了整套环境
  • 资源占用多,启动慢
  • docker轻量:没有Hypervisor和操作系统,只有docker引擎

获取

英文官网:www.docker.com

文档地址:https://docs.docker.com/get-started/

中文官网:www.docker-cn.com

仓库

hub.docker.com

架构

  • https://www.cnblogs.com/CloudMan6/p/6763789.html
  • client
  • docker服务器 (docker 守护进程)
  • docker镜像
  • docker容器 镜像运行的实例
  • 仓库 存放镜像的仓库,包含共有和私有
  • 运行过程
    • 当client 执行命令docker run nginx时,client发送socket消息给docker守护进程,
    • docker守护进程先在本地看下有没有这个镜像存在,如果不存在就去远程仓库下载,然后保存到本地;
    • 然后通过 container run命令把这个镜像做成一个容器然后运行起来

安装

  • 参考官方文档
  • 配置仓库地址

组成

  • 镜像
  • 容器
  • 仓库

命令

帮助命令

  • docker version
  • docker info
  • docker --help

镜像命令

  • docker images
    • -a 列出所有镜像
    • -q 只显示镜像ID
    • --digests:显示摘要信息
    • --no-trunc:不截断输出,显示完整的镜像ID
  • docker search 镜像名
  • docker rmi 删除镜像
    • 删除单个 docker rmi 镜像id/镜像名称
    • 删除多个镜像 docker rmi id1 id2
    • 删除全部镜像 docker rmi ${docker images -qa}

docker 运行命令

  • 新建并运行 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

    • OPTIONS --name为容器指定新名称
    • -d 后台运行
    • -i交换方式运行
    • -t伪终端
    • -p端口映射
    • -P随机端口映射
  • 列出所有运行的容器 docker ps [options]

    • -a :所有正在运行和运行过的
    • -l: 显示最近创建的容器
    • -n:显示最近创建的n个容器
    • -q:只显示容器id
  • 退出容器

    • exit / ctrl + d:退出并停止容器
    • ctrl+p+q:退出不停止容器
  • 启动容器

    • docker start 容器id/名称
  • 重启容器

    • docker restart 容器id/名称
  • 停止容器

    • docker stop 容器id/名称
  • 强制停止所有容器

    • docker kill 容器id/名称
  • 删除容器

    • docker rm 容器id/名称
  • 删除所有容器

    • docker rm -f $(docker ps -aq)
    • docker ps -a -q | xargs docker rm
  • 以后台方式运行容器

    • docker run -d 容器
  • 进入正在运行的容器,并以前台方式运行

    • docker exec -t 容器id/名称 bashshell 产生新的进程
    • docker attach 容器id/名称 进入容器不产生新的进程
  • 容器 <->拷贝文件<->主机

    • docker copy 容器id/名称:容器中路径 主机路径
    • docker copy 主机路径 容器id/名称:容器中路径

镜像

是什么

  • UnionFS(联合文件系统)
  • 镜像加载原理
  • 分层镜像

docker commit 镜像提交

  • docker commit -m="" -a="作者" 容器id 目标镜像名称:[标签名]

网络

单机

  • Bridge Network
  • Host Network
  • None Network

多机

  • Overlay Network

Dockerfile关键字

FROM 基础镜像,当前镜像是基于那个镜像

MAINTAINER 镜像维护者的姓名和邮箱地址

RUN 镜像构建时需要运行的命令

WORKDIR 容器创建后,默认在那个目录

EXPOSE 当前容器对外暴露的接口

ENV 用来构建镜像时设置环境变量

ADD 将宿主机目录下的文件copy到镜像且ADD命令会自动解压压缩包

COPY

VOLUME 容器数据卷,用来保存和持久化

CMD

  • 指定容器启动时需要运行的命令
  • 多条CMD命令,只有最后一条生效
  • CMD命令会被docker run之后的参数替换

ENTRYPOINT

  • 指定容器启动过程中需要运行的命令
  • 把docker run命令的参数追加到后面

ONBUILD

数据容器卷

日志系统存储(典型场景) 使用 docker run -it --name n1 --volumes-from n0 centos