摘要:我并沒有直接在另外一個容器中安裝客戶端,而是直接在服務(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
摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫上線并開始運行后,我們接下來部署后端?,F(xiàn)在,會幫助我們完成全部負載均衡工作。這樣所有來自代理的請求都將指向網(wǎng)絡(luò),并由后者跨越全部實例執(zhí)行負載均衡。 七夕大家過得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當中部署任意數(shù)量的服務(wù),但這并不代表各項服務(wù)全部可為用戶所訪問。而新的Swarm網(wǎng)絡(luò)使得各項服務(wù)之間能夠更為輕松...
摘要:三私有代碼庫阿里云使用引言使用肯定離不開和代碼的集成。本著代碼可靠性,服務(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),到...
摘要:看下狀態(tài)可以看到我已經(jīng)有一些鏡像了我已經(jīng)刪除了拉鏡像正常即可,中間那段是中國鏡像源,我們成功下來了的鏡像。攻破像我這樣屌絲的服務(wù)器一般都買的,大的資源文件不住,一個動輒的文件這很蛋疼,不上很難受。 4000字長文,多圖預(yù)警?。?!流量慎入??! 性能優(yōu)化 - 屌絲前端性能優(yōu)化、上線一條龍 大家好我又來了,本章給大家?guī)淼膬?nèi)容是:上線和上線后的性能優(yōu)化 項目地址 實戰(zhàn)預(yù)覽地址 實戰(zhàn)項目地址...
摘要:使用技術(shù)可以幫助企業(yè)快速水平擴展服務(wù),從而到達彈性部署業(yè)務(wù)的能力。例如我們要安裝然后使用查看我們的擴展是否安裝成功。啟動和,檢查是否正常運行。單容器運行若勾選,則表示安裝此應(yīng)用時,每個服務(wù)只運行一個容器。 使用Docker技術(shù)可以幫助企業(yè)快速水平擴展服務(wù),從而到達彈性部署業(yè)務(wù)的能力。在云服務(wù)概念興起之后,Docker的使用場景和范圍進一步發(fā)展,如今在微服務(wù)架構(gòu)越來越流行的情況下,微服務(wù)...
閱讀 1533·2021-11-23 09:51
閱讀 3646·2021-09-26 09:46
閱讀 2135·2021-09-22 10:02
閱讀 1849·2019-08-30 15:56
閱讀 3333·2019-08-30 12:51
閱讀 2235·2019-08-30 11:12
閱讀 2069·2019-08-29 13:23
閱讀 2331·2019-08-29 13:16