zoukankan      html  css  js  c++  java
  • 对docker一些认知

    关于docker(应用容器引擎)        

    docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。           ---摘自百度

    一个完整的Docker有以下几个部分组成:
    1. dockerClient客户端
    2. Docker Daemon守护进程
    3. Docker Image镜像
    4. DockerContainer容器
     docker容器为什么可以跨平台部署

        docker镜像和操作系统没关系,docker最大的价值就是提出了镜像打包技术。首先你的明白什么是docker,什么是镜像,什么是容器,然后你就能明白镜像和操作系统之间的关系。

    docker是一个引擎,是基于内核的一种技术。比如Linux内核,那么它就关心是不是Linux内核,它不关心你是Ubuntu还是CentOS。所以docker也实现了和操作系统的解耦。

    镜像呢是把服务的运行环境打成了一个包,比如tomcat,镜像里面是把除操作系统的内核以外,然后再加上tomcat的二进制包。然后通过docker引擎构建出来一个tomcat的镜像。

    容器呢,比如我们想创建一个tomcat服务,之前的方式是在服务器中通过tar或者是rpm安装一个tomcat,然后在start tomcat;如果我们要安装多台的话我们需要多次手动去操作部署。现在有了tomcat镜像以后,我们可以直接利用镜像创建出多个tomcat来(关系是一个tomcat镜像可以创建出多个tomcat容器-即tomcat服务),把容器看成是tomcat的进程就行。 

    简单来说,一个程序运行,需要操作系统的支持,并且需要访问自己的私有的数据和软件。
    docker是容器,它将所有的访问文件和操作系统的api重新定向了,让应用内感觉自己在一>个独立的操作系统上运行,而docker拦截了api调用,并且把那些全局的对操作系统的访问>进行了包装,使得程序不会真的访问它们。
    因为docker程序访问的是容器包装的api,理论上说,只要在另一个操作系统上实现了这些>容器的api,就可以把程序移植上去,因为程序不直接和操作系统打交道,感觉不到不同系>统的不同。

    为什么使用docker部署服务

    Docker是一个轻量级的虚拟化解决方案,你可以实现秒级的虚拟机启动、非常轻量级的虚拟化。个人使用理解看来,它可以实现一个类似于版本管理Git一样的轻量化的状态保存。
    Docker有两个非常重要的概念: 镜像和容器。
    镜像是呈载容器的实体,所有容器都是运行在镜像之上。用版本管理的角度来看,镜像就像是某一个节点,它可以派生出不同的分支,你可以在不同分支上做不同的事情。可以想象成一棵树,最基本的镜像是主树干,主树干可以分出旁支树干,而旁支树干可以分出更细的旁支,而树干上可以生长树枝。
    比如,你使用Docker,从官方仓库下载一个ubuntu镜像,把它作为最基础的镜像。然后在上面运行一个容器,这个容器里下载Nginx,再以这个容器为基础生成一个新的镜像,以后这个镜像生成的容器就都是ubuntu+nginx为基础。但是你工作环境可能需要你使用Apache来工作,你也想有一个ubuntu+apache为基础的镜像,于是你可以使用最基础的ubuntu镜像运行一个容器,在里面下载安装Apache,然后以这个容器为基础,保存一个ubuntu+apache的镜像,以后在这个镜像基础上运行的所有容器都拥有了一个apache环境。

    常用的一些操作:

    1.查看正在运行的容器

      docker ps  

      docker ps -a  为查看所有的容器,包括已经停止的

    2.查看容器日志:(动态查看)

      docker logs -f <容器名orID>  

    3.删除所有容器:(没有亲测)

      docker rm $(docker ps -a -q)

    4.删除单个容器:

      docker rm <容器名or ID>

    5.停止、启动、杀死一个容器:

    1. docker stop <容器名orID>
    2.  docker start <容器名orID>
    3.  docker kill <容器名orID>

    6.查看所有镜像:

      docker images

    7.查看容器的root用户密码:

      docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1

      ps:因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到redmine容器的root用户的密码了。

    8.在容器<IMAGE_ID>开启一个交互模式的终端:

      docker exec -it <IMAGE_ID>  /bin/bash :-t 分配一个虚拟终端;-i 标准输入给容器  /bin/bash 执行bash脚本

      

  • 相关阅读:
    【Mybatis-Plus进阶学习(八)】SQL注入器
    【Mybatis-Plus进阶学习(七)】动态表名SQL解析器
    【Mybatis-Plus进阶学习(六)】多租户SQL解析器
    【Mybatis-Plus进阶学习(五)】性能分析插件
    【Mybatis-Plus进阶学习(四)】乐观锁
    【Mybatis-Plus进阶学习(三)】自动填充
    docker相关操作【动态更新ing】
    Git操作汇总【动态更新ing】
    Go 基准测试和性能测试学习使用
    Go语言的omitempty
  • 原文地址:https://www.cnblogs.com/fancyl/p/9681965.html
Copyright © 2011-2022 走看看