摘要:我并沒(méi)有直接在另外一個(gè)容器中安裝客戶端,而是直接在服務(wù)器上安裝之前的代碼是用來(lái)獲取指派給數(shù)據(jù)庫(kù)服務(wù)容器的地址,以便連接?,F(xiàn)在我們需要添加配置到現(xiàn)在我們可以啟動(dòng)我們的新服務(wù)。原文鏈接譯文原文和的完美配合,一起來(lái)辯翻譯鐘最龍校對(duì)李穎杰
看到一篇不錯(cuò)的文章,收藏一下:
【編者的話】本文作者介紹了如何在單機(jī)上將Dokku和Docker結(jié)合。Dokku是一個(gè)小型的PaaS平臺(tái),只需使用Git將代碼push到對(duì)應(yīng)的倉(cāng)庫(kù)上就能自動(dòng)觸發(fā)部署,構(gòu)建過(guò)程非常簡(jiǎn)單。但是Dokku對(duì)于用戶來(lái)說(shuō),相當(dāng)于黑盒PaaS,作者想更多的控制部署流程,所以做了一番折騰。不過(guò)在我看來(lái),作者的思路卻不是那么容易理解,雖然解決了問(wèn)題,但卻也違背了初衷,你覺(jué)得了?歡迎一起討論。
Docker允許你以統(tǒng)一的方式來(lái)部署任何類型的應(yīng)用。而Dokku是一個(gè)基于Docker的小型PaaS平臺(tái)。你可以簡(jiǎn)單的將代碼倉(cāng)庫(kù)push到服務(wù)器上,然后讓Dokku來(lái)自動(dòng)構(gòu)建并部署應(yīng)用。
盡管Dokku的自動(dòng)構(gòu)建能力非常強(qiáng)大而且很酷,但有時(shí)候你想要更多的控制應(yīng)用的部署。例如,你可能想將應(yīng)用部署到一個(gè)容器里面,然后訪問(wèn)另一個(gè)運(yùn)行著數(shù)據(jù)庫(kù)的容器。或者你想使用Docker registry上豐富的Docker鏡像。
Dokku有很多社區(qū)貢獻(xiàn)的插件,這些插件可以很好的幫助你實(shí)現(xiàn)這些需求。但是,你可能仍然會(huì)覺(jué)得這工具不是很適合你要做事情。畢竟,Docker的最大優(yōu)勢(shì)之一就是它可以讓你在的生產(chǎn)環(huán)境和開發(fā)環(huán)境運(yùn)行相似或者完全一樣的容器,這也就減少了部署的痛苦。使用Dokku意味著你要放棄了對(duì)應(yīng)用部署的控制。這對(duì)于簡(jiǎn)單的應(yīng)用或者測(cè)試場(chǎng)景來(lái)說(shuō)可以接受,但是對(duì)于比較重要的生產(chǎn)環(huán)境來(lái)說(shuō),你可能就需要奪回這個(gè)控制權(quán)。
現(xiàn)在我有一些項(xiàng)目需要部署,并且我覺(jué)得單臺(tái)服務(wù)器應(yīng)該足夠了。我使用預(yù)定義好的Docker鏡像在生產(chǎn)環(huán)境的服務(wù)器上部署這些項(xiàng)目,同時(shí),我又想使用Dokku,因?yàn)樗С挚焖偻扑痛a到服務(wù)器。為此,我們專門研究了如何在單臺(tái)服務(wù)器上高效的結(jié)合Dokku和Docker。
配置服務(wù)器我在DigitalOcean上用預(yù)先定義好的Dokku鏡像創(chuàng)建了一個(gè)VPS。令人欣喜的是其版本十分的新,Docker和Dokku都是最新的穩(wěn)定版本。如果你有自己的服務(wù)器,你可以像這樣安裝最新的Docker,然后跟著安裝說(shuō)明安裝Dokku。
使用Dokku來(lái)部署一個(gè)簡(jiǎn)單的應(yīng)用在安裝好Dokku后,你需要指定應(yīng)用部署的域名,并將域名如mydomain.com寫到/home/dokku/VHOST。
現(xiàn)在Dokku運(yùn)行起來(lái)了,我們需要注冊(cè)開發(fā)機(jī)上的SSH key,這樣我們才好將代碼push到Dokku上。在我們的開發(fā)機(jī)器上運(yùn)行下面的命令:
cat .ssh/id_rsa.pub| ssh root@mydomain.com sshcommand acl-add dokku myname
(myname可以用來(lái)追蹤你的ssh key,方便之后你想刪除)
現(xiàn)在我們可以開始使用Dokku了。要試試是否正??梢詸z出(check out)在本地開發(fā)環(huán)境的一個(gè)Node.js的項(xiàng)目,然后將其push到Dokku:
git clone git@github.com:heroku/node-js-sample.git cd node-js-sample git remote add dokku dokku@mydomain.com: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
正如輸出中說(shuō)的一樣,你的應(yīng)用現(xiàn)在部署到了http://test.mydomain.com!
用Docker來(lái)部署一個(gè)WordPress博客現(xiàn)在我們已經(jīng)知道了如何使用Dokku構(gòu)建應(yīng)用?,F(xiàn)在讓我們來(lái)試試部署一個(gè)預(yù)先定義好的Docker鏡像:我們將要用官方的WordPress Docker鏡像來(lái)部署一個(gè)博客。但在我們搭建一個(gè)新的博客之前,你首先需要搭建好一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)器,我是這么做的:
docker run --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=some-secret-string -d mariadb
命令中的--restart=always選項(xiàng)是用來(lái)保證Docker守護(hù)進(jìn)程在容器出錯(cuò)或者重啟后自動(dòng)啟動(dòng)容器。
如果WordPress容器有訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器的root權(quán)限,那它就可以自己設(shè)置數(shù)據(jù)庫(kù),但是我想自己來(lái)配置。我并沒(méi)有直接在另外一個(gè)容器中安裝MySQL客戶端,而是直接在服務(wù)器上安裝:
apt-get install -qqy mysql-client mysql -h`docker inspect --format "{{ .NetworkSettings.IPAddress }}" mysql` -uroot -p
之前的代碼是用來(lái)獲取指派給數(shù)據(jù)庫(kù)服務(wù)容器的IP地址,以便連接?,F(xiàn)在我可以手動(dòng)為我的新博客搭建好一個(gè)數(shù)據(jù)庫(kù):
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)開始運(yùn)行,我們可以用docker ps來(lái)確認(rèn)。然而,我們只能在服務(wù)器上直接訪問(wèn)80端口,VIRTUAL_HOST的環(huán)境變量顯示了我們真正想要訪問(wèn)的地址,但是這還不能用。
用docker-gen來(lái)做Nginx的反向代理在服務(wù)器上已經(jīng)有Nginx運(yùn)行了,因?yàn)镈okku的運(yùn)行依賴它?,F(xiàn)在找到我們博客容器的IP,然后在Nignx中配置好域名和IP的對(duì)應(yīng)關(guān)系,這應(yīng)該不難。問(wèn)題在于如果博客容器重啟了,例如服務(wù)器重啟之后,其IP地址就可能改變,然后我們又需要手動(dòng)更新Nginx的配置。
幸運(yùn)的是,有人曾經(jīng)走過(guò)一步,經(jīng)歷過(guò)這樣的折磨,然后弄出了解決方法:docker-gen。這是一個(gè)自動(dòng)構(gòu)建然后更新所有運(yùn)行著的容器的配置文件的工具。
讓我們安裝這個(gè)神奇的工具吧:
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)建一個(gè)模板。我的配置文件基于jwilder的nginx-proxy,將配置寫到/etc/nginx/docker.template。現(xiàn)在,我們可以運(yùn)行docker-gen,但是如果我們需要在服務(wù)器重啟的時(shí)候自動(dòng)執(zhí)行此命令,那我們需要將docker-gen安裝成一個(gè)service。要做到這一點(diǎn),我們可以將以下腳本寫到/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)在我們可以啟動(dòng)我們的新服務(wù):initctl start docker-nginx。docker-gen會(huì)看著我們所有的Dockder容器,然后更新Nginx文件。它會(huì)檢查每一個(gè)容器的VIRTUAL_HOST環(huán)境變量,還記得我們?cè)诘膯?dòng)WordPress容器的時(shí)候,我們指定了-e VIRTUAL_HOST=blog.mydomain.com選項(xiàng)(如果你想將多個(gè)域名指向同一個(gè)容器,你可以用逗號(hào)分隔:VIRTUAL_HOST=blog.a.com,test.b.com)。因而假設(shè)我們的DNS配置是正確的,我們現(xiàn)在可以訪問(wèn)http://blog.mydomain.com,然后看到熟悉的WordPress的初始化配置界面。
原文鏈接:Dokku and Docker on the same server: power and control
譯文原文:Dokku和Docker的完美配合,一起來(lái)辯
(翻譯:鐘最龍 校對(duì):李穎杰)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/26386.html
摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫(kù)上線并開始運(yùn)行后,我們接下來(lái)部署后端?,F(xiàn)在,會(huì)幫助我們完成全部負(fù)載均衡工作。這樣所有來(lái)自代理的請(qǐng)求都將指向網(wǎng)絡(luò),并由后者跨越全部實(shí)例執(zhí)行負(fù)載均衡。 七夕大家過(guò)得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當(dāng)中部署任意數(shù)量的服務(wù),但這并不代表各項(xiàng)服務(wù)全部可為用戶所訪問(wèn)。而新的Swarm網(wǎng)絡(luò)使得各項(xiàng)服務(wù)之間能夠更為輕松...
摘要:三私有代碼庫(kù)阿里云使用引言使用肯定離不開和代碼的集成。本著代碼可靠性,服務(wù)器穩(wěn)定性,功能擴(kuò)展性綜合對(duì)比,我們選擇使用阿里云的庫(kù)。 來(lái)自用戶的DevOps實(shí)踐分享,分享從開發(fā)代碼到生產(chǎn)環(huán)境部署的一條龍操作的實(shí)踐及經(jīng)驗(yàn), 包含工具技術(shù)的選型及考量、私有代碼庫(kù)與私有鏡像庫(kù)的應(yīng)用等。 (一)容器服務(wù)的Rancher選型 1、為什么說(shuō)是下一代核心技術(shù) 從互聯(lián)網(wǎng)的多次變革說(shuō)起,早期的C/S架構(gòu),到...
摘要:看下狀態(tài)可以看到我已經(jīng)有一些鏡像了我已經(jīng)刪除了拉鏡像正常即可,中間那段是中國(guó)鏡像源,我們成功下來(lái)了的鏡像。攻破像我這樣屌絲的服務(wù)器一般都買的,大的資源文件不住,一個(gè)動(dòng)輒的文件這很蛋疼,不上很難受。 4000字長(zhǎng)文,多圖預(yù)警!?。×髁可魅耄?! 性能優(yōu)化 - 屌絲前端性能優(yōu)化、上線一條龍 大家好我又來(lái)了,本章給大家?guī)?lái)的內(nèi)容是:上線和上線后的性能優(yōu)化 項(xiàng)目地址 實(shí)戰(zhàn)預(yù)覽地址 實(shí)戰(zhàn)項(xiàng)目地址...
摘要:使用技術(shù)可以幫助企業(yè)快速水平擴(kuò)展服務(wù),從而到達(dá)彈性部署業(yè)務(wù)的能力。例如我們要安裝然后使用查看我們的擴(kuò)展是否安裝成功。啟動(dòng)和,檢查是否正常運(yùn)行。單容器運(yùn)行若勾選,則表示安裝此應(yīng)用時(shí),每個(gè)服務(wù)只運(yùn)行一個(gè)容器。 使用Docker技術(shù)可以幫助企業(yè)快速水平擴(kuò)展服務(wù),從而到達(dá)彈性部署業(yè)務(wù)的能力。在云服務(wù)概念興起之后,Docker的使用場(chǎng)景和范圍進(jìn)一步發(fā)展,如今在微服務(wù)架構(gòu)越來(lái)越流行的情況下,微服務(wù)...
閱讀 1683·2021-11-23 09:51
閱讀 3697·2021-09-26 09:46
閱讀 2198·2021-09-22 10:02
閱讀 1994·2019-08-30 15:56
閱讀 3393·2019-08-30 12:51
閱讀 2286·2019-08-30 11:12
閱讀 2121·2019-08-29 13:23
閱讀 2380·2019-08-29 13:16