Docker【Java 高级】4

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Docker【Java 高级】4

我们自定义的网络docker当我们维护好了对应的关系,推荐我们平时这样使用网络!

好处:

redis -不同的集群使用不同的网络,保证集群是安全和健康的

mysql-不同的集群使用不同的网络,保证集群是安全和健康的


网络连通



# 测试两个不同的网络连通  再启动两个tomcat 使用默认网络,即docker0
$ docker run -d -P --name tomcat01 tomcat
$ docker run -d -P --name tomcat02 tomcat
# 此时ping不通



# 要将tomcat01 连通 tomcat—net-01 ,连通就是将 tomcat01加到 mynet网络
# 一个容器两个ip(tomcat01)
[root@centos-7 kuangstudy]# docker network connect mynet tomcat01
[root@centos-7 kuangstudy]# docker network inspect mynet 



docker exec -it tomcat01 ping tomcat-net-01
# 01连通 ,加入后此时,已经可以tomcat01 和 tomcat-01-net ping通了
# 02是依旧不通的

结论:假设要跨网络操作别人,就需要使用docker network connect 连通!

实战:部署Redis集群



docker rm -f $(docker ps -aq)

创建网卡

# 创建网卡
docker network create redis --subnet 172.38.0.0/16
# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
### 可忽略以下
cd /mydata/
cd redis
ls
node-1  node-2  node-3  node-4  node-5  node-6
 cd node-1
 cd conf/
 ls
redis.conf
 cat redis.conf 
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
### 可忽略以上
# 通过脚本运行六个redis
for port in $(seq 1 6); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done



docker ps



docker exec -it redis-1 /bin/sh #redis默认没有bash
ls
appendonly.aof  nodes.conf
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379  --cluster-replicas 1
yes
/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379  --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
M: 21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
M: 4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: 46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
S: 511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379
   replicates 46e433d254b6ba98fe9b54be5f341a1950d56de3
S: 9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379
   replicates 21a1dc8beedf2bd2156d23de8faa1f8980af2342
S: ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379
   replicates 4c14b60d4df34ba2a3a42425736fbf73bac607a9
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: 21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379
   slots: (0 slots) slave
   replicates 4c14b60d4df34ba2a3a42425736fbf73bac607a9
S: 9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379
   slots: (0 slots) slave
   replicates 21a1dc8beedf2bd2156d23de8faa1f8980af2342
S: 511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379
   slots: (0 slots) slave
   replicates 46e433d254b6ba98fe9b54be5f341a1950d56de3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
/data # 

docker搭建redis集群完成!

/data # redis-cli -c
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:155
cluster_stats_messages_pong_sent:144
cluster_stats_messages_sent:299
cluster_stats_messages_ping_received:139
cluster_stats_messages_pong_received:155
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:299
127.0.0.1:6379> cluster nodes
46e433d254b6ba98fe9b54be5f341a1950d56de3 172.38.0.13:6379@16379 master - 0 1655390241409 3 connected 10923-16383
4c14b60d4df34ba2a3a42425736fbf73bac607a9 172.38.0.12:6379@16379 master - 0 1655390240598 2 connected 5461-10922
ce3f3598affcb27a6b7c93651e93d23daabee940 172.38.0.16:6379@16379 slave 4c14b60d4df34ba2a3a42425736fbf73bac607a9 0 1655390240396 6 connected
9761143a2de3c97230e67617197e868c5c6fa99f 172.38.0.15:6379@16379 slave 21a1dc8beedf2bd2156d23de8faa1f8980af2342 0 1655390240901 5 connected
21a1dc8beedf2bd2156d23de8faa1f8980af2342 172.38.0.11:6379@16379 myself,master - 0 1655390241000 1 connected 0-5460
511b221a21070e2daa5e42bf32082e5cb6489766 172.38.0.14:6379@16379 slave 46e433d254b6ba98fe9b54be5f341a1950d56de3 0 1655390240000 4 connected
127.0.0.1:6379> 


测试三主三从

127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK
172.38.0.13:6379> 
[root@centos-7 kuangstudy]# docker stop redis-3
redis-3
172.38.0.13:6379> get a
Could not connect to Redis at 172.38.0.13:6379: Host is unreachable
(17.43s)
not connected> get a 
Could not connect to Redis at 172.38.0.13:6379: Host is unreachable
(1.58s)
not connected> 
# Ctrl + C

因为13已经停止服务了,所以在13中不能get

所以在14中可以get到

/data # redis-cli -c
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379
"b"

完成三主三从

我们使用docker之后,所有的技术都会慢慢变得简单起来!

SpringBoot微服务打包Docker镜像

1、构建SpringBoot项目

一个HelloController

idea运行测试


2、打包运行

mvn package

测试java jar


3、编写dockerfile

可以安装插件docker

在idea中新建Dockerfile文件,并编写

FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]

4、构建镜像

# 1.复制jar和DockerFIle到服务器
# 2.构建镜像
$ docker build -t xxxxx:xx  .



[root@centos-7 idea]# ls
Dockerfile  docker-hellospringboot-0.0.1-SNAPSHOT.jar
docker build -t dockerhellosb .



docker images



docker run -d -P --name sb-web dockerhellosb

docker ps

curl localhost:端口号
curl localhost:端口号/hello


本机测试

需知虚拟机的ip

ip addr | 2 en33

1 是本机回环地址localhost–127.0.0.1

2 是外网地址 192.168.253.128


5、发布运行

以后我们使用了Docker之后,给别人交付就是一个镜像即可!

相关文章
|
7月前
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
7月前
|
JavaScript Java Docker
干货含源码!如何用Java后端操作Docker(命令行篇)
只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
Java 程序员 API
Java中的异常处理:从基础到高级
【7月更文挑战第28天】在Java编程的世界中,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将带领读者深入理解Java的异常处理机制,从基本的try-catch语句开始,逐步探索更复杂的异常处理策略,如finally块、自定义异常以及异常链。我们还会讨论如何在设计良好的API时利用异常处理来提高用户体验。通过这篇文章,读者将能够更加自信地处理各种异常情况,编写出更加稳定和用户友好的Java应用程序。
|
11月前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
11月前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
495 1
|
12月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
263 4
|
12月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
299 3
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
182 3
|
Java 开发者
Java中的并发编程:从基础到高级
在Java世界中,并发编程是一项至关重要的技能。本文将深入探讨Java并发编程的核心概念、实用工具和高级技术。我们将从线程基础出发,逐步过渡到线程池的使用,最后探索Java并发包中的强大工具,如CyclicBarrier、Semaphore和CountDownLatch。无论你是Java新手还是资深开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你在多线程环境中编写出更加高效、稳定的代码。 【7月更文挑战第30天】
99 7