docker镜像化部署项目

163 阅读2分钟

docker→springboot→jar

准备

1.centos7,安装docker,准备一个springboot的jar包

@RestController
public class DockerController {
    @RequestMapping("/getStrInfo")
    public String getStrInfo(){
        return "Hello packageDocker!";
    }

}

2.在main目录下建一个docker包存放dockerFile

image.png

3.编辑dockerFile

# 使用 JDK 8 环境为基础环境,如果镜像不是本地的将会从 DockerHub 进行下载
FROM java:8
# 作者
MAINTAINER Jansens <xxx@qq.com>
# 在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到 tomcat 容器的工作目录 /tmp目录
VOLUME /tmp
# 复制文件并重命名 spring-boot-docker-1.0.jar 表示打包后的 jar 包名称
ADD dockerPackge-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
# 为了缩短Tomcat启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

以上准备就完成了

打包镜像

1.连接centos7,新建一个文件夹,我这里目录为/opt/app
2.将jar包和编写的dockerFile文件放置在该目录下

[root@localhost app]# ls
Dockerfile  dockerPackge-0.0.1-SNAPSHOT.jar

3.打包镜像(注意后面有个点,-t 表示给容器命名)

[root@localhost app]# docker build -t springbootdemodocker .

需要注意的是容器名字不能大写否则会出现如下错误

[root@localhost app]# docker build -t springbootDemoDocker .
invalid argument "springbootDemoDocker" for t: Error parsing reference: "springbootDemoDocker" is not a valid repository/tag: repository name must be lowercase
See 'docker build --help'.

若出现如下卡卡顿不动现象(一般是第一次),则ctrl+c结束重新执行build就行 image.png 正确build如下

image.png 通过docker images查看容器

image.png 以上就是容器部署过程

查看

1.运行容器
说明:
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中的8085端口映射到容器中的9000(springboot项目中port端口配置的是9000)端口

[root@localhost app]# docker run -d -p 8085:9000 springbootdemodocker

2.访问请求(ip+端口)
image.png

总结

本文采用发是jar包,前后端分离下的分开部署。对于前端页面可以用nginx配置或者用tomcat单独部署,最好做成页面静态化。上述也可改为speingbootWeb应用部署,打成war包。
具体思路为:(仅作参考,一种思路我也没实践过但可行,有看过对应文章)
把上述项目改造为springbootWeb→centos7配置jdk和maven(这里用maven的mvn package xxx打包,对应百度配置即可这里不做阐述,需要注意的是maven配置镜像加速和本地仓库)→docker安装tomcat→docker启动tomcat并进入其webapps目录拷贝放入war包→运行启动→访问→上传至docker私有仓库→其他服务器从私服拉取并运行。(感觉有点问题具体得查漏补缺)

build部分不管,那是idea配置docker插件部署
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!--这是一个测试docker打包spingbootWeb-->
    <groupId>com.example.docker</groupId>
    <artifactId>dockerPackge</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dockerDemoPackge</name>
    <!--打包war包,jar包删除这一行(linux的docker需要安装tomcat并将war包放入对应webapps中,麻烦,不如静态资源单独抽出来)-->
<!--    <packaging>war</packaging>-->
    <description>dockerPackge project for Spring Boot in test</description>
    <properties>
        <java.version>1.8</java.version>
        <!--规定docker打包后镜像名称前缀-->
        <docker.image.prefix>springbootDocker</docker.image.prefix>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--如果是web,移除内置tomcat,否则就注释掉-->
            <!--<exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>-->
        </dependency>
        <!--web工程增加servlet-->
        <!--<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--添加docker插件打包开始-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--镜像名称,从上述配置的具体内容一致-->
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在目录,缺省为target-->
                            <directory>${project.build.directory}</directory>
                            <!--jar 包名,缺省为 $project.artifactId}-${project.version}-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!--添加docker插件打包结束-->
        </plugins>
    </build>

</project>

本文参考链接:www.jianshu.com/p/397929dbc…