SpingBoot项目部署到远程Docker容器中

本文介绍如何在Idea中实现微服务项目的分布式部署,包括CentOS与Docker的安装配置、MySQL容器化部署及配置调整,以及Spring Boot项目打包成Docker镜像并在Docker中运行的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近几年微服务很火,但是,任何东西都有两面性,有得必有失,那么在选择微服务在解决了快速响应和弹性伸缩的问题同时,它又给我们带来了什么问题?

  1. 分布式系统的复杂性;
  2. 部署,测试和监控的成本问题;
  3. 分布式事务和CAP的相关问题。

今天主要探究在idea中如何解决分布式部署问题。

1. 准备工作

  1. 安装centos7;
  2. 安装Docker
  3. 配置docker远程连接端口;
    vi /usr/lib/systemd/system/docker.service
    找到 ExecStart,并在其后面添加 -H tcp://0.0.0.0:2375
  4. 重启docker;
    systemctl daemon-reload
    systemctl start docker
  5. 设置docker开机自启动;
    systemctl enable docker
  6. 安装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运行。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值