Docker【Java 高级】4

本文涉及的产品
云数据库 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之后,给别人交付就是一个镜像即可!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
19天前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
75 0
|
20天前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
248 2
|
20天前
|
Java 持续交付 虚拟化
深入浅出:使用Docker容器化改善Java应用的开发与部署流程
在快速迭代与持续集成的软件开发周期中,确保应用在各种环境中一致运行是一个挑战。本文介绍了如何利用Docker容器技术,来容器化Java应用,以实现环境一致性、简化配置和加速部署过程。我们将从Docker的基础知识开始,探讨其与传统虚拟机的区别,进而深入到如何创建Dockerfile,构建镜像,以及运行和管理容器。此外,文章还将涵盖使用Docker Compose来管理多容器应用的策略,以及如何利用容器化改善CI/CD流程。通过本文,读者将获得关于如何高效地利用Docker改善Java应用开发与部署流程的实践指导。
137 1
|
21天前
|
运维 Java 云计算
深入浅出:使用Docker容器化改进Java应用部署
在当前快速演变的软件开发领域,Docker作为一种开源的容器化技术,已经成为优化应用部署、实现快速交付和高效率运维的关键工具。本文将探讨如何利用Docker容器化技术来改进Java应用的部署流程。我们不仅会介绍Docker的基础知识,还会通过一个实际的Java应用示例,详细展示从创建Dockerfile到构建镜像,再到运行容器的整个过程。此外,文章还将探讨容器化带来的好处,如环境一致性、便捷的版本控制和简化的部署流程等,力求为读者提供一个清晰、易懂的指南,帮助他们在自己的项目中实现Docker容器化,从而提升开发和部署效率。
152 1
|
21天前
|
运维 Java 持续交付
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速发展的软件开发领域,持续集成与持续部署(CI/CD)已成为提高开发效率和软件质量的关键。本文将探讨如何利用Docker容器技术,实现Java应用的高效部署与运维。我们将从Docker的基本概念入手,详细介绍如何将传统的Java应用容器化,并通过实际案例展示容器化带来的便利性和高效性。此外,文章还将探讨Docker容器与传统虚拟机部署方式的对比,以及如何在实际项目中选择最适合的部署策略。通过本文,读者将能够深入理解Docker容器化技术,并学会如何在自己的Java项目中实施和优化。
187 1
|
21天前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在快速迭代与持续集成的开发周期中,如何确保Java应用的一致性、高效部署及易于管理成为了开发与运维团队面临的重大挑战。本文将探讨Docker容器技术如何为Java应用提供一种轻量级、可移植的解决方案,实现环境一致性、简化配置过程并提高开发到生产的流程效率。我们将从Docker的基本概念入手,通过实例详细说明如何将传统的Java应用容器化,以及如何利用Docker Compose来管理多容器应用,最后探讨在使用Docker部署Java应用时的最佳实践和常见问题解决策略。
168 1
|
21天前
|
存储 Java Docker
深入浅出:使用Docker容器化改进Java微服务架构
在快速演进的软件开发领域,微服务架构已成为构建可扩展、灵活且独立部署的应用程序的首选模式。然而,随着服务数量的增加,管理与部署这些服务的复杂性也随之上升。本文将探讨如何利用Docker容器技术,简化并优化Java微服务架构的开发、部署和运维流程。通过具体实例,我们将展示容器化如何为微服务架构带来的高效性、一致性和可伸缩性,从而使开发团队能够更加专注于业务逻辑的实现,而非环境的搭建与维护。
9 1
|
22天前
|
Java Docker 容器
百度搜索:蓝易云【Docker使用之java项目工程的部署】
通过以上步骤,你已经成功在Docker中部署了Java项目工程。这样可以确保你的应用在不同环境中具有一致的运行结果,并且方便地进行部署和管理。
26 7
|
22天前
|
运维 Java 持续交付
深入浅出:使用Docker容器化改进Java应用部署
在当今快速发展的软件开发领域,持续集成和持续部署(CI/CD)已经成为提高开发效率和软件质量的关键。Docker作为一种先进的容器化技术,为解决传统部署过程中的环境一致性问题提供了优雅的解决方案。本文将通过实例演示如何将一个简单的Java Web应用容器化,并使用Docker进行部署。我们将从Docker的基本概念讲起,然后逐步深入到Dockerfile的编写、镜像构建以及容器部署和管理,最终目标是让读者能够独立使用Docker技术优化Java应用的部署流程。
164 2
|
22天前
|
Java Linux 开发者
深入浅出:使用Docker容器化改善Java应用部署
在本篇文章中,我们探讨了Docker作为一种领先的容器化技术,如何为Java应用提供一个轻量级、可移植的运行环境,从而简化部署流程并提高开发效率。通过具体示例,我们将指导读者理解Docker的基本概念,展示如何创建一个Java应用的Docker镜像,并详细说明如何配置和运行容器。此外,我们还将讨论使用Docker的优势,包括环境一致性、便捷的版本控制和易于扩展等,以及如何克服在容器化过程中可能遇到的挑战。本文旨在为有意采用容器化技术改善Java应用部署流程的开发者提供一个全面而深入的指南。
142 0