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