Docker單機網絡拓補圖
Docker的網絡通信
端口映射機制將內容的服務提供給外都網絡訪問
可隨機或指定映射端口範圍
docker run -d httpd:centos
docker run -d -p 49888:80 httpd:centos
Docker Compose容器編排
Docker Compose的前身是Fig,他是一個定義及運行多個Docker容器的工具
Docker Compose非常合適組合使用多個容器進行開發的場景
Dcoker Compose配置常用字段
Compose常用命令
Compose命令說明
- docker-compose選項
–version 打印版本並退出
–verbose 輸出更多調試信息
-f ,–file FILE 使用特定的compose模板文件,默認爲docker-compose.yml
-p , --project-name NAME 指定項目名稱,默認使用目錄名稱
--------------------------compose部署----------------------------
1、在線安裝compose(大約20分鐘)
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
1.1、安裝包將安裝吧放在usr/local/bin目錄下
根目錄創建compose_nginx
mkdir /compose_nginx
cd /compose_nginx
mkdir nginx
cd nginx/
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
將nginx源碼包上傳至nginx目錄
vim Dockerfile
FROM centos:7
MAINTAINER This is Nginx test
RUN yum -y update
RUN yum -y install make gcc gcc-c++ pcre-devel zlib-devel tar
RUN useradd -M -s /sbin/nologin nginx
COPY nginx-1.12.2.tar.gz /opt/
RUN tar zxvf /opt/nginx-1.12.2.tar.gz -C /opt
WORKDIR /opt/nginx-1.12.2/
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
RUN make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD index.html /usr/local/nginx/html/
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
在compose_nginx創建站點目錄
mkdir wwwroot
cd wwwroot
echo "<h1>this is nginx test web</h1>" >> index.html
編寫編排腳本
vim docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1234:80
- 1235:443
networks:
- aaa
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
aaa:
在compose_nginx輸入
docker-compose -f docker-compose.yml up -d
-----------------------------------consul部署------------------------------
服務器:192.168.49.129 Docker-ce Compose Consul Consul-template
服務器:192.168.49.200 Docker-ce registrator
consul服務器部署
根目錄創建
mkdir consul
掛載
cp /opt/consul_0.9.2_linux_amd64.zip /root/consul/
cd /root/consul/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin/
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.49.129 \ (需要改本地地址)
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
解釋
consul agent \ //使用代理功能
-server \ //提供server功能
-bootstrap \ //參與選舉爲領袖
-ui \ //提供web訪問界面
-data-dir=/var/lib/consul-data \ //參數存儲位置
-bind=192.168.7.168 \ //綁定地址
-client=0.0.0.0 \ //面對所有節點終端
-node=consul-server01 &> /var/log/consul.log & //指定本地節點名稱,指定日誌文件目錄,放在後臺運行
#查看羣集信息
consul members
需要關閉防火牆或者開放8500端口,關閉核心防護
firewall-cmd --get-active-zones
firewall-cmd --zone=public --add-port=8500/tcp
setenforce 0
-------------容器服務自動添加到nginx集羣(192.168.49.200)------
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.49.200 \
consul://192.168.49.129:8500
#解釋
[root@docker2 ~]# docker run -d \
--name=registrator \ //指定名稱
--net=host \ //指定網絡
-v /var/run/docker.sock:/tmp/docker.sock \ //指定數據卷
--restart=always \ //restart功能
gliderlabs/registrator:latest \
-ip=192.168.7.129 \ //指定本地IP地址
consul://192.168.7.168:8500 //指consul 地址
測試服務發現功能是否正常
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:88:80 --name test-03 -h test03 httpd
docker run -itd -p:89:80 --name test-04 -h test04 httpd
驗證http和nginx服務是否註冊到consul
瀏覽器輸入"http://192.168.7.168:8500",單擊"NODES",然後單擊"consul-server01",會出現5個服務
在consul服務騎上查看服務
curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"nginx":[]}
準備template nginx模板文件在192.168.49.129
vim /root/consul/nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 83;
server_name localhost 192.168.49.129;
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;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
編譯安裝並配置nginx(在192.168.49.129)
yum install gcc pcre-devel zlib-devel -y
tar zxvf nginx-1.12.2.tar.gz -C /opt
./configure --prefix=/usr/local/nginx
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
include vhost/*.conf;
default_type application/octet-stream;
創建虛擬主機目錄
mkdir /usr/local/nginx/conf/vhost
創建日誌文件目錄
mkdir /var/log/nginx
啓動nginx
/usr/local/nginx/sbin/nginx
配置並啓動template
上傳consul-template_0.19.3_linux_amd64.zip到/root/consul目錄下
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin
consul-template -consul-addr 192.168.49.129:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/aaa.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
#啓動後,會在vhost目錄下自動生成aaa.conf配置文件
ls /usr/local/nginx/conf/vhost/
aaa.conf
使用瀏覽器訪問http://192.168.49.129:83,查看容器nginx的訪問日誌
增加一個nginx容器節點,測試服務發現及配置更新功能(在registrator服務端增加)
docker run -itd -p:85:80 --name test-03 -h test03 nginx
consul服務器監控會有提示自動更新
如果關閉一個容器節點,會在consul服務端註銷此容器節點