自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Compose和Machine實現(xiàn)本地與云端的同步部署與管理

云計算
Docker是個強大工具,用于啟動隔離的、可重復(fù)生產(chǎn)的應(yīng)用環(huán)境容器。本文側(cè)重講述如何為本地開發(fā)容器化Flask應(yīng)用,同時使用Docker Compose和Docker Machine將應(yīng)用交付到云主機提供商中。

前言

Docker 1.6發(fā)布了,Compose和Machine都在更新之列。本文具體說明了如何使用這兩個組件來實現(xiàn)本地與云端的同步部署與管理。

Docker是個強大工具,用于啟動隔離的、可重復(fù)生產(chǎn)的應(yīng)用環(huán)境容器。本文側(cè)重講述如何為本地開發(fā)容器化Flask應(yīng)用,同時使用Docker Compose和Docker Machine將應(yīng)用交付到云主機提供商中。

本地設(shè)置

與Docker(v1.6.0)一起,我們將使用:

  • Docker Compose(v1.2.0),即此前的fig,用于將一個多容器應(yīng)用編排成一個單一應(yīng)用。
  • Docker Machine(v0.2.0)用于在本地和云端創(chuàng)建Docker主機。

檢驗一下安裝是否成功:

  1. $ docker-machine --version 
  2.  
  3. docker-machine version 0.2.0 (8b9eaf2) 
  4.  
  5. $ docker-compose --version 
  6.  
  7. docker-compose 1.2.0 

然后,從此倉庫克隆項目,或按該倉庫的項目結(jié)構(gòu)創(chuàng)建你自己的項目:

  1. ├── copy.sh 
  2.  
  3. ├── docker-compose.yml 
  4.  
  5. ├── nginx 
  6.  
  7. │ ├── Dockerfile 
  8.  
  9. │ └── sites-enabled 
  10.  
  11. │ └── flask_project 
  12.  
  13. └── web 
  14.  
  15. ├── Dockerfile 
  16.  
  17. ├── app.py 
  18.  
  19. ├── config.py 
  20.  
  21. ├── create_db.py 
  22.  
  23. ├── models.py 
  24.  
  25. ├── requirements.txt 
  26.  
  27. ├── static 
  28.  
  29. │ ├── css 
  30.  
  31. │ │ ├── bootstrap.min.css 
  32.  
  33. │ │ └── main.css 
  34.  
  35. │ ├── img 
  36.  
  37. │ └── js 
  38.  
  39. │ ├── bootstrap.min.js 
  40.  
  41. │ └── main.js 
  42.  
  43. └── templates 
  44.  
  45. ├── _base.html 
  46.  
  47. └── index.html 

這樣就為容器啟動和運行做好了準備?,F(xiàn)在進入Docker Machine。

#p#

Docker Machine

要啟動Docker Machine,只需簡單地運行:

  1. $ docker-machine create -d virtualbox dev; 
  2.  
  3. INFO[0000] Creating CA: /Users/michael/.docker/machine/certs/ca.pem 
  4.  
  5. INFO[0000] Creating client certificate: /Users/michael/.docker/machine/certs/cert.pem 
  6.  
  7. INFO[0001] Downloading boot2docker.iso to /Users/michael/.docker/machine/cache/boot2docker.iso... 
  8.  
  9. INFO[0035] Creating SSH key... 
  10.  
  11. INFO[0035] Creating VirtualBox VM... 
  12.  
  13. INFO[0043] Starting VirtualBox VM... 
  14.  
  15. INFO[0044] Waiting for VM to start... 
  16.  
  17. INFO[0094"dev" has been created and is now the active machine. 
  18.  
  19. INFO[0094] To point your Docker client at it, run this in your shell: $(docker-machine env dev) 
  20.  
  21. $ $(docker-machine env dev) 
  22.  
  23. create命令為Docker開發(fā)設(shè)置了一臺“machine”(名為dev)。實際上,它下載了boot2docker,并啟動了一個運行Docker的虛擬機。 
  24.  
  25. 運行如下命令來查看當(dāng)前運行的Machine: 
  26.  
  27. $ docker-machine ls 
  28.  
  29. NAME ACTIVE DRIVER STATE URL SWARM 
  30.  
  31. dev * virtualbox Running tcp://192.168.99.100:2376 

接下來,讓我們使用Docker Compose來啟動容器,讓Flask應(yīng)用及Postgres數(shù)據(jù)庫啟動并運行起來。

#p#

Docker Compose

來看一眼docker-compose.yml文件:

  1. web: 
  2.  
  3. restart: always 
  4.  
  5. build: ./web 
  6.  
  7. expose: 
  8.  
  9. "8000" 
  10.  
  11. links: 
  12.  
  13. - postgres:postgres 
  14.  
  15. volumes: 
  16.  
  17. - /usr/src/app 
  18.  
  19. env_file: .env 
  20.  
  21. command: /usr/local/bin/gunicorn -w 2 -b :8000 app:app 
  22.  
  23. nginx: 
  24.  
  25. restart: always 
  26.  
  27. build: ./nginx/ 
  28.  
  29. ports: 
  30.  
  31. "80:80" 
  32.  
  33. volumes: 
  34.  
  35. - /www/static 
  36.  
  37. links: 
  38.  
  39. - web:web 
  40.  
  41. data: 
  42.  
  43. restart: always 
  44.  
  45. image: postgres:latest 
  46.  
  47. volumes: 
  48.  
  49. - /var/lib/postgresql 
  50.  
  51. command: true 
  52.  
  53. postgres: 
  54.  
  55. restart: always 
  56.  
  57. image: postgres:latest 
  58.  
  59. volumes_from: 
  60.  
  61. - data 
  62.  
  63. ports: 
  64.  
  65. "5432:5432" 

這里,我們定義了四個服務(wù):web、 nginx、 postgres和 data。

  • 首先,web服務(wù)是通過Dockerfile的指令在“web”目錄中構(gòu)建的,在此設(shè)置了Python環(huán)境,安裝了必要軟件,并將Flask應(yīng)用運行于8000端口。這個端口會被轉(zhuǎn)發(fā)到宿主環(huán)境(比如Docker Machine)的80端口上。該服務(wù)還將.env文件中定義的環(huán)境變量添加到了容器里。
  • nginx服務(wù)作為反向代理用于轉(zhuǎn)發(fā)請求到Flask應(yīng)用或靜態(tài)文件上。
  • 下一個,postgres服務(wù)構(gòu)建于Docker Hub的官方PostgreSQL鏡像,安裝了Postgres并將服務(wù)器運行于默認的5432端口上。
  • ***,請注意有一個單獨的卷容器data用于存儲數(shù)據(jù)庫數(shù)據(jù)。這確保了即便Postgres容器被完全地銷毀,數(shù)據(jù)仍然存在。

在構(gòu)建鏡像前,我們需要將靜態(tài)文件從“web/static”目錄復(fù)制到“nginx/static”中,因為nginx Dockerfile是從“nginx”目錄中添加靜態(tài)文件目錄的。要這么做,只需要簡單地運行copy.sh腳本:

  1. $ sh copy.sh 

現(xiàn)在,要運行容器,只要構(gòu)建鏡像然后啟動服務(wù)即可:

  1. $ docker-compose build 
  2.  
  3. $ docker-compose up -d 

去喝一杯咖啡?;蚴莾杀?**次運行時間會久一點。

我們還需要創(chuàng)建數(shù)據(jù)庫表:

  1. $ docker-compose run web /usr/local/bin/python create_db.py 

打開瀏覽器并訪問與Docker Machine關(guān)聯(lián)的IP地址(docker-machine ip):

 

棒極了!

要查看web服務(wù)可用的環(huán)境變量,運行:

  1. $ docker-compose run web env 

要查看日志:

  1. $ docker-compose logs 

你也可以進入Postgres命令行,這是因為我們在docker-compose.yml文件中轉(zhuǎn)發(fā)了它的端口到宿主環(huán)境中,可以這樣添加用戶/角色及數(shù)據(jù)庫:

  1. $ psql -h 192.168.99.100 -p 5432 -U postgres --password 

一旦完成,通過docker-compose stop停止所有進程。

#p#

部署

在應(yīng)用運行于本地的同時,我們可以使用Docker Machine將與之完全相同的環(huán)境推送到云主機提供商上。我們來部署到Digital Ocean的droplet里。

在Digital Ocean注冊完成后,生成一個“個人訪問令牌”,然后運行以下命令:

  1. $ docker-machine create \ 
  2.  
  3. -d digitalocean \ 
  4.  
  5. --digitalocean-access-token=你的令牌 \ 
  6.  
  7. production 

這將花費幾分鐘來準備droplet并設(shè)置一個名為production的新的Docker Machine:

  1. INFO[0000] Creating SSH key... 
  2.  
  3. INFO[0001] Creating Digital Ocean droplet... 
  4.  
  5. INFO[0133"production" has been created and is now the active machine. 
  6.  
  7. INFO[0133] To point your Docker client at it, run this in your shell: eval "$(docker-machine env production)" 

現(xiàn)在,我們運行了兩個Machine,一個本地的,一個在Digital Ocean上:

  1. $ docker-machine ls 
  2.  
  3. NAME ACTIVE DRIVER STATE URL SWARM 
  4.  
  5. dev * virtualbox Running tcp://192.168.99.100:2376 
  6.  
  7. production digitalocean Running tcp://104.131.107.8:2376 

然后,設(shè)置production作為活動machine,并將Docker環(huán)境加載到命令行中:

  1. $ docker-machine active production 
  2.  
  3. $ eval "$(docker-machine env production)" 

***,在云端再次構(gòu)建Flask應(yīng)用:

  1. $ docker-compose build 
  2.  
  3. $ docker-compose up -d 
  4.  
  5. $ docker-compose run web /usr/local/bin/python create_db.py 

找到Digital Ocean賬號關(guān)聯(lián)的IP地址,并在瀏覽器中查看。如果所有東西都正確,應(yīng)該能看到應(yīng)用已經(jīng)運行起來了。

 

 

責(zé)任編輯:Ophira 來源: dockerone
相關(guān)推薦

2019-03-28 05:21:07

WLANWi-Fi網(wǎng)絡(luò)

2023-10-10 00:09:14

2022-09-12 07:17:20

redis命令redissynce

2024-03-08 11:30:38

SaaSIT管理平臺管理

2013-10-16 09:38:23

云端應(yīng)用部署工具應(yīng)用部署工具云測試

2020-07-03 07:38:58

云物聯(lián)網(wǎng)物聯(lián)網(wǎng)IOT

2023-05-29 16:11:37

物聯(lián)網(wǎng)云計算

2024-01-17 08:01:28

Docker語法命令

2014-12-05 09:53:59

docker容器管理開源

2011-09-21 14:25:16

2015-08-03 16:15:53

Docker部署集群

2021-12-14 00:00:51

監(jiān)控 部署故障

2014-04-30 15:52:59

紅帽

2012-03-16 15:39:51

VMware應(yīng)用程序虛擬化

2017-05-23 15:53:52

docker服務(wù)容器

2017-01-11 16:57:51

大數(shù)據(jù)大數(shù)據(jù)集群監(jiān)控

2013-08-01 11:46:55

云安全安全警報安全報告

2011-08-23 10:37:15

Oracle分區(qū)表本地索引

2022-07-08 22:23:40

DaprRedis分布式

2024-09-06 12:28:48

點贊
收藏

51CTO技術(shù)棧公眾號