云原生 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
相关文章
|
3月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
890 47
|
4月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
481 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
4月前
|
Cloud Native 算法 区块链
站在巨人的肩膀上:gRPC通过HTTP/2构建云原生时代的通信标准
gRPC是云原生时代高效通信标准,基于HTTP/2实现,支持四种服务方法。通过.proto文件定义接口,生成多语言Stub,实现跨语言调用。其请求响应结构清晰,结合Headers、Data帧与Trailers,保障高性能与可扩展性,广泛应用于微服务架构中。
248 0
|
4月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
422 100
|
4月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
358 99
|
4月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
3月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
3月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
413 2
|
4月前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
246 13
|
4月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
230 8