docker-项目部署(springboot为例)

Docker部署SpringBoot应用
本文详细介绍使用Docker手动及插件方式部署SpringBoot应用流程,包括生成镜像、推送至阿里云镜像库,以及运行镜像的方法。
手动部署

根据已有的jar生成镜像 新建文件夹dockerfile,将项目的jar移入,接下来编写Dockerfile文件内容如下(简单实例):

FROM java:8
VOLUME /tmp
ADD my-blog.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

将Dockerfile文件和项目jar放在一起,然后执行(需要docker环境)

docker build -t="myblog:v1.0" /dockerfile
(/dockerfile 为dockerfile所在的路径)
插件部署(docker-maven-plugin)
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
                    <!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed-->
                    <imageName>my-blog</imageName>
                    <imageTags>
                        <imageTag>v4</imageTag>
                    </imageTags>
                    <!-- 指定Dockerfile所在的路径 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
        <finalName>my-blog</finalName>
    </build>

其中<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>Dockerfile的路径 Dockerfile文件的内容如下:

#第一行必须指令基于的基础镜像
FROM java:8
#指定维护者的基本信息
MAINTAINER jishanwang123@163.com
VOLUME /tmp
ADD my-blog.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

以上准备完毕,在项目的跟目录执行(需要docker环境)

mvn clean package docker:build

插件部署(推送到阿里云镜像库)

在maven的settings.xml中添加

<server>
      <!--maven的pom中可以根据这个id找到这个server节点的配置-->  
      <id>docker-aliyun</id>
      <!--这里是在阿里云注册的账号-->
      <username>12345678@qq.com</username>
      <!--这里是在阿里云注册的密码-->
      <password>abcdef</password>
      <configuration>
            <!--这是在阿里云注册时填写的邮箱-->
            <email>12345678@qq.com</email>
      </configuration>
    </server>

在pom.xml中添加吐下代码

<properties>
        <docker.repostory>registry.cn-beijing.aliyuncs.com</docker.repostory>
        <docker.registry.name>wangjishan</docker.registry.name>
        <docker.image.prefix>my-blog</docker.image.prefix>
        <docker.image.version>0.1</docker.image.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
<build>
        <plugins>
            <!--spring boot maven插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--docker maven插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--docker镜像相关的配置信息-->
                <configuration>
                    <!--镜像名,这里用工程名-->
                    <imageName>${docker.repostory}/${docker.registry.name}/${docker.image.prefix}:${docker.image.version}</imageName>
                    <!--TAG,这里用工程版本号-->
                    <imageTags>
                        <imageTag>v1</imageTag>
                    </imageTags>
                    <!-- 指定Dockerfile所在的路径 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <serverId>docker-aliyun</serverId>
                    <registryUrl>${docker.repostory}</registryUrl>
                    <pushImage>true</pushImage>
                </configuration>
            </plugin>
        </plugins>
        <finalName>my-blog</finalName>
    </build>

添加完后执行,开始构建 mvn -f pom_ali.xml clean package -DskipTests docker:build

镜像的运行
docker run -v /xxa:/xxb -d -p 22061:22061 imagename:tag

解释: (1) -v 挂载目录 /xxa 宿主机的目录 /xxb容器的目录(Dockerfile中的挂载点) (2) imagename 镜像名称 tag镜像tag
用 Docker 构建、运行、发布一个 Spring Boot 应用

maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)

### 使用 Docker Compose 部 Spring Boot 项目 #### 准备工作 为了使用 `docker-compose` 成功部 Spring Boot 应用程序,需先完成几个准备工作。确保已安装并配置好 DockerDocker Compose 环境[^1]。 #### 编写 Dockerfile 文件 创建一个名为 `Dockerfile` 的文件,在其中定义构建应用程序所需的所有指令。对于典型的 Spring Boot 应用来说,此文件通常会包含基础镜像的选择、应用包的复制以及指定启动命令等内容。 ```dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp COPY target/myapp.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` #### 构建 Docker 镜像 利用上述编写的 `Dockerfile` 来构建自定义的应用镜像。可以通过执行 `docker build -t my-spring-app .` 命令来实现这一点,这里 `-t` 参数用于给新创建的镜像命名以便后续引用。 #### 创建 docker-compose.yml 文件 接下来要做的就是准备 `docker-compose.yml` 文件,该文件描述了服务之间的关系及其各自的属性。下面是一个简单的子: ```yaml version: '3' services: web: image: my-spring-app ports: - "8080:8080" restart: always environment: - TZ=Asia/Shanghai ``` 这段 YAML 定义了一个名为 `web` 的服务实,指定了使用的镜像名称,并映射主机端口到容器内部的服务端口;还设定了重启策略为始终自动重启(`restart: always`)和服务环境变量以匹配中国标准时间(`TZ=Asia/Shanghai`)[^3]。 #### 启动服务 当一切就绪之后,只需在一个终端窗口中输入 `docker-compose up` 即可按照设定好的方式启动所有的关联组件。如果想要以后台模式运行,则可以加上参数 `-d` (`docker-compose up -d`), 这样就不会阻塞当前shell进程[^2]。 #### 查看状态 最后一步是验证所有容器是否正常运作。可通过 `docker ps -a` 检查正在运行中的容器列表,确认它们的状态均为健康上线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值