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
?
(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
?(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創建數據庫,表等
(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)
?
(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实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker学习笔记(六)docker-
- 下一篇: docker学习笔记(七)docker-