docker-compose部署java项目

简介: docker-compose部署java项目

一、Docker-compse安装



  1. 下载docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


  1. 授权
chmod 777 /usr/local/bin/docker-compose


  1. 查看版本
[root@192 ~]# docker-compose version
docker-compose version 1.24.1, build 4667896b
docker-py version: 3.7.3
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j  20 Nov 2018


二、准备java项目



1. 创建springboot项目


  1. pom文件
<?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.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>docker_images</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>docker_images</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- swagger -->
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>


  1. 配置swagger和编写测试接口
## 1. 引入swagger是方便测试
package com.example.docker_images.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * @author Javacfox
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {
    /**
     * 设置swagger跨域,提供给service调用
     * @return
     */
    @Bean
    public WebMvcConfigurer crossConfigurer(){
        WebMvcConfigurer webMvcConfigurerAdapter = new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/v2/api-docs");
                registry.addMapping("/**");
            }
        };
        return webMvcConfigurerAdapter;
    }
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //基础扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.example.docker_images.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("java")
                .description("java项目打包成docker images并运行")
                .version("1.0.0")
                .build();
    }
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1允许任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 2允许任何头
        corsConfiguration.addAllowedHeader("*");
        // 3允许任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}
# 2. 接口编写
package com.example.docker_images.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping("/sayHello")
    public String say(String userName){
        return "hello,"+userName+"!";
    }
}
# 3. 主类
package com.example.docker_images;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DockerImagesApplication {
    public static void main(String[] args) {
        SpringApplication.run(DockerImagesApplication.class, args);
    }
}


上面是所有的java项目,非常简单,目前只是为了测试。


2. 编写dockerFile、docker-compose.yml文件


  1. dockerFile
# 以jdk8为基础镜像
FROM openjdk:8
# 描述
LABEL description="Java 8"
# 暴露接口
EXPOSE 8088
# 将主机中的jar包添加到镜像中
ADD /docker_images-0.0.1-SNAPSHOT.jar docker_images-0.0.1-SNAPSHOT.jar
# 运行jar包
ENTRYPOINT ["java", "-jar","docker_images-0.0.1-SNAPSHOT.jar"]


  1. docker-compose.yml
version: '3'
services:
  test:
    container_name: java_test #配置容器名
    build:
      context: .
      dockerfile: DockerFile #指定dockerFile文件
    image: java/test:8.0.0 # 指定镜像名
    ports:
          - "8088:8088" # 暴露端口
    volumes:
          - /logs:/logs # 创建容器数据卷


3. 创建并运行镜像


  1. 上传文件到服务器:/root/docker-image


  2. 到服务器命令台


[root@192 ~]# cd /root/docker_image
[root@192 docker_image]# ll
total 26384
-rw-r--r--. 1 root root      217 Nov 15 20:08 docker-compose.yml
-rw-r--r--. 1 root root      188 Nov 15 04:32 DockerFile
-rw-r--r--. 1 root root 27005222 Nov 12 10:27 docker_images-0.0.1-SNAPSHOT.jar
[root@192 docker_image]# docker-compose build
Building test
Step 1/5 : FROM openjdk:8
Trying to pull repository docker.io/library/openjdk ... 
8: Pulling from docker.io/library/openjdk
e4c3d3e4f7b0: Pull complete
101c41d0463b: Pull complete
8275efcd805f: Pull complete
751620502a7a: Pull complete
a59da3a7d0e7: Pull complete
5ad32ac1e527: Pull complete
7ee60316f31a: Pull complete
Digest: sha256:44713efa363430c6d991f59bbc47238838ecf09a2df4dfb8bbbb07a55f8aeeae
Status: Downloaded newer image for docker.io/openjdk:8
 ---> 192ceee8f2fd
Step 2/5 : LABEL description "Java 8"
 ---> Running in 4b14bbeddd1d
 ---> 1b5324a856ad
Removing intermediate container 4b14bbeddd1d
Step 3/5 : EXPOSE 8088
 ---> Running in e08c74d7f0dd
 ---> bb0a7991cb0e
Removing intermediate container e08c74d7f0dd
Step 4/5 : ADD /docker_images-0.0.1-SNAPSHOT.jar docker_images-0.0.1-SNAPSHOT.jar
 ---> 8fa5fc5834ff
Removing intermediate container 32c95ff2d8a0
Step 5/5 : ENTRYPOINT java -jar docker_images-0.0.1-SNAPSHOT.jar
 ---> Running in c40f5144492f
 ---> b7258eff2bc4
Removing intermediate container c40f5144492f
Successfully built b7258eff2bc4
[root@192 docker_image]# docker-compose up -d
Creating java_test ... done
[root@192 docker_image]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
61551d9dbee7        java/test:8.0.0     "java -jar docker_..."   7 seconds ago       Up 7 seconds        0.0.0.0:8088->8088/tcp   java_test


步骤解说:


  1. 进入到jar包所在文件目录
  2. 创建镜像:docker-compose build
  3. 运行镜像:docker-compose up -d


三、访问测试



image


目录
相关文章
|
2天前
|
jenkins 网络安全 持续交付
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-后端项目发布(四)
14 3
|
19小时前
|
Java 数据库连接 Spring
K8S+Docker理论与实践深度集成java面试jvm原理
K8S+Docker理论与实践深度集成java面试jvm原理
|
2天前
|
Java 关系型数据库 MySQL
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
【Java Spring开源项目】新蜂(NeeBee)商城项目运行、分析、总结
13 4
|
2天前
|
存储 Java Maven
Maven 构建 Java 项目
使用 Maven 的 `maven-archetype-quickstart` 插件在 `C:\MVN` 创建 Java 应用项目 `consumerBanking`,命令行参数包括 `-DgroupId`, `-DartifactId` 和 `-DarchetypeArtifactId`。项目包含 src/main/java 和 src/test/java 目录,分别存放 Java 代码和测试代码,以及 src/main/resources 用于存储资源文件。默认生成的 `App.java` 和 `AppTest.java` 分别为应用主类和测试类。
|
2天前
|
移动开发 前端开发 Java
STS里的java 工程项目名称修改和目录设置成源代码
STS里的java 工程项目名称修改和目录设置成源代码
|
2天前
|
Java 开发工具 git
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
新的centos7.9安装docker版本的jenkins2.436.1最新版本-项目发布(三)
12 4
|
2天前
|
JavaScript 前端开发 Java
java项目的打包将vue放到.jar里面部署
java项目的打包将vue放到.jar里面部署
|
2天前
|
前端开发 应用服务中间件 nginx
前后端分离项目Docker部署指南(下)
前后端分离项目Docker部署指南(下)
|
2天前
|
NoSQL 关系型数据库 网络安全
前后端分离项目Docker部署指南(上)
前后端分离项目Docker部署指南(上)
|
2天前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。