容器技术

docker系列之一:初见docker

痴心易碎 提交于 2019-12-10 14:29:27
什么是docker? docker是目前linux最流行的容器技术,Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样 优点:占用资源小,启动快,体积也小 docker容器与虚拟机有什么区别? 虚拟机(virtual machine)就是带环境安装的一种解决方案,本质上是一个文件夹 虚拟机运行的时候独占系统资源,因为它运行的环境是一个完整的操作系统,我们在运行之前会给虚拟机提前配置相应的物理机的硬盘,cpu和内存等资源,一旦虚拟机运行起来,这些资源他将独自占有 缺点:占用资源多,操作复杂,启动慢 docker和虚拟环境virtualenv有什么区别? virtualenv只是针对python的隔离工具,是借助语言层面的虚拟机来实现的,不具有通用性。Docker是更底层的虚拟化技术,它是进程级的,也就是说不管什么语言编写的程序都会得到相应的服务 Docker 的主要用途,目前有三大类。 ( 1 )提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。 ( 2 )提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。 ( 3 )组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。 Image

微服务 2.0 技术栈选型手册

我只是一个虾纸丫 提交于 2019-12-10 11:23:30
本文转自: https://mp.weixin.qq.com/s/OloZhn2pwfIrOQit_8jefA 一、前言 2014年可以认为是微服务1.0的元年,当年有几个标志性事件,一是Martin Fowler在其博客上发表了“Microservices”一文,正式提出微服务架构风格;二是Netflix微服务架构经过多年大规模生产验证,最终抽象落地形成一整套开源的微服务基础组件,统称NetflixOSS,Netflix的成功经验开始被业界认可并推崇;三是Pivotal将NetflixOSS开源微服务组件集成到其Spring体系,推出Spring Cloud微服务开发技术栈。 一晃三年过去,微服务技术生态又发生了巨大变化,容器,PaaS,Cloud Native,gRPC,ServiceMesh,Serverless等新技术新理念你方唱罢我登场,不知不觉我们又来到了微服务2.0时代。基于近年在微服务基础架构方面的实战经验和平时的学习积累,我想总结并提出一些构建微服务2.0技术栈的选型思路,供各位在一线实战的架构师、工程师参考借鉴。对于一些暂时还没有成熟开源产品的微服务支撑模块,我也会给出一些定制自研的设计思路。 二、选型准侧 对于技术选型,我个人有很多标准,其中下面三项是最重要的: 1. 生产级 我们选择的技术栈是要解决实际业务问题和上生产抗流量的(选择不慎可能造成生产级事故)

docker

馋奶兔 提交于 2019-12-10 09:55:33
一,概述 虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以更好的应用这些资源。一般,虚拟化资源包括计算能力和资料存储。 虚拟化技术可以解决高性能的物理硬件产能过剩和老旧硬件产能过低的重组重用,透明化底层物理硬件,最大化利用物理硬件,充分利用资源。 Docker是一个开源项目,诞生于2013年初,基于go语言实现。Docker项目的目标是实现轻量级的操作虚拟化解决方案。Docker的基础是linux容器(LXC)等技术。在LXC的基础上docker做了进一步的封装,让用户不需要关心容器的管理,使得操作更为简便。 Docker的优点,上手快,职责逻辑分类,快速高效的开发周期,鼓励使用面向服务架构。与传统虚拟机相比,docker启动速度快,占用体积小。 Docker是一个客户端服务器架构。Docker客户端只需要向docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作返回结果。Docker提供了一个命令工具docker以及一整套restful api。可以在同一台宿主机上运行docker守护进程和客户端,也可从本地的docker客户端连接到运行在另一个宿主机上的远程docker守护进程。 镜像是构建docker的基石。用户基于镜像来运行自己的容器

docker网络模式

限于喜欢 提交于 2019-12-10 08:23:13
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: 1.host模式,使用--net=host指定。 2.container模式,使用--net=container:NAME_or_ID指定。 3.none模式,使用--net=none指定。 4.bridge模式,使用--net=bridge指定,默认设置 一、host模式 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip。 众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 二、container模式

Docker简介与安装

烈酒焚心 提交于 2019-12-09 23:10:25
简介与安装 简介 Docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验。 Docker为什么会出现?以为他对与上述问题给出了一个标准的解决方案。 之前在服务器配置一个应用的运行环境,要安装各种软件,普通的一个项目的环境,必备的软件Java/Tomcat/MySQL/JDBC驱动包等。 安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。 况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。 传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。 而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。 不过,即便如此,仍然常常发生部署失败的状况。Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。 透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

docker基础使用与入门实践

a 夏天 提交于 2019-12-09 22:16:06
一、何为docker docker最早基于LXC实现(LinuX Container)从0.7版本以后开始去除LXC转而使用自行开发的libcontainer,从1.11开始,演进为runC和containerd;docker是go语言开发,基于Linux内核的cgroup,namespace以及AUFS类似的Union FS(联合文件系统)等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主机和其他的隔离进程,因此也称其为容器。 docker在容器的基础上进行了进一步的封装从文件系统,网络互联到进程隔离等,极大简化了容器的创建和维护管理。使得docker技术比虚拟机技术更为轻便,快捷。 虚拟机与docker比较: 图片引用自网络 由上面的比较图可以看同样启动一个服务;虚拟机会多一层操作系统,而docker和宿主机共用内核系统;因此docker占用资源更少,资源利用率更高; 虚拟机与docker对比 docker优点总结: 高效的资源利用率 快速的启动 一致的运行环境 持续将会和部署 更轻松的迁移 便捷的维护和扩展 二、dcoker安装 系统要求:CentOS7.x_x64且安装Docker CE版本(社区版),不要使用epel仓库自带的docker docker从1.17后主要分docker-ce和docker-ee(企业版,你懂滴

Docker(一):认识Docker

蹲街弑〆低调 提交于 2019-12-09 22:08:59
Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup,Namespace,Union FS等技术实现,对应用程序进行封装隔离,并且独立于宿主机与其他进程,这种运行时封装的状态称为容器。是一种系统级的虚拟化技术。 Docker早起版本实现是基于LXC,并进一步对其封装,包括文件系统、网络互联、镜像管理等方面,极大简化了容器管理。从0.7版本以后开始去除LXC,转为自行研发的libcontainer,从1.1开始,进一步演进为使用runc和containerd。 2014年4月9日,发布第一个正式版本v1.0。 2017年2月8日,发布v1.13.1 2017年3月1日,发布v17.03-CE版本,从此版本开始分为企业版和社区版。 从下图可以看出从2106年Docker技术引起爆发式关注。 1.1 Docker思想 Docker的思想源于集装箱,集装箱解决了什么问题呢?在早期运输货物需要不同分类的船,例如运输水果的船,运输生活用品的船,有了集装箱后,在大船上,可以把货物分类到不同的集装箱中,水果一个集装箱,生活用品一个集装箱,它们之间互不影响,只要把货物封装好集装箱里,就可以把不同类的货物一起运走。 通过Docker logo也可以看出所以然来,Docker就像大船,集装箱就是容器。 一条鲸鱼拖着若干个集装箱的经典形象已经深入人心。

Docker之Namespace与Cgroup

拜拜、爱过 提交于 2019-12-09 22:01:58
博文大纲: 一、Docker概述 二、Namespace概念 三、Cgroup基本概念与示例 一、Docker概述 1.Docker简介 Docker作为开源社区最火爆的项目,它是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”,docker的全部源代码都在https://github.com/docker 进行相关维护,其官网是: https://www.docker.com 。 Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。如图: 如图所示:鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。正如 Docker的设计宗旨一样:Buid、 Ship and Run Any App、 Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。 2.Docker和虚拟机的区别 作为一种轻量级的虚拟化方式,Docker与传统虚拟机相比具有显著的优势。如图: Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟操作系统层,而Docker容器是直接在操作系统层面之上实现的虚拟化,如图: 3.Docker的使用场景

Docker学习笔记四 镜像

夙愿已清 提交于 2019-12-09 20:09:39
4.1 Docker镜像介绍 Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统(bootfs),Docker用户几乎不会和引导文件系统有交互,当容器启动后它会被卸载而移动到内存中。 第二层是root文件系统(rootfs),它位于引导文件系统之上。rootfs可以是一种或多种操作系统。rootfs永远是只读状态。 Docker利用联合加载(union mount)技术又会在rootfs层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,但在外部看起来像是一个文件系统。联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有底层的文件和目录。 Docker将这样的文件系统成为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像成为父镜像,最底部的镜像成为基础镜像。 最后,当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统。在Docker中运行的程序是在这个读写层中执行的。 当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。比如,想修改一个文件,这个文件首先会从该读写层下面的只读层复制到读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本隐藏。 这种机制成为写时复制,这也是使Docker强大的技术之一。每个只读镜像都是只读的,并且以后永远不会变化

JavaWeb学习——了解Servlet

痴心易碎 提交于 2019-12-09 19:55:48
JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发。 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增长。早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议请求服务器上的静态页面,服务器上的web服务器软件接收到请求后,读取URI标示的资源,再加上消息报头发送给客户端浏览器,浏览器负责解析HTML,将结果呈现出来。 然而随着时间发展,用户已经不满足于仅浏览静态页面。用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过复杂,所以需要一些扩展机制来实现用户想要的功能。早期使用的Web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序,对用户请求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。 CGI程序在一定程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,SUN公司推出了Servlet技术,作为Java阵营的CGI解决方案。 什么是Servlet