容器技术

Docker学习的几个建议和技巧

浪尽此生 提交于 2019-11-27 12:08:22
在之前的文章和问答中,我也说过学习技术的一般方法,学习技术不光是要指出关于什么,而是教会如何去做,不仅仅是关于你应该具备哪些技术技能,跟重要的是你应该如何学习它们。本文中,虫虫和大家一起讨论下下如何学习Docker以及学习Docker学习中应该注重那些问题。 你知道什么是虚拟化吗? 最近几年入坑的很多开发人员和运维工程师应该都听说过虚拟化,虚拟化和云都是宠儿和新的流行词,但是关于虚拟化的实质和实际内容可能真正了解的人也不多。 虚拟化和分布式云计算是一项革命性技术,在目前乃至未来很长一段时间内都会是热点和趋势。懂得虚拟化,也能让技术人员更容易入职,更容易拿到高工资。 了解虚拟化和容器化之间的区别,如何用容器解决虚拟化问题,是一个是开始Docker之旅的最好问题,而不是怎么在"windows安装docker?","我不懂Linux,我怎么学习docker?",这样的问题。 从简单命令行开始 这是对任何人学习docker技术的最佳路径。无论你是学习Docker还是其他任何技术或技能(比如git等也类似)。 学习CLI很重要。 Docker有很多很好的GUI,但是如果你想掌握一项技术,最好的方法是使用它的基本命令,从这儿了解实质,原理和进行问题排查。 从简单的命令开始,这是这些工具(协议)的实质,也能更能帮助你了解原理和本质,更容易排查问题。 学习Docker请先忘记Kubernetes

Dockerfile命令详解

好久不见. 提交于 2019-11-27 11:04:01
使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1、主要组成部分 dockerfile执行build命令时,是从上倒下依次执行的,dockerfile的基本组成部分如下。 主要部分 代表性命令 基础镜像信息 FROM 维护者信息 MAINTAINER 镜像操作指令 RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME、ENV等 容器启动时执行指令 CMD、ENTRYPOINT 2、各命令详解 FROM:指定基础镜像,必须为dockerfile中的第一个命令 格式:   FROM <image>   FROM <image>:<tag>   FROM <image>@<digest> 示例:   FROM mysql:5.6 注:   tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像 MAINTAINER: 维护者信息 格式: MAINTAINER <name> 示例: MAINTAINER Jasper Xu MAINTAINER sorex@163.com MAINTAINER Jasper Xu <sorex@163.com> RUN:构建镜像时执行的命令,一个文件中可以包含多个RUN命令 RUN用于在镜像容器中执行命令

Redis管理Session+Nginx负载均衡+Docker+Tomcat

僤鯓⒐⒋嵵緔 提交于 2019-11-27 10:34:23
本文是一篇关于技术整合的文章,以一个Web应用为例,使用Docker容器来部署我们的应用,并将Session交给Redis来存储和管理,涉 及到Docker/Redis/Tomcat/Nginx/Spring Web/Spirng Web MVC等技术。其中: Docker——容器技术或虚拟化技术,可以将我们的application及相关依赖打包到一个容器内,方便移植、集群部署,容器完全使用沙箱机制,容 器之间互不影响完全独立。下文所有的server都是部署在Docker中,不了解Docker和相关操作的可以先看看这篇文章。 Redis——一种开源的,先进的 key-value 存储数据库,可用于构建高性能、可扩展的 Web 应用程序的解决方案。本文中用来存储和管理Session。 Nginx——高性能的HTTP和反向代理服务器。本文中用来做负载均衡。 部署结构如下图所示: 环境信息 系统版本:CentOS 7 JDK版本:jdk1.8.0_60 Apache Tomcat版本:6.0.44 Docker版本:1.7.1 Redis版本:3.2.1 Nginx版本:1.10.1 本文中宿主机IP:192.168.111.128 注: 下文中相关技术的详细信息不重复说明了,需要的可以去官网查询。 Docker篇 1.安装与配置 这个过程不说了,省略1000字……( 看前面发的文章 )

依赖注入

拥有回忆 提交于 2019-11-27 10:27:33
依赖注入好处 传统的代码,调用者直接使用new关键字创建被调用者实例,程序会高度耦合,每个对象负责管理与自己需要依赖的对象,导致如果需要切换依赖对象的实现类时,需要修改多处地方。同时,过度耦合也使得对象难以进行单元测试。 依赖注入把对象的创造交给外部去管理,很好的解决了代码紧耦合(tight couple)的问题,是一种让代码实现松耦合(loose couple)的机制。 松耦合让代码更具灵活性,能更好地应对需求变动,以及方便单元测试。 IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 ●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象

【Docker学习之一】初始Docker

倖福魔咒の 提交于 2019-11-27 09:32:38
一、云计算的概念 PaaS(Platform-as-a-Service:平台即服务),把应用服务的运行和开发环境作为一种服务。 SaaS(Software-as-a-Service),意思为软件即服务,即通过网络提供软件服务。 IaaS(Infrastructure as a Service),即基础设施即服务。 二、Docker Docker为第三代Paas平台。 Docker就是虚拟化的一种轻量级替代技术。 Docker的容器技术不依赖任何语言、框架或系统,可以将App变成一种标准化的、可移植的、自管理的组件,并脱离服务器硬件在任何主流系统中开发、调试和运行。 三、Docker技术原理 1、Docker相关的核心技术之cgroups Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。于是就出现了cgroups的概念, cgroup就是controller group ,在这个group中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。 cgroups是将任意进程进行分组化管理的Linux内核功能。 cgroups中的 重要概念是“子系统”,也就是资源控制器,每种子系统就是一个资源的分配器,比如cpu子系 统是控制cpu时间分配的。首先挂载子系统,然后才有control group的。比如先挂载memory子系统,然后在

kubernetes架构

╄→尐↘猪︶ㄣ 提交于 2019-11-27 09:28:00
一、Kubernetes的整体架构 Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,以及包括客户端命令行工具kubectl和其它附加项。 Master Node:作为控制节点,对集群进行调度管理;Master Node由API Server、Scheduler、Cluster State Store和Controller-Manger Server所组成; Worker Node:作为真正的工作节点,运行业务应用的容器;Worker Node包含kubelet、kube proxy和Container Runtime;kubectl:用于通过命令行与API Server进行交互,而对Kubernetes进行操作,实现在集群中进行各种资源的增删改查等操作; Add-on:是对Kubernetes核心功能的扩展,例如增加网络和网络策略等能力。 二、Master Node(控制节点) 2.1 API Server(API服务器) API Server主要用来处理REST的操作,确保它们生效,并执行相关业务逻辑,以及更新etcd(或者其他存储)中的相关对象。API Server是所有REST命令的入口,它的相关结果状态将被保存在etcd(或其他存储)中。 API Server的基本功能包括: REST语义,监控,持久化和一致性保证,API

docker卷管理

被刻印的时光 ゝ 提交于 2019-11-27 09:23:33
制作镜像的俩种方法 Commit制作镜像基于一个现有的容器 dockerfile基于镜像制作镜像 容器底层技术: 1.cgroup 实现了资源的使用限额,CPU,内存,以及磁盘 [root@zxw99 ~]# docker run -d -m 64M -c 512 httpd:v1 [root@zxw99 ~]# cat /sys/fs/cgroup/cpu/docker/981a911ba02f5f4b8fb06052271de813521a94012f05922f5ee09ee2636d8626/cpu.shares 512 2,namespace 实现了资源隔离 PID,UTS,USER,NETWORK,MOUNT,IPC 数据卷volume功能特性 数据卷 是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定。数据卷 是被设计用来持久化数据的 对于数据卷你可以理解为NFS中的哪个分享出来的挂载点,指宿主机共享的目录。 主要有如下的功能和特性 • 容器中数据的持久存储 • 容器间的资源共享 • 容器的迁移(分布式) • 对数据卷的修改会立马生效 • 对数据卷的更新,不会影响镜像 • 数据卷默认会一直存在,即使容器被删除 (注意docker自主管理的会被删除,容器删除前一定要对数据卷进行备份) 实现数据卷 三种方式 1

落地案例|用 Kubernetes 将 Skytap 云微服务架构现代化

柔情痞子 提交于 2019-11-27 08:52:34
Skytap 是全球性公有云提供商,为客户提供保存、克隆复杂环境的性能服务。我们的客户包括在混合云上运行应用的企业,教育机构虚拟培训实验室之类,用户只需要便于管理的开发测试实验室,以及拥有各种各样的开发运维工作的机构。 我们之前以较快的速度拓展我们的业务——我们的用户基础和我们工程机构也在持续增长。令人兴奋!然而,要做到顺利地缩放应用和机构也是十分困难的,我们目前正在朝这个目标努力。当我们第一次开始关注工具设置的时候,发现传统的 OS 虚拟化并不是完成缩放目标的有效方法。我们发现虚拟机的持久性能鼓励工程师创建、维持定制的“ pet ”虚拟机;这跟我们愿望没太大关系,我们的愿望是用稳定的、可预测的状态来创建可以重复使用运行时间的环境。 Docker 和 Kubernetes 社区的增长跟我们的增长密切挂钩,而且目前社区内的爆炸式增长也帮助这些工具走向成熟。 在这篇文章中,我们会探索 Skytap 如何将 Kubernetes 作为服务中的关键组件在 Skytap 云上处理工作。 为了继续维持这种敏捷的速度,继续通过软件开发生命周期来启用组件所有权,我们又新增了工程师成员。这就要求我们程序的关键层面高度模块化,高度一致。以前,我们通过虚拟机和环境模版重新进行系统级别打包,但是随着规模的弹性伸缩,作为打包机制的容器变得越来越重要了,因为它相对轻便、运行环境控制精准。 除了打包灵活这个优点

docker笔记

我怕爱的太早我们不能终老 提交于 2019-11-27 08:17:41
docker是什么?能做什么   搭建测试环境,搭建基础服务,搭建执行环境 docker关键技术:    名称空间 cgroups 联合文件系统 Docker的三个核心:   image(镜像)、container(容器)、repository(仓库) docker基本命令 # 下载镜像 docker pull 镜像名 docker pull jenkins:2.60.3 #下载指定版本的镜像 # 查看所有下载过的镜像 docker images #删除镜像 docker rmi 镜像 id #后台启动容器 docker run -d jenkins/jenkins #后台启动容器且指定容器名称 docker run -d --name testjenkins jenkins/jenkins #将本地8000端口映射到容器8080端口 docker run -d --name testjenkins -p 8000:8080 jenkins/jenkins # 停止容器 docker stop 容器名 # 启动容器 docker start 容器名 # 进入容器的 shell 环境 docker exec - it 容器名 bash # 退出容器的 shell 环境  exit # 删除容器 docker rm 容器名 # 强制删除正在运行的容器 docker rm - f 容器名

Docker架构和原理

别来无恙 提交于 2019-11-27 07:17:11
1 Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 2 为什么用docker 1 更快速的交付和部署 2 高效的部署和扩容 3 更高的资源利用率 4 更简单的管理 3 docker引擎 docker引擎是一个c/s结构的应用,主要组件见下图: Server是一个常驻进程 REST API 实现了client和server间的交互协议 CLI 实现容器和镜像的管理,为用户提供统一的操作界面 4 Docker构架 Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。 4 docke核心技术 4.1 核心技术架构 4.2 名字空间(Namespaces) 名字空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。 1 pid 名字空间 不同用户的进程就是通过 pid 名字空间隔离开的,且不同名字空间中可以有相同 pid。所有的 LXC 进程在Docker 中的父进程为Docker进程,每个