Docker高級管理(實例演示!!!)

Docker網絡通訊

Docker單機網絡拓撲圖:

在這裏插入圖片描述

端口映射:

  • 端口映射機制將容器內的服務提供給外部網絡訪問
  • 可隨機或指定映射端口範圍
docker run -d -P httpd:centos
docker run -d -p 49888:80 httpd:centos

容器互聯

  • 在源容器和接收容器間創建一條網絡通訊隧道
  • 使用docker run命令–link選項實現容器間互聯通訊

實現容器互聯

docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1
httpd:centos
docker exec -it web2 /bin/bash
ping web1

Docker Compose容器編排

  • Docker Compose的前身是Fig,它是一個定義及運行多個Docker容器的工具
  • 使用Docker Compose再也不須要使用shell腳原本啓動容器
  • Docker Compose很是適合組合使用多個容器進行開發的場景

Docker Compose環境安裝

[root@localhost ~]# curl -Lhttps://github.com/docker/compose/releases/download/1.21.1 /docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose
[root@localhost ~ ]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~ ]# docker-compose -v

Docker Compose文件結構

[root@localhost compose_ Inmp]# vim docker-compose.yml
  • YAML是一種標記語言很直觀的數據序列化格式
  • 文件格式及編寫注意事項
    1.不支持製表符tab鍵縮進,須要使用空格縮進
    2.一般開頭縮進2個空格
    3.字符後縮進1個空格,如冒號、逗號、橫槓
    4.用井號註釋
    5.若是包含特殊字符用單引號引發來
    6.布爾值必須用引號括起來

Docker Compse配置經常使用字段:

字段 描述
build dockerfile context 指定Dockerfile文件名構建鏡像上下文路徑
image 指定鏡像
command 執行命令,覆蓋默認命令
container name 指定容器名稱,因爲容器名稱時惟一的,若是指定自定義名稱,則沒法scale
deploy 指定部署和運行服務相關配置,只能在Swarm模式使用
environment 添加環境變量
networks 加入網絡
ports 暴露容器端口,與-p相同,但端口不能低於60
volumes 掛載宿主機路徑或命令卷
restart 重啓策略,默認no,always,no -failure,unless-stoped
hostname 容器主機名

Docker Compse經常使用命令:

字段 描述
build 從新構建服務
ps 列出容器
up 建立和啓動容器
exec 在容器裏面執行命令
scale 指定一個服務容器啓動數量
top 顯示容器進程
logs 查看容器輸出
down 刪除容器/網絡/數據卷和鏡像
stop/start/restart 中止/啓動/重啓服務

Compose命令說明

  • 基本的使用格式
docker-compose [options] [COMMAND] [ARGS...]
  • docker-compose選項
    --verbose輸出更多調試信息
    --version打印版本並退出
    -f, --file FILE使用特定的compose模板文件,默認爲docker-compose.yml
    -p, --project-name NAME指定項目名稱,默認使用目錄名稱

Docker consul容器服務更新與發現

  • 容器服務更新與發現拓撲圖
    在這裏插入圖片描述

Consul

  • Consul是HashiCorp公司推出的開源工具,用於實現分佈式系統的服務發現與配置
  • Consul的特性
    1.Consul支持健康檢查,容許存儲鍵值對
    2.一致性協議採用Raft算法,用來保證服務的高可用
    3.成員管理和消息廣播採用GOSSIP協議,支持ACL訪問控制
  • 方便部署,與Docker等輕量級容器可無縫配合
  • 構建自動發現的Docker服務架構
  • 創建Consul服務php

    1.每一個提供服務的節點上都要部署和運行Consul的agent
    2.Consul agent有兩種運行模式
    Server
    Client
    3.Server和Client只是Consul集羣層面的區分,與搭建在Cluster之上的應用服務無關
  • Consul經常使用的命令
    -v 數據卷
    -d 放在後臺執行
    -i 標準性輸入
    -t 分配僞終端
  • Consul的做用
    1.作編排時須要修改配置文件,實現多配置文件同時修改
    2.擴展性的文件放在vhost中,節偶的方式

1、安裝Docker-ce引擎

#安裝依賴包
yum install yum-utils device-mapper-persistent-data lvm2 -y

#設置阿里雲鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安裝Docker-ce
yum install -y docker-ce

#關閉防火牆及加強型安全功能
systemctl stop firewalld.service
setenforce 0

#啓動Docker並設置爲開機自啓動
systemctl start docker.service
systemctl enable docker.service

#檢查相關進程開啓狀況
ps aux | grep docker

#重載守護進程
systemctl daemon-reload

#重啓服務
systemctl restart docker

2、部署docker-compose

#下載安裝compose
curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#提權方便調用
chmod +x /usr/local/bin/docker-compose

#創建compose站點
mkdir /root/docker_compose

3、部署nginx+Tomcat

#創建compose文件
vim /root/docker-compose/docker-compose.yml
#compose版本號,有一、二、3
version: '3.3'
#服務名稱
services:
  nginx:
#主機名
    hostname: nginx
#創建鏡像須要的目錄、dockerfile腳本名
    build:
      context: ./nginx
      dockerfile: Dockerfile
#映射宿主機端口
    ports:
     - 1216:80
     - 1200:443
#工做組:同一集羣一個名字
    networks:
     - test
#創建數據集的目錄
    volumes:
     - ./wwwroot:/usr/local/nginx/html
  tomcat:
    hostname: tomcat
    build:
      context: ./tomcat
      dockerfile: Dockerfile
    ports:
     - 888:8080
    networks:
     - test
networks:
  test:

#須要創建新鏡像的服務須要放在compose工做站點中
[root@localhost docker_compose]# ls
docker-compose.yml  nginx  tomcat

#創建容器
「-f」  指定compose文件
docker-compose -f docker-compose.yml up -d

4、docker-consul+template

實驗環境html

名稱 角色 IP地址 所需環境包
centos7-1 master 192.168.142.128 Docker-ce、Compose 、Consul、Consul-template
centos7-2 slave1 192.168.142.129 Docker-ce、registrator
centos7-min slave2 192.168.142.130 Docker-ce、registrator
  • master端操做
    #安裝Consul
    [root@localhost ~]# mkdir consul
    [root@localhost ~]# cd consul/
    [root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip
    [root@localhost consul]# ls
    consul  consul_0.9.2_linux_amd64.zip

#移動文件,方便識別
[root@localhost consul]# mv consul /usr/bin/node

#設定代理並後臺啓動
[root@localhost consul]# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.142.128 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &linux

#查看後臺進程
[root@localhost consul]# jobs
[1]+ 運行中 consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.142.128 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &nginx

 
 

「agent」 使用agent代理功能git

「-server」 提供server功能github

「-bootstrap」 參與選舉爲領袖web

「-ui」 提供用戶界面算法

「-data-dir」 參數存儲位置docker

「-bind」 綁定地址

「-node」 定義節點名稱

- 檢查羣集狀態
```shell
#查看羣集信息
[root@localhost consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.142.128:8301  alive   server  0.9.2  2         dc1

#過濾leader信息
[root@localhost consul]# consul info | grep leader
        leader = true
        leader_addr = 192.168.142.128:8300
  • 經過httpd api 獲取集羣信息
curl 127.0.0.1:8500/v1/status/peers #查看集羣server成員

curl 127.0.0.1:8500/v1/status/leader #集羣Raf leader

curl 127.0.0.1:8500/v1/catalog/services #註冊的全部服務。

curl 127.0.0.1:8500/v1/catalog/nginx #查看nginx服務信息

curl 127.0.0.1:8500/v1/catalog/nodes #集羣節點詳細信息
  • 使節點服務器中的容器自動加入
#安裝registrator(註冊器)
#該工具可檢查容器運行狀態自動 進行註冊,還可註銷docker容器的服務
[root@localhost ~]# docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.142.129 \
consul:#192.168.142.128:8500
  • 測試功能是否正常
[root@localhost ~]# docker run -itd -p:83:80 --name test-01 -h test01 nginx
[root@localhost ~]# docker run -itd -p:84:80 --name test-02 -h test02 nginx
[root@localhost ~]# docker run -itd -p:85:80 --name test-03 -h test03 httpd
[root@localhost ~]# docker run -itd -p:86:80 --name test-04 -h test04 httpd
  • 驗證羣集是否創建成功
    瀏覽器中輸入http:#192.168.142.128:8500,單擊「NODES」,而後點擊「consurl-seerver01」,便可看到五個服務(圖形化界面)

    在這裏插入圖片描述
    5、創建template進行代理

  • 手工編譯安裝nginx1.12.0
    (前面博客有詳細的)

  • 安裝consul-template
    template屬於守護進程,用於實時查詢consul集羣信息,並實時使用模板進行配置文件的生成。
    [root@localhost ~]# unzip consul-template_0.19.3_linux_amd64.zip
    #啓用template命令
    [root@localhost ~]# mv consul-template /usr/bin/
  • 撰寫nginx配置文件模板
    [root@localhost consul]# vim nginx.ctmpl        #nginx配置文件的模板
    upstream http_backend {         #服務器池的名稱
    {{range service "nginx"}}
    server {{.Address}:{{.Port}};     #調用變量:服務器節點的地址和端口
    {{end}}
    }

server {
listen 110;
server_name localhost 192.168.142.128; #master端地址
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / { #請求頭部信息的設定
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr; #後端服務器IP
proxy_set_header Client-IP $remote_addr; #client的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #forward跳轉地址
proxy_pass http:#http_backend; #請求跳轉給http_backend服務器池
}
}

- 修改配置文件

```shell
#更改nginx配置文件
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
#在18行下插入如下內容
include     vhost/\*.conf;                    #添加include方便nginx識別模板生成的配置文件

#此時尚未這個文件,須要去建立
[root@localhost nginx-1.12.0]# cd /usr/local/nginx/conf/
[root@localhost conf]# mkdir vhost      #建立虛擬機目錄

#啓用template模板(啓用後會進入監控模式)
[root@localhost ~]# consul-template -consul-addr 192.168.142.128:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
「-consul-addr」 #指定consul端地址

「-template」 #後方從左到右分別爲:模板文件路徑、生成的配置文件名稱、重載nginx

「–log-level」 #寫入日誌的等級

謝謝閱讀!!!

相關文章
相關標籤/搜索