docker 能干什么?

    • 简化配置
    • 整合服务器
    • 代码流水线管理
    • 提高开发效率
    • 隔离应用
    • 调试能力Docker
    • 多租户环境
    • 快速部署

    容器编排工具

    • kubernetes 和 docker swarm

    容器的前生今世

    物理机 -> 虚拟机

    容器解决了什么问题?

    docker 进行了容器的打包,打包好的容器,可以运行在任务的环境,解决了开发和运维直接的矛盾。开发和运维之间建立了桥梁。

    什么是容器?

    对软件和其依赖的标准化打包,应用之间相互隔离(肯定没有虚拟机和物理机隔离的那么完全),共享同一个OS Kernel(同一个操作系统上),可以运行在很多主流的操作系统上。

    Docker平台

    • Docker 提供了一个平台,打包,运行的app的平台
    • 把application和底层的基础建设隔离开来

    Docker Engine

    Docker 底层技术支持

    • 资源控制
    • 访问隔离
    • 文件系统隔离
    • 容器引擎(生命周期控制)

    什么是Image

    • 文件和meta data的集合
    • 分层的,并且每一层都是可以添加改变的,成立一个新的Image
    • 不同的image之前可以共享分层
    • Image本身是只读的

    查看Image

    sudo docker image ls

    获取Image

    • build from Dockerfile
    • pull docker 官网

    Dockerfile

    Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

    FROM

    必须为第一个命令,指定基础镜像

    LABEL

    给镜像添加信息。使用docker inspect 可查看镜像的相关信息(类似注释)

    RUN

    构建镜像时执行的命令

    1. RUN yum update && yum install -y vim \
    2. python-dev #反斜线换行
    3. RUN apt-get update && apt-get install -y perl
    4. pwgen --no-install-recommends && rm -rf
    5. /var/lib/apt/lists/* #注意清理cache
    6. RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

    WORKDIR

    1. WORKDIR /test #如果没有会自动创建test目录
    2. WORKDIR hexin
    3. RUN pwd #输出结果应该是/test/hexin

    ADD and COPY

    1. 将本地文件添加到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等类型的文件将被添加tar -x命令,进行解压
    2. 同ADD,只是不会解压文件

    ENV

    设置环境变量

    Shell 和 Exec 格式

    • Dockerfile shell
    1. FROM centos
    2. ENV name Docker
    3. ENTRYPOINT echo "hello $name"
    • Dockerfile Exec
    1. FROM centos
    2. ENV name Docker
    3. ENTRYPOINT ["/bin/echo", "hello $name"]

    ENTRTYPOINT

    设置容器启动时运行的命令

    EXPOSE

    暴露端口

    CI 持续性集成