云原生 Docker Dockerfile 构建应用

简介: 【1月更文挑战第9天】云原生 Docker Dockerfile 构建应用

Dockerfile 构建应用:

使用Dockerfile 自定义项目镜像。(打包的时候,应该跳过测试)

FROM openjdk:8-jre
# 定义环境变量:
ENV APP_PATH=/apps
# 指定工作目录:
WORKDIR $APP_PATH
# 拷贝文件:
ADD geshanzsq-nav-admin.jar $APP_PATH/apps.jar
# 端口描述:
EXPOSE 8080
# 不变的指令
ENTRYPOINT ["java", "-jar"]
# 可变指令(支持传参)
CMD ["apps.jar"]

实战案例:

编写一个应用,使用Docker打包运行!

1.部署中间件:

部署一个Redis+应用,尝试应用操作Redis产生数据!

在外部主机上/data/redis/目录下创建redis.conf配置文件,添加一以下内容:

appendonly yes
requirepass 131452 #设置Redis密码
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#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

注意:这里的redis版本指定为最新版,如果指定版本需要修改对应版本!!!

修改配置后,docker restart myredis重启Redis!

2.打包-Dockerfile:

FROM openjdk:8-jdk-slim
LABEL maintainer=krian
COPY target/*.jar   /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t java-demo:v1.0 .

3.工程创建:

创建一个SpringBoot+Redis工程,依赖引入:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
  </dependency>
  <!-- redis依赖 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

编写application.properties配置文件:

spring.redis.host=192.168.10.100
spring.redis.password=131452

创建Controller层:

package com.example.demo.controller;
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;
/**
 * @Author: Lunaticer
 * @Create: 2021-10-05 11:28
 * @Tip: Keeping the eyes of the prize !
 * @Description: 控制层-统计访问人数
 */
@RestController
public class TestController {
    @Autowired
    StringRedisTemplate redisTemplate;
    @GetMapping("/hello")
    public String count(){
        Long increment = redisTemplate.opsForValue().increment("count-people");
        return "有【" + increment + "】人访问了这个页面";
    }
}

测试:http://localhost:8080/hello

4.使用Docker打包镜像:

先使用IDEA对当前工程进行打包!!!

创建一个Dockerfile文件到工程目录中:

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

构建镜像:

docker build -t 镜像名称:版本号 .  #.表示定位到当前目录

4.启动容器:

启动应用容器

docker run -d -p 8080:8080 --name myjava-app 镜像名:版本号

分享镜像

# 登录docker hub
docker login
#给旧镜像起名
docker tag java-demo:v1.0  leifengyang/java-demo:v1.0
# 推送到docker hub
docker push leifengyang/java-demo:v1.0
# 别的机器
docker pull leifengyang/java-demo:v1.0
# 别的机器运行
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
相关文章
|
8月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
2134 84
|
10月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1331 108
|
10月前
|
运维 NoSQL Serverless
|
9月前
|
Cloud Native 算法 区块链
站在巨人的肩膀上:gRPC通过HTTP/2构建云原生时代的通信标准
gRPC是云原生时代高效通信标准,基于HTTP/2实现,支持四种服务方法。通过.proto文件定义接口,生成多语言Stub,实现跨语言调用。其请求响应结构清晰,结合Headers、Data帧与Trailers,保障高性能与可扩展性,广泛应用于微服务架构中。
426 0
|
8月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
816 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
8月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
715 2
|
9月前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
503 13
|
10月前
|
运维 NoSQL Serverless
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
在轻休闲游戏流量波动大、生命周期短的背景下,传统架构难以应对成本与扩展挑战。本文介绍了基于阿里云函数计算 FC 和 Redis 构建的新一代服务器架构,实现弹性伸缩、成本优化与高效运维,助力轻休闲游戏快速迭代与稳定运营,提升开发效率并降低运维复杂度。
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
|
9月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
474 8
|
11月前
|
安全 Cloud Native 容器
开发者视角:构建坚不可摧的云原生安全工具 - 安全内生于开发流
云原生时代,运维团队面临容器漏洞、微服务失陷与CI/CD污染三大威胁。通过容器基因解码、微服务免疫与管道净化构建三维防御体系,结合板栗看板、Snyk、Check Point、Aqua等工具,实现从漏洞预测到实时拦截的全链路防护。未来,安全将内生于云原生技术,构建主动免疫防线。
开发者视角:构建坚不可摧的云原生安全工具 - 安全内生于开发流