Docker是什么?

Docker是什么?,第1张

Docker是世界领先的软件容器平台。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器,但docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

Docke最初实现是基于LXC。LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。在LXC的基础之上,docker提供了一系列更强大的功能。

Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。

用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

docker的三个概念:

镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

docker的用途:

官方给的是bulid ship run,就是编译、装载、运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。

谐云自主研发的容器云平台,是基于Docker和Kubernetes技术构建的一套完整IT标准化和自动化框架,以“面向终态、优化IT资源”为目标的新一代PaaS平台,能够提高企业的IT管理能力,在降低运营成本和风险的同时,获得更高的运维效率,保障业务稳定运行和高效迭代。

正面回答这个问题之前,先看看虚拟机和Dcoker的区别。

总结一下虚拟机和Docker的区别:

再正面回答一下“Docker可以代替虚拟机运行生产服务器么”?

应用部署到服务器上的过程: 因为我是做java开发的,就拿一个正常的java项目举例。首先需要在服务器上搭建基础环境:

这只是一个简单的项目的部署前的配置,之后把您的项目打包发送的tomcat,运行即可。那如果有十几个服务器需要部署呢?是不是就要配置环境十多次,那人不是崩溃了。而且还会出现开发那边运行没问题,部署上去有问题的事情。所以这个时候docker出来了。

应用部署到docker上的过程:

两步搞定,不需要配置复杂的环境。如果有十多个容器需要部署怎么办?直接远程下载镜像即可,是不是很简单。

docker适合平台统一在linux的大单位用,服务越多越好,比如几百、几千、几万。配合k8s调度和微服务改造、加上自动化运维,能够实现弹性扩容和缩容,达到on demand的效果,典型的用例是互联网内容提供商。

对于一般中小企业,只有几十台服务器的,平台不统一的,投资docker不如虚拟机。

除了不能跨os平台,docker的另一个缺陷是隔离度不够。

先说答案:可以,但是没有必要。

容器技术是虚拟化技术的应用,使用容器代替虚拟机运行程序自然是可以的,容器在持续集成方面相对虚拟机还有一定的优势,但是如果仅仅是为了用容器而用容器,则没有必要。

容器技术最大的优势是容器编排,可以实现线上服务的无缝扩容,缩容,降级,熔断等自动化操作,极大的降低运维成本。所以,如果不用容器编排,则无须急着迁移。

理论上完全可以的,但目前我所接触到的生产方案基本上都是docker在虚机集群上跑。

看系统的要求了。docker不可能完全替代全部,windows服务器不可以,软件系统没有使用docker重新加载的,也是很难的。

用docker需要配合自动化,否则那是给自己找麻烦

version: '3' //docker-compose 版本 3.x

services:  //服务的配置信息

    FileServer: //自己定义的服务

        image: nginx:latest  //使用的镜像名

        container_name: 'FileData' // docker容器名

        restart: always //重启策略 always 总是重新启动

        ports: - '8003:8003'  //映射端口信息 宿主端口:容器端口

        volumes: // 定义了卷信息,提供给 services 中的 具体容器使用

            - './nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf' // 用户自己指定的目录:映射目录

            - './nginx/log:/var/log/nginx'

            - './file:/usr/share/nginx/file'

            - './web:/usr/share/nginx/html'    //其他html连接目录

        command: /bin/bash -c "nginx -g 'daemon off'"  //覆盖容器启动后默认执行的命令

autoindex on //是否显示文件目录 on显示  off 关闭显示

autoindex_exact_size on // 显示文件确切大小 on 显示字节单位 off 显示出文件的大概大小,单位是KB或者MB或者GB

autoindex_localtime on //默认为off,显示的文件时间为GMT时间 ;改为on后,显示的文件时间为文件的服务器时间

charset utf-8,gbk //显示的字符集

server{ //服务配置

    listen 8003 // 监听端口 ,也可以加上IP地址,如,listen 127.0.0.1:8080

    server_name _ //定义网站域名,可以写多个,用空格分隔。

    //匹配规则,在server{}里可以有很多location配置段

    //root/alias 是指定文件路径的两种方式 alias 相当于重定向路径

     //使用alias,目录名后面一定要加“/”

    location / { //location 后面跟的搜索路径

        root /usr/share/nginx/file //指定文件服务地址 这里的目录是 yml 文件里配置的映射目录

    }

    location /web/{ 

        alias /usr/share/nginx/ //多个location 的时候这里只需要指定映射目录的上级目录就行了

        index index.html index.htm //配置默认首页

    }

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/81256.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-04
下一篇2023-03-04

发表评论

登录后才能评论

评论列表(0条)

    保存