容器技术

Docker准备

╄→尐↘猪︶ㄣ 提交于 2019-11-29 00:31:35
1. 引言   Docker是目前最流行的容器技术,是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。也许我们都有一个经历,当开发完某个项目发布到测试系统后测试通过验收上线,到了线上版本却出现了一些问题,这种往往就是因为测试环境和生产环境不一样所导致的。那么使用docker容器进行部署就可以解决此问题,因为当你打包好一个docker镜像后,不管是放到windows上的docker还是linux上的docker,其运行结果都是一致的。   容器技术正变得越来越重要,因为其拥有以下特点: 灵活:即使是最复杂的应用也可以集装箱化。 轻量级:容器利用并共享主机内核。 可互换:您可以即时部署更新和升级。 便携式:您可以在本地构建,部署到云,并在任何地方运行。 可扩展:您可以增加并自动分发容器副本。 可堆叠:您可以垂直和即时堆叠服务。   在容器技术出现之前,我们部署应用往往是部署在真机或者是虚拟机上,那么我们来看下对比图   可以看到容器在本机上运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。  

使用docker-compose 大杀器来部署服务 上

我怕爱的太早我们不能终老 提交于 2019-11-29 00:23:13
我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始。 好吧,可能在小白的眼中噼里啪啦的对着 term 一顿操作会很拉风,但是高手很不屑!在高手眼里…too young, too low. 因为高手都是自动化的,今天就稍微介绍下自动化工具,也就是大杀器 docker-compose 使用docker-compose 大杀器来部署服务 上 先从 docker 说起 docker 简介 为什么说 docker 是快速部署 好了, 我们进化到,快速1.0 时代 于是, 我们又进化了, 快速2.0时代 于是,我们再次加入光荣的进化, 快速3.0时代 docker 安装 docker 的一些概念 镜像 性能损耗 容器 hub docker 简单使用 搜索镜像 下载镜像 helloworld 我常用的 docker 命令 登录 查看容器 查找镜像 下载镜像 删除镜像 开始 看日志 停止一个容器示例 查看容器状态 格式 更快更好更强 docker-compose 简介 docker-compose 是什么 为什么要用 docker-compose,他解决了什么 那么哪里可以买到呢? 从一个小例开始 先安装吧 helloworld 服务更新 软升级 硬升级 从日志得到需要的信息 直接使用 logs 使用类似linux tail 命令 docker

Docker

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 00:05:00
我们通过四W(what,when, why, how)原则去学习一下docker What 什么是docker? docker是一种虚拟化技术,太过专业的术语这里不聊,反而容易乱。可以将其比作类似vmware的虚拟软件,一个docker容器里面可以包含一套完整的软件运行环境。 When 什么时候需要使用docker技术,或者说docker技术的应用场景有哪些? 场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。 Docker主要理念就是环境打包部署,可在任意Docker Engine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建多次部署,一劳永逸。 2.整套项目打包 公司有一项这样的业务:有一个产品可以整套部署到客户那里,以往都是派一名实施工程师到客户那部署。如果用了Docker,我们可以前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不需要再派人过去了。比如官方的Docker Compose编排工具。 3.新开源技术试用 有时,我们想调研一些开源项目,我们可以直接从公共镜像仓库pull项目官方做好镜像启动容器即可。 场景二:环境一致性

Docker容器跨主机通信--overlay网络

旧巷老猫 提交于 2019-11-28 23:54:00
一、Docker主机间容器通信的解决方案    Docker网络驱动 Overlay: 基于VXLAN封装实现Docker原生Overlay网络 Macvlan: Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一个VLAN。容器接口直接连接Docker主机 网卡接口: 通过路由策略转发到另一台Docker主机    第三方网络项目    隧道方案     -- Flannel: 支持UDP和VLAN封装传输方式 -- Weave: 支持UDP(sleeve模式)和 VXLAN(优先fastdb模式) -- OpenvSwitch: 支持VXLAN和GRE协议 路由方案 Calico: 支持BGP协议和IPIP隧道。每台宿主机作为虚拟路由,通过BGP协议实现不同主机容器间通信  回到顶部 二、Docker Overlay Network   Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。   因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。   

Kubernetes企业安全

戏子无情 提交于 2019-11-28 23:51:41
导读 所有利益相关者预先参与一个布局良好的计划,这是构建更安全的容器环境的第一步。如今,容器仍然是应用程序部署和迁移的主流技术。行业专家Paul Rubens将其分解为可以理解的几个部分——陷阱、容器管理系统、安全性等等。 所有利益相关者预先参与一个布局良好的计划,这是构建更安全的容器环境的第一步。 如今,容器仍然是应用程序部署和迁移的主流技术。行业专家Paul Rubens将其分解为可以理解的几个部分——陷阱、容器管理系统、安全性等等。因此,现在人们已经找到了更加可靠和有效的方法来跨平台部署和扩展软件,但它也为恶意攻击者提供了利用这些容器的方法。 在过去几年中,虽然在容器及其编排系统(如Kubernetes)的安全性方面取得了一些重大改进,但也发现了几个主要的漏洞。 令人印象深刻的是,Kubernetes等容器实施和管理工具使企业能够自动化应用程序部署的各个方面,从而带来惊人的业务收益。另一方面,随着IT团队对部署Kubernetes越来越感兴趣,恶意攻击者对破坏Kubernetes集群也越来越关注。 随着Kubernetes的采用和部署的增长,安全风险也会随之增加。这得到了安全专家的广泛认同。最近在云计算和移动开发空间中发生了多起攻击事件,这包括从中断、加密挖掘、勒索软件到数据窃取的所有内容。 当然,这些类型的部署与传统环境一样容易受到外部攻击者和具有恶意的内部人员的攻击。因此

STL,ATL,WTL之间的联系和区别

旧街凉风 提交于 2019-11-28 23:15:07
STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类: algorithm(算法)、container(容器)和iterator(迭代器), 几乎所有的代码都采用了模板类和模版函数的方式 ,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。 从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。 这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。 STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。 它被内建在 你的编译器之内。因为STL的list是一个简单的容器,所以我打算从它开始介绍STL如何使用。如果你懂得了这个概念,其他的就都没有问题了。另外,list容器是相当简单的,我们会看到这一点。 这篇文章中我们将会看到如何定义和初始化一个list,计算它的元素的数量,从一个list里查找元素,删除元素

docker 基础

混江龙づ霸主 提交于 2019-11-28 23:08:52
docker # 容器: 在隔离环境中运行的一个进程,进程停止,容器销毁(打包软件的容器) -- 隔离的环境拥有自己的系统文件,ip地址,主机名等 -- 程序: 代码或命令 -- 进程: 运行的程序 # 容器和虚拟化的区别 -- kvm 虚拟化: 需要硬件的支持,需要模拟硬件,可云翔在不同的操作系统 -- kvm 模拟硬盘(写数据先写在自己,然后宿主机) -- 可以 # linux 开机启动流程: bios 开机硬件自检 根据bios设置的优先启动项boot 网卡, 硬件,u盘 , 光驱 读取mbr引导 UEFI(gpt分区) mbr硬盘分区信息,内核加载路径 加载内核 启动一个进程 init systemd 系统初始化完成 运行服务 # 容器的启动流程 --- 直接使用宿主机的硬件 共用宿主机的内核 启动第一个进程,直接启动服务 -- 优点: 损耗少,启动快,性能高 -- 缺点: 只能运行linux(windows 起虚拟机,然后运行docker) # 容器发展历程 chroot技术:新建一个子系统 安装docker 网址: https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/ docker version 用来查看docker 版本 # docker 官方仓库地址 1. 官方仓库: https://hub.docker.com

spring学习——Ioc基础一

十年热恋 提交于 2019-11-28 20:15:20
一、IoC是什么 IOC——Inversion of Control Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下: 谁控制谁,控制什么: 传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 为何是反转,哪些方面反转了: 有反转就有 正转 ,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。 用图例说明一下,传统程序设计如图一,都是主动去创建相关对象然后再组合起来: 图片一 当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图二所示: 图二 二、IoC能做什么

基于Jenkins和docker的CI过程

我怕爱的太早我们不能终老 提交于 2019-11-28 18:26:46
ZTEsoft-方进 1、基于Jenkins的CI过程 一切要从2013年4月开始说起,当我4月份从委内瑞拉回来之后立即投身到国内一个运营商的大型后端建设项目的尾声中(项目历时3年多,当时已经接近尾声),这个项目涉及100多台主机,包含数十个集群,除了传统的WEB应用外,还用到了流程引擎、ESB、规则引擎、搜索引擎以及缓存和日志,是当时比较复杂的体系结构(当然不能跟现在的云平台相比,但在项目开始的年代这还是一个很不错的架构),整个项目当时一两百号人占了局方整整一层楼十几个办公室,我到了项目组之后成为了一个小组的小头目,管个四五个人,小组美其名曰“平台组”,干的都是打杂的事情,包括编译、打包、部署,日常监控以及系统优化等工作,说起来简单,做起来还是很复杂的,当时所有的工作基本上是靠人工的,可想而知,100来台机器的环境一台一台的部署环境,还得靠人工监控,手工检查,四五个到处救火忙得不可开交,当时我虽然还不知道CI为啥物(压根儿就没这个概念),但也下定决心要改变忙乱的状态,累一点不要紧,但是累得跟狗似的还干不好那就白辛苦了。 在2013年的4~8月份,我们主要研究的是自动编译、打包和发布,采用的基本方式是各种脚本,包括windows下的批处理bat、Linux上的shell甚至Python,虽基本上完成了自动从SVN取代码、自动编译

docker网络模式

落花浮王杯 提交于 2019-11-28 18:26:11
部分参考,写的很好:https://blog.csdn.net/liukuan73/article/details/51603074 1.1 host 模式 众所周知,Docker 使用了Linux 的Namespaces 技术来进行资源隔离,如PID Namespace 隔离进程,Mount Namespace 隔离文件系统,Network Namespace 隔离网络等。一个Network Namespace 提供了一份独立的网络环境,包括网卡、路由、Iptable 规则等都与其他的Network Namespace 隔离。一个Docker 容器一般会分配一个独立的Network Namespace 。但如果启动容器的时候使用host 模式,那么这个容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP 等,而是使用宿主机的IP 和端口,Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的IP地址即为宿主机eth0的IP地址。 例如,我们在 10.10.101.105/24的机器上用 host模式启动一个含有 web应用的 Docker容器,监听 tcp80端口。当我们在容器中执行任何类似