Docker Compose 实战 web 服务
一则或许对你有用的小广告
最近,小哈正在带小伙伴们做前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.2 + Vite 4
,手把手,前端 + 后端,全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已进入第七章 《文章分类模块开发》中,截止到目前,已更新 105150 字,69 篇内容,讲解图:521 张,还在持续爆肝中,后续还会上新更多项目,已有 200+ 小伙伴加入,欢迎点击围观。
本小节中,我们将通过 Docker Compose 搭建一个简单的网站。
需求
这个简单的网站需实现功能:每当用户访问时,后台进行计数,并在页面中显示总访问次数。效果如下:
web 服务被访问次数+1
技术选型
- Web 应用:Spring Boot
- Redis 缓存(用于计数用户访问次数)
开始
web 应用
新建一个 Spring Boot 项目, 主代码如下:
package com.example.dockerdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@SpringBootApplication
@Controller
public class DockerDemoApplication {
private final RedisTemplate redisTemplate;
public static void main(String[] args) {
SpringApplication.run(DockerDemoApplication.class, args);
}
public DockerDemoApplication(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@GetMapping("/")
@ResponseBody
public String index() {
// 对 redis 里面的被访问数执行 +1 操作
Long viewNum = redisTemplate.opsForValue().increment("view_num");
return String.format("<h1>页面总访问次数: %s</h1>", viewNum);
}
}
Spring Boot 的 application.yml
配置文件如下:
spring:
redis:
host: redis
port: 6379
Dockerfile
为 Spring Boot 编写 Dockerfile :
# FROM 指定使用哪个镜像作为基准
FROM openjdk:8-jdk-alpine
# 数据卷
VOLUME /tmp
# 复制文件到镜像中
COPY docker-demo-0.0.1-SNAPSHOT.jar app.jar
# 指定容器内的时区
RUN echo "Asia/Shanghai" > /etc/timezone;
# ENV为设置环境变量
ENV JAVA_OPTS=""
# ENTRYPOINT 为启动时运行的命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]
编译打包 Spring Boot, 然后将 Dockerfile 文件放置在 jar
包的同级目录下,执行如下命令开始构建 web
镜像:
docker build -t web:test .
执行成功后,通过 docker images
可以看到构建成功的本地镜像:
构建 Spring Boot Docker 镜像
docker-compose.yml
编写 docker-compose.yml
文件:
version: '3'
services:
web:
image: "web:test"
ports:
- "8080:8080"
redis:
image: "redis:latest"
运行 compose 项目
在 docker-compose.yml
文件的同级目录下,执行运行命令:
docker-compose up
运行 compose 项目
compose
项目运行成功后,访问 web 服务,可以看到访问次数 +1
功能成功实现:
web 服务被访问次数+1