最近几年微服务很火,但是,任何东西都有两面性,有得必有失,那么在选择微服务在解决了快速响应和弹性伸缩的问题同时,它又给我们带来了什么问题?
- 分布式系统的复杂性;
- 部署,测试和监控的成本问题;
- 分布式事务和CAP的相关问题。
今天主要探究在idea中如何解决分布式部署问题。
1. 准备工作
- 安装centos7;
- 安装Docker;
- 配置docker远程连接端口;
vi /usr/lib/systemd/system/docker.service
找到 ExecStart,并在其后面添加-H tcp://0.0.0.0:2375
- 重启docker;
systemctl daemon-reload
systemctl start docker
- 设置docker开机自启动;
systemctl enable docker
- 安装idea,并安装docker插件。
2. 在Docker中安装mysql
2.1 拉取镜像
docker pull mysql:latest
2.2 运行容器
docker run -itd --name mysql-test -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=123456 mysql
参数说明:
-p 3306:3306
:映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456
:设置 MySQL 服务 root 用户的密码。
--restart=always
:设置容器随着docker的启动自动启动。
2.3 修改配置,让其他容器访问
后面介绍的idea部署docker中,主要是将springboot项目打包,并新建一个docker容器运行。为了让该容器访问当前宿主机上的mysql容器,需要配置mysql服务。
# 连接mysql容器终端 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 mysql-aliyun:容器name /bin/bash 终端目录
docker exec -it mysql-aliyun /bin/bash
# 修改mysql配置
vi /etc/mysql/my.cnf
# 在my.cnf最后添加监听地址
bind-address=0.0.0.0;
# 保存配置文件后,退出mysql容器并重启
docker kill mysql-aliyun
docker start mysql-aliyun
# 没有vim 则需要安装,步骤如下:
# 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
apt-get update
# 安装vim
apt-get install vim
3. 项目部署
3.1 运行配置
另外,为了访问docker容器中的mysql数据库,需要增加如下配置:
--link mysql-aliyun:mysql-aliyun
这里,前一个mysql-aliyun
代表的是远程宿主机的mysql容器的名称,后一个mysql-aliyun
代表的是application.yml
中指定的主机名称。
修改配置内容
在main文件夹下新建docker文件夹,并创建Dockerfile文件,内容如下:
FROM openjdk:8-jdk-alpine
ADD *.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
在pom.xml文件中加入如下配置
<!-- docker 配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<docker.image.prefix>jack.docker.demo</docker.image.prefix>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="src/main/docker" file="target/${project.artifactId}-${project.version}.${project.packaging}"></copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
修改数据库连接的url:jdbc:mysql://mysql-aliyun:3306/gh_springsecurity?serverTimezone=UTC
3.2 Maven打包
执行maven install指令,安装到本地。
3.3 运行
先pull基础镜像,然后再打包镜像,并将镜像部署到远程docker运行。