后端架构学习(1)- docker

本贴最后更新于 1431 天前,其中的信息可能已经时移世易

后端架构学习(1)- docker

之前因为做的大多是后台管理系统的项目,重心在于业务上,基本上没有考虑过后端架构的问题。

目前实习项目开始接触到后端架构,虽然是很小一部分,但是还是希望将自己的学习与理解记录下来。

V1 架构

1. 技术栈

首先说一下 V1 版的技术栈:

  • SpringBoot
  • MySQL
  • docker

2. 架构图

没错,就是最简单的架构,一般 web 后端这样部署就行了。

v1 架构.png

需要注意的是,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

navicatmysql.png

嗯,不错,全新的 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

demo.png

之前 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 项目了。😄

dockerspringboot.png

如果没有 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. 总结

  1. 有了 docker,再也不用繁琐的安装软件,配置环境等工作了!🍺
  2. 架构虽然简单,在低并发的情况下应该够用了。
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    140 引用 • 441 回帖 • 2 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...