Docker介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker主要解决什么问题?
Docker通过将运行环境和应用程序打包到一起,来解决部署环境依赖问题,真正做到跨平台的分发和使用。镜像(Image)
Docker镜像是一个容器的文件系统,提供容器运行时所需的程序、库、资源、配置等文件和运行时需要的一些配置参数( 如匿名卷、环境变量、用户等)。
Docker镜像是只读的,不包含任何动态数据,其内容在构建之后也不会被改变。
Docker利用UnionFS技术,设计为分层存储的架构,Docker镜像由多层文件系统联合组成。
镜像构建时,会一层层构建,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。容器(Container)
Linux的CGroup技术用来限定一个进程的资源使用,Namespace技术用来划分不同的命名空间。
容器的实质是进程,是基于CGroup技术和Namespace技术运行在操作系统上的一个拥有受限资源和单独命名空间的进程。
容器拥有自己的文件系统、网络配置、进程空间,甚至用户ID空间。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层。当容器运行时,会在镜像之上再加上一层可读可写层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
但数据卷(Volume)的生存周期独立于容器,容器消亡,数据不会丢失,所以文件写入操作应该使用数据卷( Volume)。仓库(Repository)
Docker Registry是提供集中的存储、分发镜像的服务。
一个 Docker Registry 中可以包含多个仓库( Repository) ;每个仓库可以包含多个标签( Tag) ;每个标签对应一个镜像。
通过 <仓库名>:<标签> 格式指定具体镜像。如果不给出标签,将以 latest 作为默认标签。Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。
最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry。
国内也有类似Docker Hub 的公开服务。例如:网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等。
用户还可以在本地搭建私有 Docker Registry。Docker加速器
Docker加速器是指国内的一些云服务商提供了针对 Docker Hub 的镜像服务( Registry Mirror)。
使用加速器会直接从国仓库内的地址下载 Docker Hub 的镜像。容器的UUID
UUID -- 通用唯一标识符(Universally Unique Identifier)
容器有三种方式来进行标识:长UUID、短UUID、Name。
UUID 是 Docker daemon 产生的,在一台主机上是唯一的,在创建容器的时候可以通过--name 来指定容器的名字,如果不指定会自动分配一个字符串名称。
通过docker ps、docker inspect等命令可以查看到容器的标识信息。Docker的优势
- 更高效的系统资源利用。Docker容器不需要进行硬件虚拟以及运行完整操作系统等额外开销
- 更快速的启动时间。Docker容器应用直接运行于宿主内核,无需启动完整的操作系统。
- 一致的运行环境。Docker镜像提供除内核外完整的运行时环境。
- 更轻松的迁移。执行环境的一致性,迁移应用更加容易。
- 更便利的持续交付和部署。一次创建或配置,任意环境正常运行。
- 更轻松的维护和扩展。Docker的分层存储以及镜像技术,复用、维护和扩展更简单。
Docker安装
本文环境:阿里云ECS Centos7.3
1.安装Docker:
yum install docker运行docker --version可以查看版本号并确认是否安装成功。
2.安装Docker-compose:
Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。
curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
运行docker-compose --version查看版本号并确定是否安装成功
3.启动Docker服务:
service docker start
4.常用Docker命令:
查看docker版本:docker version 显示docker系统的信息:docker info 检索image:docker search image_name 下载image : docker pull image_name 已下载镜像列表: docker images 删除镜像: docker rmi image_name 启动容器:docker run image_name
Sentry安装
官网介绍:Sentry是一个实时事件日志记录和汇集的日志平台,其专注于错误监控,以及提取一切事后处理所需的信息。他基于Django开发,目的在于帮助开发人员从散落在多个不同服务器上的日志文件里提取发掘异常,方便debug。Sentry由python编写,源码开放,性能卓越,易于扩展,目前著名的用户有Disqus, Path, mozilla, Pinterest等。它分为客户端和服务端,客户端就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web节目方便查看。
sentry是一个强大的分布式报错信息收集平台,图形化程度很高,可以帮助我们直观的发现当前部署的系统存在哪些问题。
更多介绍请看官网:https://sentry.io/
github:https://github.com/getsentry/sentry
在github上有一万多star,证明了它的优秀之处。
1.准备工作
官方提供了两种部署方式:
a. python
b. docker
但是最新官方已弃用python方式安装,而是提倡使用docker安装,所以我们使用docker方式来安装sentry服务端。
2.Dependencies
- docker版本需要在1.10+
- docker-compose
3.按照官方文档进行一下操作:https://docs.sentry.io/server/installation/docker/
按照文档第一步先去克隆 https://github.com/getsentry/onpremise 获取sentry
- setp1 克隆 git clone https://github.com/getsentry/onpremise.git 按照remind.md 一步步操作
- setp2 构建容器并创建数据库和sentry安装目录 mkdir -p data/{sentry,postgres}
- setp3 生成secret key并添加到docker-compose文件里 docker-compose run --rm web config generate-secret-key
- setp4 第四步时间有点长。其间会提示创建superuser,用户名是一个邮箱,这个邮箱今后会收到sentry相关的消息,口令可以随便设置,只要自己记得住就可以了。最后会在命令行输出一串乱七八糟的字符,这个就是secretkey,将这串字符复制到docker-compose.yml文件中并保存。
![]()
- setp5 重建数据库,并创建sentry超级管理员用户 sudo docker-compose run --rm web upgrade 创建用户,sentry新建的时候需要一个超级管理员用户
![]()
- step 6.启动所有的服务 docker-compose up -d
能到这里的话,你已经成功大半 了,恭喜。
可以运行 docker ps 查看正在运行的容器,接下来在浏览器中打开http://IP:9000 进行访问你的sentry后台了。
新建一个项目,选择客户端项目语言,我这儿是C#,可以参考https://github.com/getsentry/raven-csharp
新建控制台程序,通过nuget添加 SharpRaven
添加测试代码:
var ravenClient = new RavenClient("" ); try{
int i2 = 0 ; int i = 10 / i2; } catch (Exception exception) { ravenClient.Capture(newSentryEvent(exception)); }
接下来在面板上应该可以看见刚刚测试的exception
到这儿,基本都已经安装完毕,更多用法请参考官方文档
最后
安装这个也是花费了不少时间,毕竟一开始对 centos以及docker 都是小白,看了不少文章以及走了不少弯路,好在最后鼓捣出来了。
转载请注明出处 IT胡小帅:http://www.cnblogs.com/CallMeUncle/p/6843513.html