亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 35208 | 回復: 0
打印 上一主題 下一主題

Docker-compose 基于容器編排構建實踐 [復制鏈接]

論壇徽章:
1
15-16賽季CBA聯(lián)賽之同曦
日期:2017-01-17 18:19:30
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2017-07-08 16:31 |只看該作者 |倒序瀏覽
上一篇我們介紹了通過使用Dockerfile構建LNMP環(huán)境,但是我們也發(fā)現(xiàn)了其中的缺陷;就是容器多的時候我們管理起來也是不方便的;我們需要考慮的就是把一組環(huán)境分組,然后按照執(zhí)行順序一鍵啟動即可。

下面我們具體按照上一次咱們構建的wordpress環(huán)境:
1、安裝docker compose,我們還是使用daocloud來進行安裝,你懂得github有時候也挺慢的:
  1. [root@test ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  2. [root@test ~]# chmod +x /usr/local/bin/docker-compose
  3. [root@test ~]# docker-compose version
  4. docker-compose version 1.11.2, build dfed245
  5. docker-py version: 2.1.0
  6. CPython version: 2.7.13
  7. OpenSSL version: OpenSSL 1.0.1t  3 May 2016
復制代碼
2、我們已經(jīng)安裝了compose之后,我們直接引用我們之前的創(chuàng)建的鏡像先來構建一個wordpress,首先看一下我們compose版本的編寫(在v3版本支持stask,后面講):
  1. [root@test docker-compose]# cat lnmp.yml
  2. version: "2"
  3. services:
  4.   php:
  5.     image:  lnmp/php:1.0
  6.     volumes:
  7.        -  /web:/web
  8.   nginx:
  9.     image:  lnmp/nginx:1.0
  10.     ports:
  11.       - 80:80
  12.     volumes:
  13.       - /web:/web
  14.     links:
  15.       - php
  16.   mysql:
  17.     image: lnmp/mysql:1.0
  18.     ports:
  19.       - 3306:3306
  20.     volumes:
  21.       - /opt/data:/var/lib/mysql
復制代碼
##image和build必須存在一個,為了節(jié)約時間,我們沒有用dockerfile構建一個鏡像,剩下的指令基本上和docker run一樣的所以這里不多介紹。

3、我們啟動一下docker-compose 構建這些鏡像:
  1. [root@test docker-compose]# docker-compose -f lnmp.yml up -d
  2. Starting dockercompose_mysql_1
  3. Starting dockercompose_php_1
  4. Starting dockercompose_nginx_1
復制代碼
##-f指定文件,-d表示后臺運行。up表示構建之后直接一步啟動。

4、我們可以看下docker-compose 日志:
  1. [root@test docker-compose]# docker-compose  -f lnmp.yml logs
  2. Attaching to dockercompose_nginx_1, dockercompose_mysql_1, dockercompose_php_1
  3. mysql_1  | Installing MySQL system tables...
  4. mysql_1  | OK
  5. mysql_1  | Filling help tables...
  6. mysql_1  | OK
  7. mysql_1  |
  8. mysql_1  | To start mysqld at boot time you have to copy
  9. mysql_1  | support-files/mysql.server to the right place for your system
復制代碼
5、看一下進程的啟動狀態(tài):
  1. [root@test docker-compose]# docker-compose  -f lnmp.yml ps
  2.         Name                      Command             State           Ports         
  3. ------------------------------------------------------------------------------------
  4. dockercompose_mysql_1   /bin/bash /opt/startup.sh     Up      0.0.0.0:3306->3306/tcp
  5. dockercompose_nginx_1   /usr/local/nginx/sbin/nginx   Up      0.0.0.0:80->80/tcp     
  6. dockercompose_php_1     /usr/local/php/sbin/php-fpm   Up      9000/tcp
復制代碼
6、看到我們的環(huán)境都已經(jīng)起來了,我們訪問一下web試試:

##可以看到效果出現(xiàn)了,因為我們之前用-v 把數(shù)據(jù)庫持久化到/opt/data下面,所以不管怎么換容器我們的數(shù)據(jù)庫還是一樣能用的。

7、構建這個還是比較簡單,我們了解一下compose啟動的相關參數(shù):
  1. [root@test docker-compose]# docker-compose --help
  2. Commands:
  3.   build              Build or rebuild services
  4.   bundle             Generate a Docker bundle from the Compose file
  5.   config             Validate and view the compose file
  6.   create             Create services
  7.   down               Stop and remove containers, networks, images, and volumes
  8.   events             Receive real time events from containers
  9.   exec               Execute a command in a running container
  10.   help               Get help on a command
  11.   kill               Kill containers
  12.   logs               View output from containers
  13.   pause              Pause services
  14.   port               Print the public port for a port binding
  15.   ps                 List containers
  16.   pull               Pull service images
  17.   push               Push service images
  18.   restart            Restart services
  19.   rm                 Remove stopped containers
  20.   run                Run a one-off command
  21.   scale              Set number of containers for a service
  22.   start              Start services
  23.   stop               Stop services
  24.   top                Display the running processes
  25.   unpause            Unpause services
  26.   up                 Create and start containers
  27.   version            Show the Docker-Compose version information
復制代碼
##compose文件的編寫基本跟docker run差不多的;我們需要強調的是scale這個指令。通過compose 我們可以快速的復制出這樣一個容器副本。當然是我們沒有做像外部的端口映射情況下,我們可以這樣做;這個應用像比如我們跑多個任務,我們可以用scale復制出多個任務,看一下。

8、scale復制出兩個php容器:
  1. [root@test docker-compose]# docker-compose -f lnmp.yml scale php=2
  2. Creating and starting dockercompose_php_2 ... done
  3. [root@test docker-compose]# docker-compose -f lnmp.yml ps
  4.         Name                      Command             State           Ports         
  5. ------------------------------------------------------------------------------------
  6. dockercompose_mysql_1   /bin/bash /opt/startup.sh     Up      0.0.0.0:3306->3306/tcp
  7. dockercompose_nginx_1   /usr/local/nginx/sbin/nginx   Up      0.0.0.0:80->80/tcp     
  8. dockercompose_php_1     /usr/local/php/sbin/php-fpm   Up      9000/tcp               
  9. dockercompose_php_2     /usr/local/php/sbin/php-fpm   Up      9000/tcp
復制代碼
##可以看到我們的php有了兩個容器在運行,當然我們考慮的是平時在集群里構建,在多主機模式下才能發(fā)揮幾個副本的性能,所以后面像swarm 的scale可以把容器調度在不同的節(jié)點上。最大發(fā)揮其性能。還有compose v3的stack。(后面更新)

9,這個多容器我們做個好玩的事情,用web服務器來做個負載均衡,反向代理:架構圖如下:


10、因為是Dockerfile我們要做反向代理,所以我們基于lnmp/nginx:1.0這個鏡像修改,然后別的nginx可以不變:
首先看一下當前目錄下的文件:
  1. [root@test upstram]# tree
  2. ├── docker-compose.yml
  3. └── nginx
  4.     ├── default_nginx.conf
  5.     └── Dockerfile
復制代碼
11、我們首先看一下我們docker-compose是如何構建的:
  1. [root@test upstram]# cat docker-compose.yml
  2. version: "2"
  3. services:
  4.   web_a:
  5.     image:  lnmp/nginx:1.0
  6.     volumes:
  7.        -  /web_a:/web
  8. expose:
  9.        -  80
  10.   web_b:
  11.     image:  lnmp/nginx:1.0
  12.     volumes:
  13.        -  /web_b:/web
  14.     expose:
  15.        -  80
  16.   web_c:
  17.     image:  lnmp/nginx:1.0
  18.     volumes:
  19.        -  /web_c:/web
  20.     expose:
  21.        -  80  
  22.   nginx:
  23.     build: nginx
  24.     ports:
  25.       - 80:80
  26.     links:
  27.       - web_a
  28.       - web_b
  29.       - web_c
復制代碼
##可以看到,我們有web_a,web_b,web_c三個容器;都是上一篇我們講到的Dockerfile創(chuàng)建的nginx容器,然后內(nèi)部暴露80端口,分別掛載有到本地的,/web_a,/web_b,/web_c三個目錄:

12、看一下dockerfile:
  1. [root@test upstram]# cd nginx/
  2. [root@test nginx]# ls
  3. default_nginx.conf  Dockerfile
  4. [root@test nginx]# cat Dockerfile
  5. from lnmp/nginx:1.0
  6. ADD default_nginx.conf /usr/local/nginx/conf/vhosts/default.conf
  7. EXPOSE 80
  8. CMD ["/usr/local/nginx/sbin/nginx"]
復制代碼
##其實很簡單,就是引用我們上一次創(chuàng)建的鏡像,然后覆蓋掉之前的nginx文件,換成下面的反向代理文件default_nginx.conf。
  1. [root@test nginx]# cat default_nginx.conf
  2. upstream web_up{
  3.         server web_a  max_fails=3 fail_timeout=20s weight=2;
  4.         server web_b  max_fails=3 fail_timeout=20s weight=2;
  5.         server web_c  max_fails=3 fail_timeout=20s weight=2;
  6. }
  7. server {
  8.     listen       80 default_server;
  9.     server_name  localhost;
  10.     #charset koi8-r;
  11.     location / {
  12.                 proxy_pass http://web_up;
  13.                 proxy_set_header Host $host;
  14.                 proxy_set_header X-Real-IP $remote_addr;
  15.                 proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
  16.     }
  17. }
復制代碼
##這里反向代理因為我們用了--link來關聯(lián)容器,所以是可以通訊和解析的。

13、到這里完成了,我們創(chuàng)建三個目錄,/web_a,/web_b,/web_c,分表放index.html文件到下面:
  1. [root@test nginx]# cat /web_a/index.html
  2. web_a
  3. [root@test nginx]# cat /web_b/index.html
  4. web_b
  5. [root@test nginx]# cat /web_c/index.html
  6. web_c
復制代碼
##主要是為了測試反向代理效果:

14、啟動docker compose:
  1. [root@test upstram]# docker-compose up -d
  2. Starting upstram_web_a_1
  3. Starting upstram_web_b_1
  4. Starting upstram_web_c_1
復制代碼
15、查看一下運行狀態(tài),然后測試下訪問web的效果:
  1. [root@test upstram]# docker-compose up -d
  2. [root@test upstram]# docker-compose ps
  3.      Name                   Command             State         Ports        
  4. --------------------------------------------------------------------------
  5. upstram_nginx_1   /usr/local/nginx/sbin/nginx   Up      0.0.0.0:80->80/tcp
  6. upstram_web_a_1   /usr/local/nginx/sbin/nginx   Up      80/tcp            
  7. upstram_web_b_1   /usr/local/nginx/sbin/nginx   Up      80/tcp            
  8. upstram_web_c_1   /usr/local/nginx/sbin/nginx   Up      80/tcp
復制代碼
訪問本機的URL,可以看到反向代理已經(jīng)生效了:
  1. [root@test upstram]# curl 192.168.63.200
  2. web_a
  3. [root@test upstram]# curl 192.168.63.200
  4. web_b
  5. [root@test upstram]# curl 192.168.63.200
  6. web_c
復制代碼
網(wǎng)頁效果:


到此對于compose的演示也告一段落,可以看到通過compose我們可以很好的對容器進行編排,但是我們需要思考一個問題,就是我們復制出來的容器,在一臺主機上意義其實不是很大,而且也達不到高可用的效果;所以往后我們要借鑒swarm等編排工具。在這個之前也涉及到Docker的網(wǎng)絡問題,后期有空我們先介紹。

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP