1. 程式人生 > >Docker容器學習 --- compose搭建負載均衡+監控

Docker容器學習 --- compose搭建負載均衡+監控

什麼是Docker-Compose:

Compose專案來源於之前的fig專案,使用python語言編寫,與docker/swarm配合度很高。
Compose 是 Docker 容器進行編排的工具,定義和執行多容器的應用,可以一條命令啟動多個容器,使用
Docker Compose不再需要使用shell指令碼來啟動容器。 
Compose 通過一個配置檔案來管理多個Docker容器,在配置檔案中,所有的容器通過services來定義,然後使用
docker-compose指令碼來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器,非常適合組合使用多個
容器進行開發的場景。
docker-compose預設的模板檔案是 docker-compose.yml,其中定義的每個服務都必須通過 image 指令指定鏡
像或 build 指令(需要 Dockerfile)來自動構建。
其它大部分指令都跟 docker run 中的類似。
如果使用 build 指令,在 Dockerfile 中設定的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,
無需在 docker-compose.yml 中再次設定。

使用Compose 基本上分為三步:

1.Dockerfile 定義應用的執行環境
2.docker-compose.yml 定義組成應用的各服務
3.docker-compose up 啟動整個應用

搭建compose環境:

[root@foundation38 .docker]# cd /tmp/docker/
[root@foundation38 docker]# ls
auth  certs  Dockerfile  ssh  supervisord.conf  test  web  yum.repo
[root@foundation38 docker]# mkdir compose
[root@foundation38 docker]# cd compose/ [root@foundation38 compose]# ls [root@foundation38 compose]# pwd /tmp/docker/compose [root@foundation38 compose]# vim docker-compose.yml 將官方檔案下載下來修改即可 docker-compose檔案結構,官方提供了一個yaml Docker Compose 配置檔案的標準例子, 一份標準配置檔案應該包含 version、services、networks 三大部分,其中最關鍵的就是 services 和 networks 兩個部分 [root@foundation38
compose]# ls docker-compose.yml apache: image: rhel7:v1 expose: - 80 volumes: - ./web:/var/www/html nginx: image: nginx expose: - 80 haproxy: image: haproxy volumes: - ./haproxy:/usr/local/etc/haproxy links: - apache - nginx ports: - "8080:80" expose: - 80

這裡寫圖片描述

[root@foundation38 compose]# cd ..
[root@foundation38 docker]# cd compose/
[root@foundation38 compose]# mkdir haproxy  用haproxy實現負載均衡
[root@foundation38 compose]# cd haproxy/
[root@foundation38 haproxy]# ls
[root@foundation38 haproxy]# vim haproxy.cfg
[root@foundation38 haproxy]# vim haproxy.cfg
[root@foundation38 haproxy]# cat haproxy.cfg   這個直接從官網複製下來就可以使用
global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    stats uri /status
frontend balancer
    bind 0.0.0.0:80
    default_backend web_backends
backend web_backends
    balance roundrobin
    server web1 apache:80 check
    server web2 nginx:80 check

這裡寫圖片描述
compose的安裝:
從github上下載docker-compose二進位制檔案安裝下載最新版的docker-compose檔案

[root@foundation38 haproxy]# cd ..
[root@foundation38 compose]# docker-compose -v  系統中沒有自帶的docker-compose命令
bash: docker-compose: command not found...
[root@foundation38 compose]# cd /usr/local/bin/
[root@foundation38 bin]# ls
rht-vmctl  rht-vmicons  rht-vmsetkeyboard
[root@foundation38 bin]# ls
docker-compose-Linux-x86_64-1.22.0  rht-vmctl  rht-vmicons  rht-vmsetkeyboard
[root@foundation38 bin]# chmod +x docker-compose-Linux-x86_64-1.22.0   自己下載的二進位制檔案賦予執行許可權
[root@foundation38 bin]# ls
docker-compose-Linux-x86_64-1.22.0  rht-vmctl  rht-vmicons  rht-vmsetkeyboard
[root@foundation38 bin]# ln -s docker-compose-Linux-x86_64-1.22.0 docker-compose  製作軟連結
[root@foundation38 bin]# docker-compose -v   -v可以檢視當前compose的版本,測試安裝結果 
docker-compose version 1.22.0, build f46880fe
[root@foundation38 bin]# ls
docker-compose                      rht-vmctl    rht-vmsetkeyboard
docker-compose-Linux-x86_64-1.22.0  rht-vmicons
[root@foundation38 bin]# cd /tmp/docker/compose/
[root@foundation38 compose]# ls
docker-compose.yml  haproxy

這裡寫圖片描述
如果直接執行compose報錯,是由於沒有yml檔案所寫的rhel7:v1,執行即可:

[root@foundation38 compose]# cd ..
[root@foundation38 docker]# pwd
/tmp/docker
[root@foundation38 docker]# ls
auth  certs  compose  Dockerfile  ssh  supervisord.conf  test  web  yum.repo
[root@foundation38 docker]# vim Dockerfile 
[root@foundation38 docker]# cat Dockerfile 
FROM rhel7
ENV HOSTNAME server1
MAINTAINER 229683481@qq.com
EXPOSE 80
COPY yum.repo /etc/yum.repos.d/yum.repo
RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
VOLUME ["/var/www/html"]
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
[root@foundation38 docker]# docker build -t rhel7:v1 .
Sending build context to Docker daemon 36.35 kB
Step 1/8 : FROM rhel7
 ---> 0a3eb3fde7fd
Step 2/8 : ENV HOSTNAME server1
 ---> Using cache
 ---> bbda1be07d9e
Step 3/8 : MAINTAINER 229683481@qq.com
 ---> Using cache
 ---> aa986d9a3d5f
Step 4/8 : EXPOSE 80
 ---> Using cache
 ---> 61c2ffadd679
Step 5/8 : COPY yum.repo /etc/yum.repos.d/yum.repo
 ---> Using cache
 ---> 3c8129b8f4e3
Step 6/8 : RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all
 ---> Using cache
 ---> 5a455b585e9e
Step 7/8 : VOLUME /var/www/html
 ---> Using cache
 ---> 21c4f470a32e
Step 8/8 : CMD /usr/sbin/httpd -D FOREGROUND
 ---> Using cache
 ---> 1796ce7f20c8
Successfully built 1796ce7f20c8

這裡寫圖片描述
執行compose:

[[email protected] compose]# docker-compose up   執行compose
Starting compose_nginx_1  ... done
Starting compose_apache_1 ... done
Recreating compose_haproxy_1 ... done
Attaching to compose_apache_1, compose_nginx_1, compose_haproxy_1
apache_1   | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
haproxy_1  | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds 

這裡寫圖片描述
在網頁測試可以進行負載均衡:
這裡寫圖片描述
這裡寫圖片描述
在網頁測試可以進行監控:
這裡寫圖片描述

[[email protected] compose]# docker-compose up  在執行的compose中可以看到資訊
Starting compose_nginx_1  ... done 
Starting compose_apache_1 ... done
Recreating compose_haproxy_1 ... done
Attaching to compose_apache_1, compose_nginx_1, compose_haproxy_1
apache_1   | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
haproxy_1  | <7>haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds 
nginx_1    | 172.17.0.4 - - [22/Aug/2018:08:09:19 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
nginx_1    | 172.17.0.4 - - [22/Aug/2018:08:10:31 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"

這裡寫圖片描述
直接ctrl+c結束在網頁就不可以訪問:
這裡寫圖片描述
直接在終端開啟服務:

[[email protected] compose]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
1827c740a059        haproxy             "/docker-entrypoin..."   7 minutes ago       Exited (0) 40 seconds ago                       compose_haproxy_1
dd054ad399f4        rhel7:v1            "/usr/sbin/httpd -..."   12 minutes ago      Exited (0) 40 seconds ago                       compose_apache_1
e21cf912a341        nginx               "nginx -g 'daemon ..."   34 minutes ago      Exited (0) 40 seconds ago                       compose_nginx_1
[[email protected] compose]# docker-compose start  將docker-compose開啟
Starting apache  ... done
Starting nginx   ... done
Starting haproxy ... done
[[email protected] compose]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1827c740a059        haproxy             "/docker-entrypoin..."   8 minutes ago       Up 1 second         0.0.0.0:8080->80/tcp   compose_haproxy_1
dd054ad399f4        rhel7:v1            "/usr/sbin/httpd -..."   13 minutes ago      Up 2 seconds        80/tcp                 compose_apache_1
e21cf912a341        nginx               "nginx -g 'daemon ..."   34 minutes ago      Up 2 seconds        80/tcp                 compose_nginx_1

這裡寫圖片描述
在網頁測試可以進行負載均衡:
這裡寫圖片描述
這裡寫圖片描述
在網頁測試可以進行監控:
這裡寫圖片描述
將httpd功能關閉:

[root@foundation38 compose]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1827c740a059        haproxy             "/docker-entrypoin..."   10 minutes ago      Up 2 minutes        0.0.0.0:8080->80/tcp   compose_haproxy_1
dd054ad399f4        rhel7:v1            "/usr/sbin/httpd -..."   15 minutes ago      Up 2 minutes        80/tcp                 compose_apache_1
e21cf912a341        nginx               "nginx -g 'daemon ..."   36 minutes ago      Up 2 minutes        80/tcp                 compose_nginx_1
[root@foundation38 compose]# docker stop compose_apache_1
compose_apache_1

這裡寫圖片描述
在網頁測試就不可以看到httpd的測試頁:
這裡寫圖片描述
在網頁測試依舊可以看到監控:
這裡寫圖片描述
在終端開啟阿帕奇訪問:

[root@foundation38 compose]# docker start compose_apache_1
compose_apache_1
[root@foundation38 compose]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1827c740a059        haproxy             "/docker-entrypoin..."   15 minutes ago      Up 6 minutes        0.0.0.0:8080->80/tcp   compose_haproxy_1
dd054ad399f4        rhel7:v1            "/usr/sbin/httpd -..."   20 minutes ago      Up 1 second         80/tcp                 compose_apache_1
e21cf912a341        nginx               "nginx -g 'daemon ..."   41 minutes ago      Up 6 minutes        80/tcp                 compose_nginx_1
[root@foundation38 compose]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1827c740a059        haproxy             "/docker-entrypoin..."   15 minutes ago      Up 6 minutes        0.0.0.0:8080->80/tcp   compose_haproxy_1
dd054ad399f4        rhel7:v1            "/usr/sbin/httpd -..."   20 minutes ago      Up 5 seconds        80/tcp                 compose_apache_1
e21cf912a341        nginx               "nginx -g 'daemon ..."   41 minutes ago      Up 6 minutes        80/tcp                 compose_nginx_1

這裡寫圖片描述
在網頁測試可以進行負載均衡:
這裡寫圖片描述
這裡寫圖片描述
在網頁測試可以進行監控:
這裡寫圖片描述

相關推薦

Docker容器學習 --- compose搭建負載均衡+監控

什麼是Docker-Compose: Compose專案來源於之前的fig專案,使用python語言編寫,與docker/swarm配合度很高。 Compose 是 Docker 容器進行編排的工具,定義和執行多容器的應用,可以一條命令啟動多個容器,使用

Docker的安裝和鏡像管理並利用Docker容器實現nginx的負載均衡、動靜分離

docker的安裝和鏡像管理並利用docker容器實現nginx的負載均衡、動靜分離Docker的安裝一、Docker的概念Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互

CentOS Docker容器中安裝LVS負載均衡(一) ipvsadm

安裝環境: Docker容器和宿主機都是CentOS 7.3版本 1. Docker容器內安裝ipvsadm yum install -y ipvsadm # enable IP forward echo 'net.ipv4.ip_forward = 1' >&g

Nginx學習筆記06負載均衡之(一)負載均衡介紹

最終 反向 結果 html proxy mime cnblogs 負載 cal 1.1.1. 負載均衡的介紹 Nginx中使用upstream配置塊,可以方便的配置出一個基於反向代理的負載均衡解決方案。 在upstream中可以包含多個server配置項,每個server配

apache+tomcat 搭建負載均衡系統

apache tomcat 負載均衡 apache+tomcat+mod_jk 搭建負載均衡系統。0.os系統采用centos6.8 x64 2.6.32-642.el6.x86_641.首先安裝好jdk環境本次采用jdk-8u111-linux-x64.gz jdk和jre的安裝目錄要不同,否

docker容器學習

docker容器 docker學習 虛擬化dockerDocker 架構Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關系類似於面向對象編程中的對象與類。Docker面向對象容器對象鏡

docker容器學習

docker 容器 docker容器 虛擬化Docker 學習一Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容

手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 負載均衡 高可用 集群

ipvs 管理 bar 10.10 方正 希望 滿足 open chm 為了實現服務的高可用和可擴展,在網上找了幾天的資料,現在終於配置完畢,現將心得公布處理,希望對和我一樣剛入門的菜鳥能有一些幫助。 一、理論知識(原理) 我們不僅要知其然,而且要知其所以然,所以先

把AspDotNetCoreMvc程序運行在Docker上-part4:實現負載均衡

dash run ner 網絡 endpoint width idg 識別 nginx 在上一part《把AspDotNetCoreMvc程序運行在Docker上-part3:使用獨立的存儲容器》,我們利用MySql容器和Volume實現了真正意義上的數據存儲。整個結

Docker容器學習梳理-容器時間跟宿主機時間同步

info 改變 日誌 time nat 並且 同步 統一 pre 在Docker容器創建好之後,可能會發現容器時間跟宿主機時間不一致,這就需要同步它們的時間,讓容器時間跟宿主機時間保持一致。如下:宿主機時間 [root@docker ~]# date Thu Jan 4

Docker容器學習梳理--容器登陸方法梳理(attach、exec、nsenter)

config .org app ron 簡單 dha entos ava dir 對於運行在後臺的Docker容器,我們運維人員時常是有登陸進去的需求。登陸Docker容器的方式:1)使用ssh登陸容器。這種方法需要在容器中啟動sshd,存在開銷和攻擊面增大的問題。同時也違

Docker容器學習梳理--日常操作總結

容器 指定 reat 配置 捕獲 inf sse 是你 not 使用Docker已有一段時間了,今天正好有空梳理下自己平時操作Docker時的一些命令和註意細節:Docker 命令幫助$ sudo docker Commands: attach Attach

Docker容器學習梳理--手動制作系統鏡像

lba osi github 我們 dha 版本 記錄 密碼 發布 docker官方和個人發布的鏡像由於版本等各種原因,漏洞較多,已統計Docker Hub超過30%的官方鏡像包含高危漏洞。此外,由於網絡等原因也會造成docker pull下載鏡像的速度很慢。基於這種情況,

Docker容器學習梳理--SSH方式登陸容器

rman ati ava hosts pair als mman ane tab 本章介紹如果通過ssh方式登陸Docker容器的操作記錄(其實不太建議直接用ssh去連接上容器的想法,雖然可以,但是有很多弊端,而且docker已經提供了容器內執行的命令,沒有必要再折騰每一個

Docker容器學習梳理--web管理工具DockerUI部署記錄

iptable nds emc alt latest size acc 輸入 本機 Docker容器學習梳理--web管理工具DockerUI部署記錄 Docker提供一個平臺來把應用程序當作容器來打包、分發、共享和運行,它已經通過節省工作時間來拯救了成千上萬的系統管理員和

Docker容器學習梳理-容器硬盤熱擴容

config 下載 load 出現 wfs 調整 cal group order 前面已介紹了docker很多知識點的操作記錄,今天這裏梳理下docker容器空間擴展的操作。默認情況下,docker容器的空間是10G。在實際生產環境下,對docker容器進行熱擴容(動態擴容

Docker容器學習梳理-Dockerfile構建鏡像

運行時 可執行 創建 管理 部分 重要 環境 每次 定制 在Docker的運用中,從下載鏡像,啟動容器,在容器中輸入命令來運行程序,這些命令都是手工一條條往裏輸入的,無法重復利用,而且效率很低。所以就需要一 種文件或腳本,我們把想執行的操作以命令的方式寫入其中,然後讓doc

nginx如何搭建負載均衡

nginx負載均衡upstream resinserver{ # 定義負載均衡設備的Ip及設備狀態ip_hash;server 10.1.1.1:8000 down;server 10.1.1.2:8080 weight=10 max_fails=3 fail_timeout=10s;s

Docker容器學習--1

標識 esp not 發揮 虛擬機 文件目錄 sha cfa init.d Docker是PaaS 提供商 dotCloud 開源的一個基於 LXC 的高級容器引擎,源代碼托管在 Github 上, 基於go語言並遵從Apache2.0協議開源。Docker是通過內核虛擬化

Nginx負載均衡監控節點狀態

server 解壓縮 androi 配置文件 round ref 配置 engine get   利用第三方插件監控(淘寶開發的Tengine) 模塊:nginx_upstream_check_module 實現web界面 下載補丁包 wget https://code