成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Dokku和Docker的完美配合

Aldous / 3856人閱讀

摘要:我并沒有直接在另外一個容器中安裝客戶端,而是直接在服務(wù)器上安裝之前的代碼是用來獲取指派給數(shù)據(jù)庫服務(wù)容器的地址,以便連接?,F(xiàn)在我們需要添加配置到現(xiàn)在我們可以啟動我們的新服務(wù)。原文鏈接譯文原文和的完美配合,一起來辯翻譯鐘最龍校對李穎杰

看到一篇不錯的文章,收藏一下:

【編者的話】本文作者介紹了如何在單機上將Dokku和Docker結(jié)合。Dokku是一個小型的PaaS平臺,只需使用Git將代碼push到對應(yīng)的倉庫上就能自動觸發(fā)部署,構(gòu)建過程非常簡單。但是Dokku對于用戶來說,相當于黑盒PaaS,作者想更多的控制部署流程,所以做了一番折騰。不過在我看來,作者的思路卻不是那么容易理解,雖然解決了問題,但卻也違背了初衷,你覺得了?歡迎一起討論。

Docker允許你以統(tǒng)一的方式來部署任何類型的應(yīng)用。而Dokku是一個基于Docker的小型PaaS平臺。你可以簡單的將代碼倉庫push到服務(wù)器上,然后讓Dokku來自動構(gòu)建并部署應(yīng)用。

盡管Dokku的自動構(gòu)建能力非常強大而且很酷,但有時候你想要更多的控制應(yīng)用的部署。例如,你可能想將應(yīng)用部署到一個容器里面,然后訪問另一個運行著數(shù)據(jù)庫的容器?;蛘吣阆胧褂肈ocker registry上豐富的Docker鏡像。

Dokku有很多社區(qū)貢獻的插件,這些插件可以很好的幫助你實現(xiàn)這些需求。但是,你可能仍然會覺得這工具不是很適合你要做事情。畢竟,Docker的最大優(yōu)勢之一就是它可以讓你在的生產(chǎn)環(huán)境和開發(fā)環(huán)境運行相似或者完全一樣的容器,這也就減少了部署的痛苦。使用Dokku意味著你要放棄了對應(yīng)用部署的控制。這對于簡單的應(yīng)用或者測試場景來說可以接受,但是對于比較重要的生產(chǎn)環(huán)境來說,你可能就需要奪回這個控制權(quán)。

現(xiàn)在我有一些項目需要部署,并且我覺得單臺服務(wù)器應(yīng)該足夠了。我使用預(yù)定義好的Docker鏡像在生產(chǎn)環(huán)境的服務(wù)器上部署這些項目,同時,我又想使用Dokku,因為它支持快速推送代碼到服務(wù)器。為此,我們專門研究了如何在單臺服務(wù)器上高效的結(jié)合Dokku和Docker。

配置服務(wù)器

我在DigitalOcean上用預(yù)先定義好的Dokku鏡像創(chuàng)建了一個VPS。令人欣喜的是其版本十分的新,Docker和Dokku都是最新的穩(wěn)定版本。如果你有自己的服務(wù)器,你可以像這樣安裝最新的Docker,然后跟著安裝說明安裝Dokku。

使用Dokku來部署一個簡單的應(yīng)用

在安裝好Dokku后,你需要指定應(yīng)用部署的域名,并將域名如mydomain.com寫到/home/dokku/VHOST。

現(xiàn)在Dokku運行起來了,我們需要注冊開發(fā)機上的SSH key,這樣我們才好將代碼push到Dokku上。在我們的開發(fā)機器上運行下面的命令:

cat .ssh/id_rsa.pub| ssh [email protected] sshcommand acl-add dokku myname

(myname可以用來追蹤你的ssh key,方便之后你想刪除)

現(xiàn)在我們可以開始使用Dokku了。要試試是否正??梢詸z出(check out)在本地開發(fā)環(huán)境的一個Node.js的項目,然后將其push到Dokku:

git clone [email protected]:heroku/node-js-sample.git
cd node-js-sample
git remote add dokku [email protected]:test
git push dokku master

現(xiàn)在你應(yīng)該能看到如下輸出:

Counting objects: 381, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (308/308), done.
Writing objects: 100% (381/381), 210.18 KiB | 0 bytes/s, done.
Total 381 (delta 49), reused 373 (delta 44)
-----> Cleaning up ...
-----> Building test ...
-----> Adding BUILD_ENV to build environment...
-----> Node.js app detected
-----> Requested node range: 0.10.x
-----> Resolved node version: 0.10.35
-----> Downloading and installing node
-----> Exporting config vars to environment
-----> Installing dependencies

...

-----> Running post-deploy
-----> Creating new /home/dokku/test/VHOST...
-----> Configuring test.mydomain.com...
-----> Creating http nginx.conf
-----> Running nginx-pre-reload
   Reloading nginx
=====> Application deployed:

http://test.mydomain.com

正如輸出中說的一樣,你的應(yīng)用現(xiàn)在部署到了http://test.mydomain.com!

用Docker來部署一個WordPress博客

現(xiàn)在我們已經(jīng)知道了如何使用Dokku構(gòu)建應(yīng)用?,F(xiàn)在讓我們來試試部署一個預(yù)先定義好的Docker鏡像:我們將要用官方的WordPress Docker鏡像來部署一個博客。但在我們搭建一個新的博客之前,你首先需要搭建好一個MySQL數(shù)據(jù)庫服務(wù)器,我是這么做的:

docker run --name mysql --restart=always 
   -e MYSQL_ROOT_PASSWORD=some-secret-string -d mariadb

命令中的--restart=always選項是用來保證Docker守護進程在容器出錯或者重啟后自動啟動容器。

如果WordPress容器有訪問數(shù)據(jù)庫服務(wù)器的root權(quán)限,那它就可以自己設(shè)置數(shù)據(jù)庫,但是我想自己來配置。我并沒有直接在另外一個容器中安裝MySQL客戶端,而是直接在服務(wù)器上安裝:

apt-get install -qqy mysql-client
mysql -h`docker inspect --format "{{ .NetworkSettings.IPAddress }}" mysql` 
  -uroot -p

之前的代碼是用來獲取指派給數(shù)據(jù)庫服務(wù)容器的IP地址,以便連接?,F(xiàn)在我可以手動為我的新博客搭建好一個數(shù)據(jù)庫:

CREATE DATABASE myblog;
CREATE USER "myblog"@"%" IDENTIFIED BY "another-password";
GRANT ALL ON myblog.* TO "myblog"@"%";
FLUSH PRIVILEGES;

現(xiàn)在我們可以開始部署WordPress博客了:

docker run --name myblog --link mysql:mysql 
   -e WORDPRESS_DB_USER=myblog -e WORDPRESS_DB_PASSWORD=another-password 
   -e WORDPRESS_DB_NAME=myblog -e VIRTUAL_HOST=blog.mydomain.com 
   --restart=always -d wordpress

現(xiàn)在我們的容器已經(jīng)開始運行,我們可以用docker ps來確認。然而,我們只能在服務(wù)器上直接訪問80端口,VIRTUAL_HOST的環(huán)境變量顯示了我們真正想要訪問的地址,但是這還不能用。

用docker-gen來做Nginx的反向代理

在服務(wù)器上已經(jīng)有Nginx運行了,因為Dokku的運行依賴它?,F(xiàn)在找到我們博客容器的IP,然后在Nignx中配置好域名和IP的對應(yīng)關(guān)系,這應(yīng)該不難。問題在于如果博客容器重啟了,例如服務(wù)器重啟之后,其IP地址就可能改變,然后我們又需要手動更新Nginx的配置。

幸運的是,有人曾經(jīng)走過一步,經(jīng)歷過這樣的折磨,然后弄出了解決方法:docker-gen。這是一個自動構(gòu)建然后更新所有運行著的容器的配置文件的工具。

讓我們安裝這個神奇的工具吧:

cd /tmp
wget https://github.com/jwilder/docker-gen/releases/download/0.3.6/docker-gen-linux-amd64-0.3.6.tar.gz
tar xzf docker-gen-linux-amd64-0.3.6.tar.gz
mv docker-gen /etc/nginx/docker-gen

現(xiàn)在我們需要為我們想生成的Nginx配置文件創(chuàng)建一個模板。我的配置文件基于jwilder的nginx-proxy,將配置寫到/etc/nginx/docker.template?,F(xiàn)在,我們可以運行docker-gen,但是如果我們需要在服務(wù)器重啟的時候自動執(zhí)行此命令,那我們需要將docker-gen安裝成一個service。要做到這一點,我們可以將以下腳本寫到/etc/nginx/docker-gen-service:

/etc/nginx/docker-gen-service:
#!/bin/bash
/etc/nginx/docker-gen -only-exposed -watch -notify "service nginx reload" 
  /etc/nginx/docker.template /etc/nginx/sites-enabled/docker_containers

然后讓其可執(zhí)行:chmod +x /etc/nginx/docker-gen-service?,F(xiàn)在我們需要添加upstart配置到/etc/init/docker-nginx.conf:

# docker-nginx - Nginx config generator for Docker containers

description "Nginx config generator for Docker containers"
author "Somebody "
When to start the service

start on filesystem and started docker
When to stop the service

stop on runlevel [016]
Automatically restart process if crashed

respawn
Send output to logfile

console log
Run before process

pre-start script
[ -d /etc/nginx/certs ] || mkdir -p /etc/nginx/certs
end script
Start the process

exec /etc/nginx/docker-gen-service

現(xiàn)在我們可以啟動我們的新服務(wù):initctl start docker-nginx。docker-gen會看著我們所有的Dockder容器,然后更新Nginx文件。它會檢查每一個容器的VIRTUAL_HOST環(huán)境變量,還記得我們在的啟動WordPress容器的時候,我們指定了-e VIRTUAL_HOST=blog.mydomain.com選項(如果你想將多個域名指向同一個容器,你可以用逗號分隔:VIRTUAL_HOST=blog.a.com,test.b.com)。因而假設(shè)我們的DNS配置是正確的,我們現(xiàn)在可以訪問http://blog.mydomain.com,然后看到熟悉的WordPress的初始化配置界面。

原文鏈接:Dokku and Docker on the same server: power and control
譯文原文:Dokku和Docker的完美配合,一起來辯
(翻譯:鐘最龍 校對:李穎杰)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26386.html

相關(guān)文章

  • 進軍Docker 1.12,將代理與Swarm完美整合

    摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫上線并開始運行后,我們接下來部署后端?,F(xiàn)在,會幫助我們完成全部負載均衡工作。這樣所有來自代理的請求都將指向網(wǎng)絡(luò),并由后者跨越全部實例執(zhí)行負載均衡。 七夕大家過得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當中部署任意數(shù)量的服務(wù),但這并不代表各項服務(wù)全部可為用戶所訪問。而新的Swarm網(wǎng)絡(luò)使得各項服務(wù)之間能夠更為輕松...

    cartoon 評論0 收藏0
  • 如何利用Docker構(gòu)建基于DevOps全自動CI

    摘要:三私有代碼庫阿里云使用引言使用肯定離不開和代碼的集成。本著代碼可靠性,服務(wù)器穩(wěn)定性,功能擴展性綜合對比,我們選擇使用阿里云的庫。 來自用戶的DevOps實踐分享,分享從開發(fā)代碼到生產(chǎn)環(huán)境部署的一條龍操作的實踐及經(jīng)驗, 包含工具技術(shù)的選型及考量、私有代碼庫與私有鏡像庫的應(yīng)用等。 (一)容器服務(wù)的Rancher選型 1、為什么說是下一代核心技術(shù) 從互聯(lián)網(wǎng)的多次變革說起,早期的C/S架構(gòu),到...

    stormzhang 評論0 收藏0
  • 前端性能優(yōu)化與上線

    摘要:看下狀態(tài)可以看到我已經(jīng)有一些鏡像了我已經(jīng)刪除了拉鏡像正常即可,中間那段是中國鏡像源,我們成功下來了的鏡像。攻破像我這樣屌絲的服務(wù)器一般都買的,大的資源文件不住,一個動輒的文件這很蛋疼,不上很難受。 4000字長文,多圖預(yù)警?。?!流量慎入??! 性能優(yōu)化 - 屌絲前端性能優(yōu)化、上線一條龍 大家好我又來了,本章給大家?guī)淼膬?nèi)容是:上線和上線后的性能優(yōu)化 項目地址 實戰(zhàn)預(yù)覽地址 實戰(zhàn)項目地址...

    wupengyu 評論0 收藏0
  • 使用URLOS低門檻快速開發(fā)分發(fā)docker應(yīng)用,未來微服務(wù)發(fā)展大趨勢

    摘要:使用技術(shù)可以幫助企業(yè)快速水平擴展服務(wù),從而到達彈性部署業(yè)務(wù)的能力。例如我們要安裝然后使用查看我們的擴展是否安裝成功。啟動和,檢查是否正常運行。單容器運行若勾選,則表示安裝此應(yīng)用時,每個服務(wù)只運行一個容器。 使用Docker技術(shù)可以幫助企業(yè)快速水平擴展服務(wù),從而到達彈性部署業(yè)務(wù)的能力。在云服務(wù)概念興起之后,Docker的使用場景和范圍進一步發(fā)展,如今在微服務(wù)架構(gòu)越來越流行的情況下,微服務(wù)...

    張巨偉 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<