docker容器和maven项目

本文介绍如何通过Maven项目构建Eureka服务发现的Docker镜像,包括配置pom.xml、编写Main类、设置配置文件及构建Dockerfile等内容。

1:先创建一个maven项目(这边创建了eureka,服务发现者)

1.1这是我的pop.xml

jdk1.8

artifactId demo

name demo

docker.image.profix zhujm

构建的plugins的imagename就是zhujm/demole

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.zzy.demo</groupId>
<artifactId>demo</artifactId>
<name>demo</name>
<version>1.0.0</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
        <relativePath></relativePath>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <!-- The main class to start by executing java -jar -->
        <start-class>com.zzy.demo.Main</start-class>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <docker.image.prefix>zhujm</docker.image.prefix>
        <spring.boot.version>1.3.3.RELEASE</spring.boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-eureka-server</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <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>0.4.3</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- end::plugin[] -->
        </plugins>
    </build>
</project>

Spotify 的 docker-maven-plugin 插件是用于构建 Maven 的 Docker Image

  • imageName指定了镜像的名字,本例为${docker.image.prefix}/${project.artifactId}
  • dockerDirectory指定 Dockerfile 的位置见下图
  • resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。本例,只需一个 jar 文件。
这就是dockerfile所在路径,我指向src/main/docker

1.2:这就是我的Main主程序

package com.zzy.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

1.3:这是我的配置文件

server.port=8000
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
1.4这是我的目录结构


以上的资源参考http://blog.youkuaiyun.com/canot/article/details/52888597 

2.1:Dockerfile 的内容如下

FROM frolvlad/alpine-oraclejdk8

VOLUME /tmp

ADD demo-1.0.0.jar app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

这个参考下http://blog.youkuaiyun.com/wsscy2004/article/details/25878223可以知道其中的意思

其中from是指该项目基于什么,由于我们这边是jar所以基于jdk,frolvlad/alpine-oraclejdk8这个是jdk在docker-hub那边的镜像,不过这个镜像有问题

我们使用这个

frolvlad/alpine-oraclejdk8:slim

VOLUME 是挂在地点,持久化

add 是将文件重命名

enrtypoint不知道

  • FROM(指定基础image)

  • VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。
  • /tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
  • 项目的 jar 文件作为 "app.jar" 添加到容器的
  • ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source

2.2linux安装docker

linux服务器上装好docker,我的linux版本为centos7,这里不建议使用#yum install docker方式安装,因为这种方式安装的版本比较旧,而且在配置远程api时要好多错误,建议使用方式

#curl -fsSL https://get.docker.com/ | sh或#yum install docker-engine,这里以17.0.3-ce版本为例,使用

#docker version命令即可验证是否安装成功,接下来要想在windows中操作远程linux中的docker,那前提是必须

开启docker远程API,修改docker配置文件#vi /usr/lib/systemd/system/docker.service   ,进入编辑模式后,将ExecStart这一行后面加上 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ,改完后如下所示

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  ,这里就写4个0,你可别改成自己的ip哦,保存后退出,重新加载配置文件#systemctl daemon-reload   ,启动docker #systemctl start docker  ,

输入#netstat -anp|grep 2375 显示docker正在监听2375端口,输入#curl 127.0.0.1:2375/info  显示一大堆信息,证明远程api就弄好了

2.3创建docker账户

https://hub.docker.com/去这里注册个账户

去验证邮箱后,去这里

Create Repository

去常见仓库名(仓库名是你以后的地址)
完毕后去linux登陆
登陆命令docker login

2.3构建 Docker Image

执行构建成为 docker image:

mvn package docker:build




<think>好的,我现在需要帮助用户在Jenkins的Docker容器中配置MavenJDK1.8环境。首先,我得理清楚用户的问题现有的引用内容。用户已经提供了一些引用,其中提到了如何运行JDK1.8的容器,安装Jenkins的步骤,以及在Jenkins中配置环境的部分说明。 首先,用户想在一个Jenkins的Docker容器里同时安装MavenJDK1.8。根据引用[3],他们之前是通过运行一个Jenkins镜像,并且挂载了多个卷来启动容器的。不过,默认的Jenkins镜像可能不包含JDK1.8Maven,所以需要手动安装或者定制镜像。 引用[1]中提到使用了一个primetoninc/jdk:1.8的镜像来运行JDK1.8。可能用户希望在这个Jenkins容器里安装同样的JDK版本。同时,引用[2]指出在Jenkins的环境配置中,JDKGit可以不用设置,因为容器启动时已经用了JDK1.8。但这里可能存在误解,因为Jenkins容器本身如果没有预装JDK的话,可能需要手动安装。 接下来,我需要考虑如何将JDK1.8Maven安装到Jenkins容器中。通常有两种方法:一种是进入正在运行的容器,手动安装然后保存为新的镜像;另一种是创建一个Dockerfile,基于Jenkins官方镜像,添加JDKMaven的安装步骤,然后构建自定义镜像。 根据用户提供的引用[3],他们之前运行Jenkins容器时挂载了宿主机的docker.sockdocker二进制文件,可能是为了在容器内执行docker命令。这种情况下,如果用户希望容器内部也具备JDK1.8Maven,可能需要修改Dockerfile或者在启动容器时安装。 不过,用户现在可能是在现有的容器中安装,而不是重新构建镜像。这时候,可以通过进入容器内部,使用apt-get或其他包管理工具安装JDKMaven。但需要注意,Jenkins官方镜像基于什么Linux发行版。通常,Jenkins官方镜像基于Debian,所以应该使用apt-get命令。 例如,进入容器后,更新包列表,安装OpenJDK8Maven。但需要注意,OpenJDK8在Debian的仓库中可能需要添加特定的源,或者直接下载Oracle JDK1.8的二进制包并配置环境变量。同样,Maven也需要下载并解压,设置PATH。 另外,用户可能希望将这些安装步骤固化到Dockerfile中,以便后续直接使用自定义镜像。这样每次启动容器时就不需要重新安装了。这可能是更高效的解决方案。 接下来,我需要考虑如何编写Dockerfile。例如,以jenkins/jenkins:lts为基础镜像,然后安装JDK1.8Maven。比如: FROM jenkins/jenkins:lts USER root RUN apt-get update && \ apt-get install -y openjdk-8-jdk && \ apt-get install -y maven USER jenkins 不过,这样可能会存在问题,因为不同版本的Debian可能默认的OpenJDK版本不同。如果无法通过apt安装JDK1.8,可能需要手动下载并安装。例如,从Oracle官网下载JDK1.8的tar.gz文件,解压到指定目录,并设置JAVA_HOMEPATH环境变量。 同样,对于Maven,如果系统仓库中的版本不符合要求,可以手动下载特定版本,解压并配置环境变量。 此外,用户之前提到在引用[3]中挂载了/data/jenkins/jenkins_home作为卷,这可能包含Jenkins的配置数据。如果在容器中安装软件,需要注意这些安装是否会被持久化。如果用户使用自定义镜像,每次重新创建容器时,软件会被预装,而数据卷可以保持配置。 所以,可能的步骤包括: 1. 创建自定义Dockerfile,安装JDK1.8Maven。 2. 构建镜像并运行容器,挂载必要的卷。 3. 或者在现有容器中手动安装,但需要保存为新的镜像。 另外,用户可能需要配置Jenkins系统设置中的JDKMaven路径。例如,在Jenkins的“全局工具配置”中,指定JDKMaven的安装路径。即使容器内安装了这些工具,Jenkins可能还需要知道它们的路径才能使用。 根据引用[2],用户提到在Jenkins的环境配置中,JDK不用设置,因为启动容器时已经用了JDK1.8。这可能是因为容器本身已经配置了JAVA_HOME环境变量,或者Jenkins默认使用宿主机的环境。但如果在容器内安装了多个JDK版本,可能需要明确指定。 总结,解决方案有两种主要方法: 方法一:在Dockerfile中构建自定义镜像,包含JDK1.8Maven,然后运行容器。 方法二:进入现有的Jenkins容器,手动安装JDK1.8Maven,并配置环境变量,然后提交容器为新的镜像。 对于方法一,更推荐,因为可重复且易于维护。例如,Dockerfile可能如下: FROM jenkins/jenkins:lts USER root # 安装JDK 1.8 RUN apt-get update && \ apt-get install -y wget && \ wget [Oracle JDK 1.8的下载链接] && \ tar -xzf jdk-8uXXX-linux-x64.tar.gz -C /opt && \ rm jdk-8uXXX-linux-x64.tar.gz ENV JAVA_HOME /opt/jdk1.8.0_XXX ENV PATH $JAVA_HOME/bin:$PATH # 安装Maven RUN wget [Maven下载链接] && \ tar -xzf apache-maven-3.6.3-bin.tar.gz -C /opt && \ rm apache-maven-3.6.3-bin.tar.gz ENV MAVEN_HOME /opt/apache-maven-3.6.3 ENV PATH $MAVEN_HOME/bin:$PATH USER jenkins 需要注意,这里需要处理Oracle JDK的下载许可问题,因为直接从Oracle下载可能需要登录账户。因此,可能更建议使用OpenJDK,例如: RUN apt-get install -y openjdk-8-jdk 然后设置JAVA_HOME为/usr/lib/jvm/java-8-openjdk-amd64/ 对于Maven,同样可以使用apt安装,但版本可能较旧,或者手动下载指定版本。 安装完成后,构建镜像: docker build -t jenkins-jdk8-maven . 然后运行容器,使用类似引用[3]中的命令,挂载必要的卷。 对于方法二,如果用户不想重建镜像,可以进入运行的容器docker exec -it jenkins /bin/bash 然后手动安装: 更新包列表,安装OpenJDK8: sudo apt-get update sudo apt-get install openjdk-8-jdk 安装Maven: sudo apt-get install maven 或者手动下载Maven包并解压。 但需要注意,容器内的用户权限,可能需要使用root用户(在进入容器后切换为root,或者使用USER root在Dockerfile中)。 然后,检查是否安装成功: java -version mvn -v 之后,在Jenkins的系统配置中,可能需要指定JDKMaven的路径,尤其是如果安装路径不在默认环境变量中。例如,在Jenkins的“全局工具配置”中,添加JDKMaven,指定JAVA_HOMEMAVEN_HOME的路径。 根据引用[2],用户提到JDK不用设置,因为启动容器时已经用了JDK1.8。这可能意味着在启动Jenkins容器时,已经通过基础镜像或挂载的环境变量配置了JDK,所以Jenkins会自动检测。但如果是手动安装的,可能需要配置。 最后,测试Jenkins任务是否可以使用JDK1.8Maven。 可能的问题包括:容器中缺少必要的依赖,权限问题,或者环境变量未正确配置。需要确保安装过程中没有错误,并且路径正确。 综上,步骤大致为: 1. 创建自定义Dockerfile安装JDK8Maven。 2. 构建并运行镜像。 3. 在Jenkins中配置工具路径(如果需要)。</think>以下是在 Jenkins 的 Docker 容器中配置 Maven JDK 1.8 的完整步骤: ### 方法一:通过 Dockerfile 构建自定义镜像 1. **创建 Dockerfile** ```dockerfile FROM jenkins/jenkins:lts USER root # 安装 OpenJDK 8 RUN apt-get update && \ apt-get install -y openjdk-8-jdk && \ rm -rf /var/lib/apt/lists/* # 设置 JDK 环境变量 ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 ENV PATH $JAVA_HOME/bin:$PATH # 安装 Maven(手动下载指定版本) RUN wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz -P /tmp && \ tar -xzf /tmp/apache-maven-3.8.6-bin.tar.gz -C /opt && \ mv /opt/apache-maven-3.8.6 /opt/maven && \ rm /tmp/apache-maven-3.8.6-bin.tar.gz # 设置 Maven 环境变量 ENV MAVEN_HOME /opt/maven ENV PATH $MAVEN_HOME/bin:$PATH USER jenkins ``` 2. **构建镜像并运行容器** ```bash docker build -t jenkins-jdk8-maven . docker run -d --name jenkins \ -p 8080:8080 \ -v /data/jenkins/jenkins_home:/var/jenkins_home \ -v /etc/localtime:/etc/localtime \ -v /run/docker.sock:/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ jenkins-jdk8-maven ``` ### 方法二:手动进入容器安装(适用于临时调试) 1. **进入正在运行的 Jenkins 容器** ```bash docker exec -it jenkins /bin/bash ``` 2. **在容器内执行安装命令** ```bash # 切换 root 用户 su root # 安装 OpenJDK 8 apt-get update && apt-get install -y openjdk-8-jdk # 手动安装 Maven wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz tar -xzf apache-maven-3.8.6-bin.tar.gz -C /opt mv /opt/apache-maven-3.8.6 /opt/maven # 配置环境变量 echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> /etc/profile echo 'export MAVEN_HOME=/opt/maven' >> /etc/profile echo 'export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile ``` 3. **验证安装** ```bash java -version # 应显示 openjdk 1.8 mvn -v # 应显示 Maven 3.8.6 ``` ### Jenkins 全局工具配置 1. 登录 Jenkins 控制台,进入 `Manage Jenkins > Global Tool Configuration` 2. **JDK 配置** - 若使用 Dockerfile 或手动安装,Jenkins 会自动检测 JDK,无需额外配置[^2] 3. **Maven 配置** - 名称: `Maven-3.8.6` - MAVEN_HOME: `/opt/maven` ### 注意事项 1. **数据持久化**:通过 `-v /data/jenkins/jenkins_home:/var/jenkins_home` 确保配置不丢失[^3] 2. **权限问题**:挂载 Docker 套接字时需确保容器内用户有执行权限[^3] 3. **镜像优化**:建议使用方法一构建自定义镜像,避免重复安装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值