成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Compose和Machine實現本地與云端的同步部署與管理

云計算
Docker是個強大工具,用于啟動隔離的、可重復生產的應用環境容器。本文側重講述如何為本地開發容器化Flask應用,同時使用Docker Compose和Docker Machine將應用交付到云主機提供商中。

前言

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

Docker是個強大工具,用于啟動隔離的、可重復生產的應用環境容器。本文側重講述如何為本地開發容器化Flask應用,同時使用Docker Compose和Docker Machine將應用交付到云主機提供商中。

本地設置

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

  • Docker Compose(v1.2.0),即此前的fig,用于將一個多容器應用編排成一個單一應用。
  • Docker Machine(v0.2.0)用于在本地和云端創建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 

然后,從此倉庫克隆項目,或按該倉庫的項目結構創建你自己的項目:

  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 

這樣就為容器啟動和運行做好了準備。現在進入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開發設置了一臺“machine”(名為dev)。實際上,它下載了boot2docker,并啟動了一個運行Docker的虛擬機。 
  24.  
  25. 運行如下命令來查看當前運行的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應用及Postgres數據庫啟動并運行起來。

#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" 

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

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

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

  1. $ sh copy.sh 

現在,要運行容器,只要構建鏡像然后啟動服務即可:

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

去喝一杯咖啡。或是兩杯。***次運行時間會久一點。

我們還需要創建數據庫表:

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

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

 

棒極了!

要查看web服務可用的環境變量,運行:

  1. $ docker-compose run web env 

要查看日志:

  1. $ docker-compose logs 

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

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

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

#p#

部署

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

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

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

這將花費幾分鐘來準備droplet并設置一個名為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)" 

現在,我們運行了兩個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 

然后,設置production作為活動machine,并將Docker環境加載到命令行中:

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

***,在云端再次構建Flask應用:

  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賬號關聯的IP地址,并在瀏覽器中查看。如果所有東西都正確,應該能看到應用已經運行起來了。

 

 

責任編輯:Ophira 來源: dockerone
相關推薦

2019-03-28 05:21:07

WLANWi-Fi網絡

2023-10-10 00:09:14

2013-10-16 09:38:23

云端應用部署工具應用部署工具云測試

2022-09-12 07:17:20

redis命令redissynce

2024-03-08 11:30:38

SaaSIT管理平臺管理

2020-07-03 07:38:58

云物聯網物聯網IOT

2023-05-29 16:11:37

物聯網云計算

2011-09-21 14:25:16

2024-01-17 08:01:28

Docker語法命令

2014-12-05 09:53:59

docker容器管理開源

2014-04-30 15:52:59

紅帽

2013-08-01 11:46:55

云安全安全警報安全報告

2021-12-14 00:00:51

監控 部署故障

2015-08-03 16:15:53

Docker部署集群

2017-01-11 16:57:51

大數據大數據集群監控

2012-03-16 15:39:51

VMware應用程序虛擬化

2011-08-23 10:37:15

Oracle分區表本地索引

2017-05-23 15:53:52

docker服務容器

2024-09-06 12:28:48

2023-09-27 07:15:46

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线观看免费观看视频 | 午夜三区 | 九九热在线观看视频 | 国产高清精品一区 | 国产精品久久毛片av大全日韩 | 国产精品激情 | 在线免费黄色 | 天天躁日日躁狠狠躁2018小说 | 中文字幕亚洲视频 | 亚洲精品二区 | 日日爱夜夜操 | 大乳boobs巨大吃奶挤奶 | 免费国产视频 | 日本a级大片 | 欧美日韩国产一区二区 | 日韩欧美精品在线播放 | 日本一区二区在线视频 | 色综合视频 | 一区二区在线不卡 | 一区二区在线免费观看 | 97成人免费 | 午夜电影网站 | 精品一区二区三区在线观看国产 | 免费视频二区 | 久久久久久99 | 色永久| 99热欧美 | 成人综合一区二区 | 国产三级一区二区三区 | 国产精品久久网 | 午夜精品福利视频 | 国产免费av在线 | 欧美一区二区三区在线播放 | 人人草人人干 | 中文字幕av网站 | 91免费在线视频 | 成人av电影天堂 | 久久在线 | 色综合天天天天做夜夜夜夜做 | 国产激情一区二区三区 | 国产成人精品久久 |