日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker学习笔记(五)docker实战

發布時間:2024/4/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker学习笔记(五)docker实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一.搭建MySQL高可用集群(pxc+HA-Proxy)

二.Nginx+Spring Boot+MySQL?


一.搭建MySQL高可用集群(pxc+HA-Proxy)

參考鏈接:https://hub.docker.com/r/percona/percona-xtradb-cluster/?

通過pxc(MySQL高可用集群解決方案,與傳統的基于主從復制模式的集群架構相比 PXC 最突出特點就是解決了數據復制延遲問題,基本上可以達到實時同步)搭建

(1) 拉取pxc鏡像
?? ? ?
docker pull percona/percona-xtradb-cluster:5.7.21 ? ?

(2) 給pxc鏡像重命名(打tag) 并刪除原來的鏡像
?? ? ?docker tag percona/percona-xtradb-cluster:5.7.21 pxc
?? ?? docker rmi percona/percona-xtradb-cluster:5.7.21

(3) 創建自定義的bridge網絡 用于MySQL集群
? ? ? ?刪除網絡:docker network rm XXX ?
?? ????docker network create --subnet=172.18.0.0/24 pxc-net?

(4) 創建volume 用于持久化數據
?? ? ?docker volume create --name pxc-volume1

(5)創建單個PXC容器

命令詳解:

-e MYSQL_ROOT_PASSWORD=123456 指定數據庫密碼

-e CLUSTER_NAME=PXC 指定集群名稱

-e XTRABACKUP_PASSWORD=123456 指定集群之間數據同步的密碼

--net=pxc-net 指定網段

--ip=172.18.0.2 指定ip
?

[root@10 ~]# docker run -d -p 3301:3306 -v pxc-volume1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc

(6) 搭建PXC集群

? 通過-e CLUSTER_JOIN將該數據庫加入到某個節點上組成集群

docker run -d -p 3302:3306 -v pxc-volume2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 pxc docker run -d -p 3303:3306 -v pxc-volume3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 pxc

在Navicat for MySQL里可以看到三個集群的數據庫

數據庫的負載均衡

(1)拉取haproxy鏡像,并創建haproxy配置文件(/usr/local/docker/haproxy/haproxy.cfg)
? ?
docker pull haproxy
? ??cd /usr/local/ & mkdir -p docker/haproxy/
? ? cd docker/haproxy
?? ?vi haproxy.cfg

global#工作目錄 要和創建容器指定的目錄對應 chroot /usr/local/etc/haproxy#日志文件,等級infolog 127.0.0.1 local5 info#守護進程運行daemondefaultslog globalmode http#日志格式option httplog#日志中不記錄負載均衡的心跳檢測記錄option dontlognull#連接超時(毫秒)timeout connect 5000#客戶端超時(毫秒)timeout client 50000#服務器超時(毫秒)timeout server 50000#監控界面 listen admin_stats#監控界面的訪問的IP和端口bind 0.0.0.0:8888#訪問協議mode http#URI訪問相對地址stats uri /dbs_monitor #統計報告格式stats realm Global\ statistics#登陸帳戶信息stats auth admin:123456#數據庫負載均衡listen proxy-mysql#訪問的IP和端口#假如有人訪問haproxy的3306端口,則將請求轉發給下面的數據庫實例 bind 0.0.0.0:3306 #網絡協議mode tcp#負載均衡算法(輪詢算法)#輪詢算法:roundrobin#權重算法:static-rr#最少連接算法:leastconn#請求源IP算法:source balance roundrobin#日志格式option tcplog#在MySQL中創建一個沒有權限的haproxy用戶,密碼為空。Haproxy使用這個賬戶對MySQL數據庫進行心跳檢測option mysql-check user haproxyserver MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 #使用keepalive檢測死鏈option tcpka

?(2)創建haproxy容器
?docker run -it -d -p 8888:8888 -p 3306:3306 -v /usr/local/docker/haproxy:/usr/local/etc/haproxy --name haproxy01 --privileged --net=pxc-net haproxy

?(3) 根據haproxy配置文件啟動haproxy

docker exec -it haproxy01 bash haproxy -f /usr/local/etc/haproxy/haproxy.cfg

(4) 在mysql數據庫上創建用戶,用于心跳檢測

CREATE USER 'haproxy'@'%' IDENTIFIED BY ''; ##如果創建失敗,可以先輸入一下命令: 刪除用戶并清空權限后再次創建? ? drop user 'haproxy'@'%'; ? flush privileges; ? ?

?

數據庫連接成功:

?

http://192.168.56.10:8888/dbs_monitor

?

二.Nginx+Spring Boot+MySQL?

(1)定義自己的Bridge網絡
? ?docker network create --subnet=172.16.0.0/24 boot-net



(2)創建mysql容器
? ?docker run -d --name cpp-mysql -v v1:/var/lib/mysql -p 3304:3306 -e MYSQL_ROOT_PASSWORD=123456 --net=boot-net
? ?--ip? 172.16.0.8?mysql

(3)mysql創建數據庫,表等

create schema db_springboot collate utf8mb4_0900_ai_ci; use db_springboot ; create table user ( id int not null primary key, username varchar(50) not null, password varchar(50) not null, number varchar(100) not null );insert into user values (1,"chenpp","123456","1101"); insert into user values (2,"tom","123456","1102");

(4) 根據dockerfile將springboot項目打包成鏡像

FROM openjdk:8-jre-alpine ? ? MAINTAINER chenpp LABEL name="springboot" version="1.0" author="chenpp" ? ? COPY springboot-mybatis-0.0.1-SNAPSHOT.jar springboot.jar ? ? CMD ["java","-jar","springboot.jar"] ? #build命令生成鏡像文件? docker build -t springboot-image

(5)? 創建容器
? ?docker run -d --name? boot01?-p 8081:8080 --net=boot-net --ip 172.16.0.10?springboot-image

因為boot01和cpp-mysql在同一個bridge的網段上,相互之間可以通過ip和容器名ping通,故springboot項目中的mysql配置文件的ip地址可以改成對應的容器名cpp-mysql?

?docker run -d --name? boot02?-p 8082:8080 --net=boot-net --ip 172.16.0.11?springboot-image
?docker run -d --name? boot03?-p 8083:8080 --net=boot-net --ip 172.16.0.12?springboot-image


(6)配置nginx.conf(宿主機的/tmp/nginx/nginx.conf)

worker_processes 1; events{worker_connections 1024; } http{include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server{listen 80;location /{proxy_pass http://balance;}}upstream balance{server 172.16.0.10:8080;server 172.16.0.11:8080;server 172.16.0.12:8080;} }

?

(7)創建并啟動nginx容器??
? ? 通過bind mount將宿主機上的nginx.conf掛載到容器內

?docker run -d --name cpp-nginx -p 80:80 -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf --network=boot-net
?--ip 172.16.0.6 nginx?

通過瀏覽器可以正常請求到數據庫數據

?

在centos上請求getIp,可以看到路由到不同的container

[root@10 ~]# curl localhost:80/user/listall [{"id":1,"username":"chenpp","password":"123456","number":"1101"},{"id":2,"username":"tom","password":"123456","number":"1102"}][root@10 ~]# ^C [root@10 ~]# curl localhost:80/user/getIp ip:172.16.0.12 [root@10 ~]# [root@10 ~]# curl localhost:80/user/getIp ip:172.16.0.10 [root@10 ~]# curl localhost:80/user/getIp ip:172.16.0.11 [root@10 ~]# curl localhost:80/user/getIp ip:172.16.0.12

?

總結

以上是生活随笔為你收集整理的docker学习笔记(五)docker实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。