一.使用Maven插件为SpringBoot应用构建Docker镜像

内容:

1.Docker开启远程管理API

首先我们需要开启Docker的远程管理API。

  • 用vim编辑器修改docker.service文件;

vim /usr/lib/systemd/system/docker.service

  • 需要修改的部分:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

  • 修改后的部分:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

  • 修改配置后需要重新启动Docker服务才能生效;

systemctl daemon-reload
systemctl restart docker

  • 开启防火墙打开的Docker远程管理API端口2375

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

2.使用Maven构建Docker镜像

  • 在应用的pom.xml文件中添加docker-maven-plugin插件的依赖;

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>${docker.maven.plugin.version}</version>
    <executions>
        <!--如果想在项目打包时构建镜像添加-->
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- Docker 远程管理地址-->
        <dockerHost>${docker.host}</dockerHost>
        <images>
            <image>
                <!--定义镜像名称-->
                <name>myrepo/${project.name}:${project.version}</name>
                <!--定义镜像构建行为-->
                <build>
                    <!--定义基础镜像-->
                    <from>openjdk:8</from>
                    <args>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </args>
                    <!--定义哪些文件拷贝到容器中-->
                    <assembly>
                        <!--定义拷贝到容器的目录-->
                        <targetDir>/</targetDir>
                        <!--只拷贝生成的jar包-->
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                    <!--定义容器启动命令-->
                    <entryPoint>["java", "-jar","-Dspring.profiles.active=prod","/${project.build.finalName}.jar"]</entryPoint>
                    <!--定义维护者-->
                    <maintainer>ice_dynasty</maintainer>
                </build>
            </image>
        </images>
    </configuration>
</plugin>

  • 相关配置说明:
    • executions.execution:此处配置了在maven打包应用时构建docker镜像;
    • image.name:用于指定镜像名称,myrepo是仓库名称,${project.name}为镜像名称,${project.version}为镜像标签名称;
    • dockerHost:打包后上传到的docker服务器地址;
    • build.from:该应用所依赖的基础镜像,此处为openjdk
    • entryPoint:docker容器启动时执行的命令,可以使用-Dspring.profiles.active=prod指定应用配置文件;
    • assembly:定义哪些文件拷贝到容器中;
    • assembly.targetDir:定义拷贝到容器的目录;
    • assembly.descriptorRef:只拷贝生成的jar包;
    • maintainer:定义项目的维护者。
  • 添加application-prod.yml配置文件,只是将之前的数据库地址的localhost改为了db

注意:可以把docker中的容器看作独立的虚拟机,xxx-docker访问localhost自然会访问不到mysql,docker容器之间可以通过指定好的服务名称db进行访问,至于db这个名称可以在运行xxx-docker容器的时候指定。

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://db:3306/mydb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root

使用IDEA打包项目并构建镜像

注意:依赖的基础镜像需要先行下载,否则会出现构建镜像超时的情况,比如我本地并没有openjdk:8的镜像,就需要先把镜像pull下来,再用maven插件进行构建。

  • 执行maven的package命令:

  • 构建成功:

  • 镜像仓库已有该镜像:

在Docker容器中运行项目

运行mysql服务

  • 使用docker命令启动:

  docker run -p 3306:3306 --name mysql \
  -v /mydata/mysql/log:/var/log/mysql \
  -v /mydata/mysql/data:/var/lib/mysql \
  -v /mydata/mysql/conf:/etc/mysql \
  -e MYSQL_ROOT_PASSWORD=root  \
  -d mysql:5.7

  • 如果遇到mysql容器无法启动的情况,可以先删除容器,再使用如下命令启动(该命令只是删除了mysql配置文件挂载的那行命令);

  docker run -p 3306:3306 --name mysql \
  -v /mydata/mysql/log:/var/log/mysql \
  -v /mydata/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=root  \
  -d mysql:5.7

  • 进入运行mysql的docker容器:

docker exec -it mysql /bin/bash

  • 使用mysql命令打开客户端:

mysql -uroot -proot --default-character-set=utf8

  • 修改root帐号的权限,使得任何ip都能访问:

grant all privileges on *.* to 'root'@'%';

  • 创建项目数据库:

  • 将项目sql文件拷贝到mysql容器的/目录下:

  • 将sql文件导入到数据库:

运行xxx-docker应用服务

  • 使用docker命令启动(--link表示应用可以用db这个域名访问mysql服务):

  • 开启8080端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一种非常流行的 Java Web 应用程序框架,Docker 可以帮助开发人员将应用程序打包为容器镜像,以便在任何地方运行。以下是 Spring Boot 构建 Docker 镜像的三种方式: 1. 使用 Dockerfile Dockerfile 是一个文本文件,它包含了一系列的指令和配置信息,可以用来构建 Docker 镜像。要使用 Dockerfile 构建 Spring Boot 应用程序的 Docker 镜像,您需要创建一个 Dockerfile 文件,并将其放置在 Spring Boot 项目的根目录下。在 Dockerfile 文件中,您需要指定基础镜像、将应用程序打包成 JAR 文件并将其添加到镜像中、设置应用程序的启动命令等。例如: ``` # 基础镜像 FROM openjdk:8-jdk-alpine # 将应用程序打包成 JAR 文件并将其添加到镜像中 ADD target/myapp.jar /app.jar # 设置应用程序的启动命令 ENTRYPOINT ["java","-jar","/app.jar"] ``` 2. 使用 Maven 插件 Maven 是一个流行的 Java 构建工具,Spring Boot 提供了一个 Maven 插件,可以用于构建 Docker 镜像。要使用 Maven 插件构建 Docker 镜像,您需要在 pom.xml 文件中添加插件配置。在插件配置中,您需要指定基础镜像、设置应用程序的启动命令等。例如: ``` <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>myapp</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> </configuration> </plugin> </plugins> </build> ``` 3. 使用 Docker Compose Docker Compose 是一个用于定义和运行多个容器的工具,可以在一个文件中定义多个容器,并指定它们之间的关系和配置信息。要使用 Docker Compose 构建 Spring Boot 应用程序的 Docker 镜像,您需要创建一个 docker-compose.yml 文件,并将其放置在 Spring Boot 项目的根目录下。在 docker-compose.yml 文件中,您需要指定应用程序容器的配置信息,包括基础镜像、将应用程序打包成 JAR 文件并将其添加到容器中、设置容器的启动命令等。例如: ``` version: '3' services: myapp: build: . image: myapp ports: - "8080:8080" volumes: - .:/app command: java -jar /app/target/myapp.jar ``` 以上是三种常见的 Spring Boot 构建 Docker 镜像的方式,您可以根据自己的需求选择适合的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值