【云原生】1.5 Docker 进阶实战

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 创建一个redis (mkdir redis),然后打开 redis(cd redis),准备好配置文件(vi redis.conf),输入 :wq 退出并保存。redis使用自定义配置文件启动(记得要添加安全组)

  哈喽~大家好呀,到现在目前为止我们已经学习了4篇文章了,这篇呢我们就开始实战了。


一、创建Java应用

我们在 Spring 的官网下载配置(如下图所示,记得添加 web 与 sql),然后我们用 IDEA 来打开

image.gifimage.png

二、 部署redis

我们这里要安装 redis,输入指令 docker pull redis,我们打开到 data (cd data)中,然后创建一个 redis (mkdir redis),然后打开 redis(cd redis),准备好配置文件(vi redis.conf),输入 :wq 退出并保存。

redis使用自定义配置文件启动(这里有个细节,记得要添加安全组)

docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf

image.gif

image.png

这时我们要使用一个工具——RedisDesktopManager,输入name、host、port、测试一下,ok,没问题。

image.png

三、redis设置密码访问

和我们上面一样,先配置文件(vi redis.conf),然后使用命令 requirepass abc123abc

格式:requirepass + 密码,输入 :wq 退出并保存

image.png

🎉 然后我们重启一下,输入重启指令

docker restart myredis

image.gif

我们再来打开工具 RedisDesktopManager 重新测试一下,发现连不上了,没错这时我们需要密码了。重新 Connect to Redis Server,再次测试一下。

image.png

四、统计访问人数场景

🎄我们这里打开 IDEA,在 application.properties 配置 host 与 password,附上代码

spring.redis.host=139.198.175.74
spring.redis.password=abc123abc

image.gif

🎄创建 CounterController.java 文件,写入代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CounterController {
    @Autowired
    StringRedisTemplate redisTemplate;
    @GetMapping("/hello")
    public String count(){
        Long increment = redisTemplate.opsForValue().increment("count-people");
        return "有 【"+ increment +"】 人访问了这个页面";
    }
}

image.gif

完成之后,在浏览器的地址栏输入 localhost:8080/hello,(hello 是 @GetMapping("/hello") 里面设置的地址),我们看看效果。

75a73e4fb6b24ee59763eb6705f584a9.gif

五、Dockerfile 构建任意应用镜像

我们之前运行 java,是怎样的呢?以 java 为例,

    • SpringBoot 打包成可执行 jar
    • 把jar包上传给服务
    • 服务器运行 java -jar

    也就是说我们在要安装环境在运行,如何我们在另一台主机运行,我们还要安装环境,非常麻烦。

    所以我们有没有这样的一个东西,能让我们其他主机不用安装环境也能运行。

    我们用 IDEA 在我们之前的项目里面新建个文件叫 Dockerfile,写入代码:

    FROM openjdk:8-jdk-slim
    LABEL maintainer=leifengyang
    COPY target/*.jar   /app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]

    image.gif

    🎉新建个文件夹,然后把 Dockerfile 与 jar 包上传。

    image.gifimage.png

    🎉然后我们开始构建镜像

    docker build -t java-demo:v1.0 .

    image.gifimage.png

    image.gif

    🎉构建之后我们再启动镜像

    docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0

    image.gif

    image.png

    然后我们再地址栏输入 “主机号 : 8080/hello” ,我们所有人就都能访问了(记得设置一下安全锁)

    六、应用分享与启动

    如何分享镜像?

    💎登录docker hub

    docker login

    image.gif

    💎给旧镜像起名

    docker tag java-demo:v1.0  leifengyang/java-demo:v1.0

    image.gif

    💎推送到 docker hub

    docker push leifengyang/java-demo:v1.0

    image.gif

    💎别的机器

    docker pull leifengyang/java-demo:v1.0

    image.gif

    💎别的机器运行

    docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0

    image.gif

    💎启动应用容器

    docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0

    image.gif

    好了,截止到这里我们的 Docker 基础部分已经全部讲完了,下一篇预告 2.1 Kubernetes-基础概念。


    相关实践学习
    基于Redis实现在线游戏积分排行榜
    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
    云数据库 Redis 版使用教程
    云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
    相关文章
    |
    1月前
    |
    Cloud Native 测试技术 数据安全/隐私保护
    云原生之使用Docker部署Teedy轻量级文档管理系统
    【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
    73 1
    |
    30天前
    |
    Kubernetes Cloud Native 开发者
    构建高效的云原生应用:Docker与Kubernetes的完美搭档
    【5月更文挑战第29天】 在现代软件开发领域,"云原生"这一术语已经成为高效、可扩展和弹性的代名词。本文将深入探讨如何通过Docker容器化技术和Kubernetes集群管理工具实现云原生应用的构建和管理。我们将剖析Docker的核心原理,揭示其轻量级和易于部署的特点,并进一步探索Kubernetes如何为这些容器提供编排,保证应用的高可用性与自动扩缩容。文章不仅讨论了二者的技术细节,还提供了实践案例,帮助开发者理解并运用这些技术构建和维护自己的云原生应用。
    |
    1月前
    |
    运维 监控 安全
    构建高效自动化运维体系:Ansible与Docker的协同实战
    【5月更文挑战第25天】 在当今快速迭代的软件发布环境中,自动化运维成为确保部署效率和可靠性的关键。本文通过深入分析Ansible和Docker技术,探索它们如何协同工作以构建一个高效的自动化运维体系。文章不仅介绍了Ansible的配置管理功能和Docker容器化的优势,还详细阐述了将两者结合的实践策略,旨在帮助读者理解并实现更智能、更灵活的基础设施管理。
    |
    1月前
    |
    存储 Cloud Native 文件存储
    云原生之使用Docker部署home-page个人导航页
    【5月更文挑战第4天】云原生之使用Docker部署home-page个人导航页
    62 2
    |
    1天前
    |
    jenkins 持续交付 开发者
    利用Docker容器化部署应用的实战指南
    【6月更文挑战第27天】本文详述Docker应用部署,涵盖Docker基本概念、安装、镜像制作及运行。通过编写Dockerfile构建镜像,使用`docker build`、`run`、`push`及`stop`命令管理。集成CI/CD工具如Jenkins,实现自动化构建、测试和部署,提升开发效率与部署质量。Docker助力轻量级、可移植的微服务架构。
    |
    8天前
    |
    Cloud Native 安全 Docker
    云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
    云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
    |
    3天前
    |
    NoSQL Redis Docker
    Docker再学习 - 实战
    Docker再学习 - 实战
    5 0
    |
    1月前
    |
    Kubernetes Cloud Native 持续交付
    【Docker专栏】Kubernetes与Docker:协同构建云原生应用
    【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
    【Docker专栏】Kubernetes与Docker:协同构建云原生应用
    |
    1月前
    |
    Cloud Native 测试技术 数据库
    【云原生之Docker实战】使用Docker部署flatnotes笔记工具
    【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
    92 8
    |
    1月前
    |
    Cloud Native 搜索推荐 测试技术
    云原生之使用Docker部署homarr个人导航页
    【5月更文挑战第18天】云原生之使用Docker部署homarr个人导航页
    72 1

    热门文章

    最新文章