• docker基础


      一个java web工程,因为开发阶段需要安装jdk、tomcat、mysql、redis、nginx等等软件,在部署在其他平台有需要重新安装一遍,特别做集群安装非常浪费时间
    ,而且软件版本的不同,各种配置文件,很容易导致夸平台部署无法运行,docker的出现,解决了运行环境和配置的问题,方便持续集成并有助于整体发布容器虚拟化技术,目的就是“一次封装,导出运行”。

    一、docker与虚拟机

    虚拟机:带环境安装的一种解决方案,模拟一整套操作系统,占用资源多,启动非常慢。
    linux容器(docker):不需要捆绑一整套操作系统,也没有对硬件进行虚拟,而只对进程进行隔离,只需要自己需要的资源,直接运行与宿主内核,容器没有自己的内核

    二、docker三要素

    仓库、镜像、容器

    三、docker常用命令

    • 帮助命令

      • docker verison
      • docker info
      • docker --help
    • 镜像命令

      • docker images
        -a // 显示所有(含中间层)
        -q //只显示镜像id
        --digests // 显示镜像摘要信息
        --no-trunc // 显示完整镜像信息

      • docker search [option] imageName
        --no-trunc
        -s //列出收藏数不小于的指定数的镜像 如:docker search -s 30 tomcat
        --automated // 只列出automated build类型的镜像

      • docker pull imageNmae[:tag]
        tag一般表示版本信息,不写的话,默认:latest最新版本

      • docker rmi -f imageId(或者imageName[:tag])
        删除多个:docker rmi -f tomcat nginx 或者 docker rmi -f $(docker images -qa)

    • 容器命令

      • 启动容器(通过镜像构建容器实例)
        docker run [option] imageId(name) [command] [args..]

        >**OPTIONS**  
        说明(常用):有些是一个减号有些是两个减号  
        --name="容器新名字" 为容器指定一个名称  
        -d: 后台运行容器,并返回容器|D,也即启动守护式容器  
        -i: 以交互模式运行容器,通常与+同时使用;  
        -t: 为容器重新分配一个伪输入终端,通常与i同时使用;  
        -P: 随机端口映射;  
        -p: 指定端口映射,有以下四种格式  
          ip: hostPort: container Port  
          ip: :container Port 
          hostPort: containerPort  
          containerPort
        
      • docker ps [option]
        docker ps [option]
        如:docker ps 默认显示正在运行的容器
        如:docker ps -n 10 显示最近创建的10个容器

        >**OPTIONS**(常用):   
        -a: 列出当前所有正在运行的容器+历史上运行过的  
        -l: 显示最近创建的容器。  
        -n: 显示最近n个创建的容器  
        -q: 静默模式,只显示容器编号  
        -no- trunc: 不截断输出。
        
      • 退出容器
        exit:停止容器并退出
        ctrl+p+q :不停止容器退出

      • 进入未停止的容器(交互)
        docker attach 容器id(name)
        docker exec -it 容器id(name) /bin/bash (进入交互模式)
        补充:docker exec -it 容器id(name) ls -l (不进入,只交互一次)

      • 停止容器或强制停止
        docker stop 容器name(容器id)
        docker kill 容器name(容器id)

      • 启动容器或重启
        docker start 容器name(容器id)
        docker restart 容器name(容器id)

      • 删除容器
        删除单个:docker rm [-f] 容器name(容器id)
        删除多个:docker rm [-f] $(docker ps -a -q) 或者 docker ps -a -q | xargs docker rm
        注意:-f 表示强制删除 ,不加-f ,可以只删除已停止的容器

      • 查看容器(运行中)内部细节
        docker inspect 容器id(name)

      • 查看容器进程
        docker top 容器id(name)

      • 容器日志
        docker logs -t -f --tail 5 容器id

      • 拷贝容器内文件到主机
        docker cp 容器id:容器类文件路径 目的主机路径

      • 补充

        docker run-d 容器名
        使用镜像 centos: latest以后台模式启动一个容器如
        docker run -d centos

        问题: 然后 docker ps-a进行查看,会发现容器已经退出

        很重要的要说明的一点:Dker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。这个是 docker的机制问题,比如你的web容器,我们以 ngInx为例,正常情况下,我们配置启动服务只需要启动响应的 service即可。例如service nginx start。但是,这样做, ngInx为后台进程模式运行就导致 docker前台没有运行的应用,
        这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行

    四、docker镜像

    • 镜像
      是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容包括代码、运行时、库、环变量和配置文件

    • Docker镜像加毂原理
        docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统 UnionFS。
        bootfs( boot file system)主要包含 bootloader和kernel, bootloader主要是引导加载kernel,Lnux刚启动时会加载 bootfs文件系统,在
      Docker镜像的最底层是 bootfs。这一层与我们典型的 Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核
      就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载 bootfs
        rootfs( root file system),在 bootfs之上·包含的就是典型 Linux系统中的ldev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不
      同的操作系统发行版,比如 Ubuntu, Centos等等
        对于一个精简的OS,root可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自已己只需要
      提供 rootfs鱿行了。由此可见对于不同的nux发行版,boot基本是一致的, rootfs会有差别,因此不同的发行版可以公用bootfs

    联合文件系统
    Union FS(联合文件系统); Union文件系统( UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为
    交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下 unite several directories into a single virtual
    filesystem) Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具
    体的应用镜像
    特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文
    件系统会包含所有底层的文件和目录

    • docker commit -m="描述信息" -a="作者" 容器id 新镜像名称[:tag]
      将运行中的镜像,提交成新的镜像

    五、容器数据卷

    容器的持久化 、容器间继承+共享数据

      卷就是目录或文件,存在于一个或多个容器中,由 docker挂载到容器,但不属于联合文件系统,因此能够绕过 Union File Systen提供一些用于持续存储或共享数据的特性
      卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此 Docke不会在容器删除时删除其挂载的数据卷
    特点:
    1:数据卷可在容器之间共享或重用数据
    2:卷中的更改可以直接生效
    3:数据卷中的更改不会包含在镜像的更新中
    4:数据卷的生命周期一直持续到没有容器使用它为止

    • 添加数据卷
      docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
      docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 (带权限 ,ro 表示内文件只读)
      还有一种方式,dockerfile,看后面笔记

    • 数据卷容器
      命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共亨,挂载数据卷的容器,称之为数据卷容器

      docker run -it --name name2 volumes-from name1 镜像名
      说明:同一个镜像模板,启动name1,然后name2 继承自name1,那么数据卷目录共享资源。
      结论:容器间配置信息的传递,卷的生命周期一直持续到没有容器使用为止

    六、DockerFile解析

    dockerfile是构建docker镜像的构建文件,是由一系列命令和参数构成的脚本

    • 保留字
      • FROM
        基础镜像,当前新镜像是基于哪个镜像的
      • MAINTAINER
        镜像维护者的姓名和邮箱地址
      • RUN
        容器构建时需要运行的命令
      • EXPOSE
        当前容器对外暴露出的端口
      • WORKDIR
        指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
      • ENV
        用来在构建镜像过程中设置环境变量
      • ADD
        将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
      • COPY
        类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
      • VOLUME
        容器数据卷,用于数据保存和持久化工作
      • CMD
        指定一个容器启动时要运行的命令,Dockerfile 中可以有多个cMD指令,但只有最后一个生效,CMD会被 docker run之后的参数替换
      • ENTRYPOINT
        指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样都是在指定容器启动程序及参数,但是docker run 之后参数会传递给ENTRYPOINT,之后形成新的命令组合
      • ONBUILD
        当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的 onbuild被触发
  • 相关阅读:
    Android--->activity高级运用,保存前一个界面为完成的数据savedInstanceState。
    Android--->activity界面跳转,以及查看生命周期过程
    Android--->Intent
    Android--->Button按钮操作
    安卓EditText按钮
    DDS视图&Button控件
    Android之EditText控件
    Android之TextView控件的学习
    usb免驱动摄像头实验
    Flash硬件原理
  • 原文地址:https://www.cnblogs.com/laoyin666/p/10362789.html
Copyright © 2020-2023  润新知