docker run -d -P httpd:centos docker run -d -p 49888:80 httpd:centos
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
[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
[root@localhost compose_ Inmp]# vim docker-compose.yml
1.不支持製表符tab鍵縮進,須要使用空格縮進 2.一般開頭縮進2個空格 3.字符後縮進1個空格,如冒號、逗號、橫槓 4.用井號註釋 5.若是包含特殊字符用單引號引發來 6.布爾值必須用引號括起來
字段 | 描述 |
---|---|
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 | 容器主機名 |
字段 | 描述 |
---|---|
build | 從新構建服務 |
ps | 列出容器 |
up | 建立和啓動容器 |
exec | 在容器裏面執行命令 |
scale | 指定一個服務容器啓動數量 |
top | 顯示容器進程 |
logs | 查看容器輸出 |
down | 刪除容器/網絡/數據卷和鏡像 |
stop/start/restart | 中止/啓動/重啓服務 |
docker-compose [options] [COMMAND] [ARGS...]
--verbose輸出更多調試信息 --version打印版本並退出 -f, --file FILE使用特定的compose模板文件,默認爲docker-compose.yml -p, --project-name NAME指定項目名稱,默認使用目錄名稱
1.Consul支持健康檢查,容許存儲鍵值對 2.一致性協議採用Raft算法,用來保證服務的高可用 3.成員管理和消息廣播採用GOSSIP協議,支持ACL訪問控制
創建Consul服務php
1.每一個提供服務的節點上都要部署和運行Consul的agent 2.Consul agent有兩種運行模式 Server Client 3.Server和Client只是Consul集羣層面的區分,與搭建在Cluster之上的應用服務無關
-v 數據卷 -d 放在後臺執行 -i 標準性輸入 -t 分配僞終端
1.作編排時須要修改配置文件,實現多配置文件同時修改 2.擴展性的文件放在vhost中,節偶的方式
#安裝依賴包 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
#下載安裝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
#創建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
實驗環境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 |
#安裝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
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」,便可看到五個服務(圖形化界面)
手工編譯安裝nginx1.12.0
(前面博客有詳細的)
template屬於守護進程,用於實時查詢consul集羣信息,並實時使用模板進行配置文件的生成。
[root@localhost ~]# unzip consul-template_0.19.3_linux_amd64.zip #啓用template命令 [root@localhost ~]# mv consul-template /usr/bin/
[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」 #寫入日誌的等級