后端架构学习(1)- docker
之前因为做的大多是后台管理系统的项目,重心在于业务上,基本上没有考虑过后端架构的问题。
目前实习项目开始接触到后端架构,虽然是很小一部分,但是还是希望将自己的学习与理解记录下来。
V1 架构
1. 技术栈
首先说一下 V1 版的技术栈:
- SpringBoot
- MySQL
- docker
2. 架构图
没错,就是最简单的架构,一般 web 后端这样部署就行了。
需要注意的是,SpringBoot 以及 MySQL 都是通过 docker 部署
3. 部署
这部分主要说一下部署步骤,内容主要还是集中在对 docker 的使用。
部署环境:
- VirtualBox
- centos7
- docker-ce
这里假设服务器 IP 为 192.168.56.101
3.1 MySQL 部署
这里使用 5.7 版本 MySQL,首先当然是拉取镜像。(这里可以简单理解成下载 mysql 安装包)
docker pull mysql:5.7
拉取镜像以后,简单部署。(这里可以简单理解成安装 mysql 并运行)
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
- -d 代表后台运行
- -p 3306:3306 代表映射 主机端口:容器端口
- --name mysql 指定容器的名称是 mysql
- -e MYSQL_ROOT_PASSWORD=root 指定数据库 root 用户的密码
- mysql:5.7 最后指定要运行的镜像(这就是刚刚拉取的镜像)
最后,我们就可以访问我们刚刚创建好的 MySQL 容器了。
打开 Navicat 输入 IP 地址为 192.168.56.101,端口为 3306,用户名和密码均为 root
嗯,不错,全新的 MySQL,然后把我们项目所需要的 SQL 导入即可。
注意:如果连接不上,请关闭防火墙
3.2 SpringBoot 部署
SpringBoot 开发环境:
- IDEA
- JDK8
很简单的一个 demo,就是输出端口号。
@RestController
public class HelloController {
@Value("${server.port}")
String port;
@GetMapping()
public String hello() {
return String.format("hello,ccran! at port: %s", port);
}
}
然后通过 IDAE 的 maven 插件进行打包,打包完成后,在 target 文件夹下可以看到项目打包成的 jar 包,假设为 demo.jar,通过参数指定 8081 端口,本地运行看下效果:
java -Dserver.port=8081 -jar demo.jar
之前 MySQL 镜像是通过 docker pull 拿到的,然后通过 docker run 执行镜像就能用了。
我们的 SpringBoot 项目怎么办呢?要是我们能把 SpringBoot 项目做成镜像就好了。
嗯,没错,我们可以通过 docker 提供的叫做 Dockerfile 文件来构建镜像。
首先,创建文件名为 Dockerfile 的文件,内容如下:
# 基础镜像使用java
FROM java:8
# 将jar包添加到容器中并更名为app.jar
ADD demo.jar app.jar
RUN bash -c 'touch /app.jar'
# 运行jar包
ENV JAVA_OPTS=""
ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar
这里需要注意的是,由于我们要指定容器的运行参数 -Dserver.port=xxx ,因此这里通过 JAVA_OPTS 来接收相关的参数。
然后将 Dockerfile 文件以及之前打的包 demo.jar 一起拷贝到服务器的同一目录下。
在该目录下,执行 docker build 命令则会构建出我们的 SpringBoot 镜像
# 通过当前目录构建镜像,名称为demo,tag为1.0
docker build -t demo:1.0 .
等镜像构建成功后,通过我们之前设定的 JAVA_OPTS 参数,指定 SpringBoot 容器运行端口为 8082;并且映射虚拟机的 8082 端口到容器的 8082 端口。
docker run -d -p 8082:8082 -e JAVA_OPTS="-Dserver.port=8082" --name demo demo:1.0
容器启动完毕后,就可以通过 192.168.56.101:8082 访问 SpringBoot 项目了。😄
如果没有 docker,我们必须先在服务器安装 jdk,然后配置环境变量,然后通过 java -jar 的方式运行。(但是有了 docker,方便多了!)😄
3.3 常用 docker 命令
// 查看所有docker镜像
docker images
// 查看当前正在跑[所有]的docker容器
docker ps [-a]
// 删除某个docker镜像
docker rmi 镜像id/镜像名:tag
// 删除某个docker容器
dokcer rm 容器id/容器名
// [滚动]查看容器日志
docker logs [-f] 容器名
// 进入容器并执行bash
docker exec -it 容器名/容器id bash
4. 总结
- 有了 docker,再也不用繁琐的安装软件,配置环境等工作了!🍺
- 架构虽然简单,在低并发的情况下应该够用了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于