使用docker-compose 大殺器來部署服務(wù) 上(轉(zhuǎn)載)

轉(zhuǎn)自:https://www.cnblogs.com/neptunemoon/p/6512121.html
我們都聽過或者用過 docker,然而使用方式卻是僅僅用手動的方式,這樣去操作 docker 還是很原始。 好吧,可能在小白的眼中噼里啪啦的對著 term 一頓操作會很拉風(fēng),但是高手很不屑!在高手眼里…too young, too low. 因為高手都是自動化的,今天就稍微介紹下自動化工具,也就是大殺器 docker-compose

使用docker-compose 大殺器來部署服務(wù)?上

????先從 docker 說起

????????docker 簡介

????????為什么說 docker 是快速部署

????????????好了, 我們進化到,快速1.0 時代

????????????于是, 我們又進化了, 快速2.0時代

????????????于是,我們再次加入光榮的進化, 快速3.0時代

????????docker 安裝

????????docker 的一些概念

鏡像

性能損耗

容器

hub

docker 簡單使用

搜索鏡像

下載鏡像

helloworld

我常用的 docker 命令

登錄

查看容器

查找鏡像

下載鏡像

刪除鏡像

開始

看日志

停止一個容器示例

查看容器狀態(tài)

格式

更快更好更強

docker-compose 簡介

docker-compose 是什么

為什么要用 docker-compose,他解決了什么

那么哪里可以買到呢?

從一個小例開始

先安裝吧

helloworld

服務(wù)更新

軟升級

硬升級

從日志得到需要的信息

直接使用 logs

使用類似linux tail 命令

docker-compose 常用命令

docker-compose 如何配置

depends_on: 依賴

image: 鏡像

environment 環(huán)境變量

ports 端口映射

volumes 文件映射

docker-compose 需要注意的

針對需求開始部署了

設(shè)定一個需求

簡單的單機部署

python 環(huán)境搭建

django 環(huán)境搭建

docker-compose.yml 寫作

django 構(gòu)建工程

django 數(shù)據(jù)庫設(shè)定

開始運行

數(shù)據(jù)庫同步

集群部署

使用docker-compose 大殺器來部署服務(wù)?下

參考

先從 docker 說起

我知道可能有些看到這篇文章的朋友沒有了解或者使用過 docker,那我就在這里做一個小小的介紹,已經(jīng)有過了解的朋友請直接從docker-compose部分看起.

docker 簡介

想要理解 docker 是啥,就要先說說 docker 可以解決啥

一句話來說

docker 是一種容器技術(shù),作用是用來快速部署服務(wù)

為什么說 docker 是快速部署

我們做一個項目,最不想面對的不是開發(fā),也不是調(diào)試,而是部署!!!!

比如你這個機器上的環(huán)境是 python3 你用另一個機器上卻是 python2 或者壓根就沒有 python 環(huán)境。

好了,這個時候你怎么解決呢。 對,只要去新機器上你就要部署 python。

嗯~ 好吧, 部署 python 就 python,但是你的項目里面還要用到 MySQL,好的沒問題, 你又要去用 pip 去安裝 python 的 mysql 模塊。 哦對了, 我記我們的項目里面還有 redis, 兩種非對稱加密,還有三方隊列, 哦, 還有阿里云的接口,對對對對對對哦。 亂七八糟的東西真的好多,搞完了幾個小時沒有了,遇到網(wǎng)絡(luò)卡了,那就更沒有譜了。

好了, 我們進化到,快速1.0 時代

我們把要安裝的東西全都放進離線安裝包里面,再寫個 bash 腳本

對,這種事情真的有過。 部署全靠一個 bash 腳本,畢竟不用手動了么。 可是就是苦了寫腳本的人,我就寫過一個腳本寫了好久。

于是, 我們又進化了, 快速2.0時代

我們把整個系統(tǒng)做成了鏡像,存在了光盤里面,每當要架設(shè)的時候趕快用鏡像做出一個新的系統(tǒng)!

可能經(jīng)歷過的自然會懂,還特么要做鏡像啊,離機房遠咋辦啊!!我們做游戲,開服快,更新更快!我們版本更新過快怎么辦啊!!我們還要刻刻刻么? 我們的 tornado 又更新了,我去,我們客戶端的 protobuf 也更新了,可是我們有100臺服務(wù)器啊,為了這一點小小的東西更新么?西八!

于是,我們再次加入光榮的進化, 快速3.0時代

我們把服務(wù)裝進了 docker 中

我們把做好的鏡像,一個命令 pull 了下來,嗯,蠻快又一個命令?docker start XXXXXX?服務(wù)起來了。哦,你說多服務(wù)?好吧那就寫個docker-compose.file吧。 嗯哼? 你說集群部署 來來來, 有Kubernetes、Mesos,F(xiàn)leet和Swarm 任君挑選,不好用不要錢。

docker 是部署的最佳輔助,即使你爛成渣渣,docker 也可以扶你上王者。

docker 安裝

很簡單?docker官網(wǎng)

Get docker 之后, 有圖型系統(tǒng)(windows 之類)的有下一步,下一步。 有 term 接口的。 有?apt-get?之類的軟件管理。

安裝非常簡單,不值得一說。

docker 的一些概念

鏡像

對!就和我上面說的使用光盤拷貝已經(jīng)有的鏡像一樣,我們的鏡像是指一個系統(tǒng)的鏡像

我們的鏡像都是基于 linux 的準確來說是基于 ubuntu 的。?

docker 鏡像可以理解為,你在 win 下用ghost 拷貝出來的磁盤鏡像。不過他是 linux 版的。

性能損耗

得益于現(xiàn)在的 linux 內(nèi)核的 namespace, 我們可以擁有各種直達內(nèi)耗的容器可以用,你在 docker 中的進程其實進程就是直接的宿主機進程,這一切都在系統(tǒng)啟動 clone 函數(shù)的時候就決定了, 所以談不上性能損耗。

容器

容器本身就是我們最重要的概念,我們使用 docker 要做的就是容器這個東西。

簡單來說容器是一個鏡像的實例

更通俗來說容器就像你用 vm 或者 virtualbox 使用鏡像創(chuàng)建的一個虛擬機實例

hub

就是鏡像倉庫。

如果你寫代碼,你肯定就知道 github,我們把代碼托管到 github 之上。

如果我們部署,我肯定就要用 dockerhub, 我們把鏡像托管到?docker hub?上(當然我們也可以假設(shè),或者是用別人假設(shè)的hub)

國內(nèi)有很多三方 dockerhub 服務(wù)器, 有阿里云,網(wǎng)易蜂巢,有容云,daocloud 等等等等

至于國外那就更多了,如果非要推薦一家,那就是 amazon 了,畢竟云服務(wù)他們家宇宙最強,沒有之一,沒有對手。

docker 簡單使用

搜索鏡像

docker search xxx

比如我要架設(shè)一個 wordpress,我直接就用

docker search wordpress

第一列就是你可以選擇使用的鏡像,你當然可以自己制作鏡像,而且很容易,但是如果我們?nèi)腴T的話就直接用別人做好的吧。

下載鏡像

我直接用第一個吧

git pull wordpress

這個是在下載鏡像的過程中


下載完成


helloworld

程序員的老慣例了


這句其實就相當于你的鏡像

做到 helloworld 了你就算是入門了。哈哈哈。

推薦一個寫很有層次感的入門docker入門教程

我常用的 docker 命令

你可以使用幫助看一個命令的大概


登錄

登錄你自己的 dockerhub 賬戶,要去注冊哦

來docker hub注冊啊

docker login

查看容器

查看你已經(jīng)下載好的鏡像

docker images

查找鏡像

docker search XX

下載鏡像

docker pull xx

刪除鏡像

docker rmi xx

開始

docker run 你的鏡像

看日志

docker logs 你的容器

停止一個容器示例

docker stop 你的容器

查看容器狀態(tài)

docker stats 你的容器

格式

基本上都是這個格式 ,根據(jù)上面寫好的注釋,很容易去使用

更快更好更強

????使用 dockerfile

????使用 crontab

????使用 supervisr

略, 這個要扯起來就太長了

docker-compose 簡介

一句話

docker-compose 是用來做docker 的多容器控制

docker-compose 是什么

docker-compose 是一個用來把 docker 自動化的東西。

有了 docker-compose 你可以把所有繁復(fù)的 docker 操作全都一條命令,自動化的完成。

為什么要用 docker-compose,他解決了什么

用通俗的語言來說,我們平時操作 docker 還是很原始的一系列動作,你手動使用 docker 的動作可以拆分成

找到一個系統(tǒng)鏡像 // docker search

安裝好 vm 或者 virtual box // apt-get install docker

在 vm 中安裝鏡像 // docker run -d -it 你的鏡像

略..

這是最小的動作, 如果你要映射硬盤,設(shè)置nat網(wǎng)絡(luò)或者橋接網(wǎng)絡(luò),等等…你就要做更多的 docker 操作, 這顯然是非常沒有效率的。

但是我們寫在 docker-compose.file 里面就很好了。 你只需要寫好后 只運行一句

docker-compose up -d

一切都是那么的簡單

那么哪里可以買到呢?

你要你能上網(wǎng),到處都可以得到他。

我自己的機器上有 python&pip 的環(huán)境,所以我的安裝非常簡單

先確定你是不是安裝了 docker

沒有安裝請看上面的文章

我的環(huán)境是

linux-ubuntu:python2:pip

所以我的安裝

pip install docker-compose

如此簡單

從一個小例開始


先安裝吧

如果你和我的環(huán)境相同,請直接看我的 docker-compose 安裝

如果是別的話,別擔(dān)心,這里有

安裝指南

helloworld


服務(wù)更新

軟升級

還比如

你的 nginx 更新了配置文件之后

docker-compose restart nginx

硬升級

docker-compose stop

升級你的程序

你要重新

docker-compose up

從日志得到需要的信息

直接使用 logs

docker-compose logs nginx

歐 shit 直接給我屏幕刷爆了

使用類似linux tail 命令

我們的 tial 命令一般是什么樣的呢

tail -f xx.file

我們的docker-compose log 卻是這樣

root@ubuntu:~# docker-compose logs -f --tail 10 nginx

最近的10條開始


docker-compose 常用命令


解釋一下

docker-compose 如何配置

先看看我自己寫的一個 docker-compose.yml


version:docker-compose的版本

nginx 和 mariadb,wordpress 是要啟動的三個服務(wù)

順序不是重要的,我們看見wordpress中有個?depends_on:?的屬性

depends_on: 依賴

代表wordpress 依賴于

- mariadb- nginx

兩個服務(wù), 所以他們兩個會先啟動

image: 鏡像

就是你的 docker 鏡像

我們用

docker search mariadb

找到我們需要的鏡像


好了,就是bitnami/mariadb了

如果你看見有的么有 images ,而是一個 build, 那個說明這個不是用鏡像的,而是使用 dockerfile 去構(gòu)建容器。

如果要說 dockerfile 又要花很久了

想了解 dockerfile 可以看這里

編寫Dockerfile

environment 環(huán)境變量

這個是在好理解不過的了。

不過這和我們程序語言設(shè)計層面的還是不一樣的,這個是容器層面的環(huán)境變量。

如果我們寫程序做一些邏輯判斷的時候,肯定會使用

比如我們判斷現(xiàn)在的編譯器,我們會使用

#if __GNUC__?或者?#if _MSC_VER

相應(yīng)的,我們的容器里面肯定也有這樣的邏輯,我們經(jīng)常使用環(huán)境變量來傳值,或者定義一個行為。寫過程序的人都懂。

ports 端口映射

映射本機還有鏡像的端口。這個沒有什么好說的。

volumes 文件映射

有兩種格式,

可以對應(yīng) docker 操作中的 -v my/path/:/docker/path

還可以使用單方面的 -v /path?

這樣的話 就相當于 一個匿名映射, 其實還是在本機有對應(yīng)目錄的。

使用docker inspect -f {{.Volumes}} /path?可以看到詳細信息

相對這個了解更多的?深入理解Docker Volume

docker-compose 需要注意的

我根據(jù)我自己的體驗,給出幾點需要注意的

不要把 docker 當做數(shù)據(jù)容器來使用,數(shù)據(jù)一定要用 volumes 放在容器外面

不要把 docker-compose 文件暴露給別人, 因為上面有你的服務(wù)器信息

多用 docker-compose 的命令去操作, 不要用 docker 手動命令&docker-compose 去同時操作

寫一個腳本類的東西,自動備份docker 映射出來的數(shù)據(jù)。

不要把所有服務(wù)都放在一個 docker 容器里面

針對需求開始部署了

設(shè)定一個需求

我假定現(xiàn)在我們的需求是做一個博客系統(tǒng)

我們的第一印象肯定是 wordpress, 沒有比這個更專業(yè)的了, 當然還有很多,我們使用 django 吧

用過 django 的肯定會知道, django 一開始是要構(gòu)造工程的。

還有數(shù)據(jù)之類的

我們擬訂一個過程

python 環(huán)境搭建

django 環(huán)境搭建

docker-compose.yml 寫作

django 構(gòu)建工程

django 數(shù)據(jù)庫設(shè)定

開始運行

數(shù)據(jù)庫同步

簡單的單機部署

python 環(huán)境搭建

Dockerfile

ENV PYTHONUNBUFFERED 1

RUN mkdir /root/testdjango/code? ? #都寫上絕對路徑, 注意不要跟我一樣。

WORKDIR /root/testdjango/code

ADD requirements.txt /root/testdjango/code/

RUN pip install -r requirements.txt

ADD . /root/testdjango/code/

python 的pip 有一個requirements.txt?文件來專門放依賴環(huán)境的

django 環(huán)境搭建

requirements.txt

Djangopsycopg2

docker-compose.yml 寫作


django 構(gòu)建工程

docker-compose run web django-admin.py startproject docker_composeexample .

django 數(shù)據(jù)庫設(shè)定

我們做了 volumes, django 的東西在本地有映射。

做過 django 的人都知道 ,我們的設(shè)定都在?settings.py?中


開始運行

docker-compose up

數(shù)據(jù)庫同步

docker-compose run web python manage.py syncdb

集群部署

敬請期待本文的下一篇

使用docker-compose 大殺器來部署服務(wù)?下

參考

Docker Compose—簡化復(fù)雜應(yīng)用的利器

docker-compose 安裝指南

使用Docker Compose管理多個容器

docker 入門到實踐

阿里云上部署和使用Docker Swarm集群

使用Docker Compose部署基于Sentinel的高可用Redis集群

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容