我是docker的新手,我们正在尝试为我的项目创建docker镜像,并使用它在简单的Maven命令中运行
mvn verify
快速的Google搜索给了我- Dockerfile
FROM maven:3.6.0-jdk-8
COPY src C:/docker/
COPY pom.xml C:/docker/
COPY testng.xml C:/docker/
RUN mvn -f C:\docker clean verify
从以上命令我的理解是,从docker hub获取maven 3.6镜像并将现有项目文件复制到docker容器并运行maven命令。
我的 POM.XML 看起来像
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.5</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.masterthought</groupId>
<artifactId>cucumber-reporting</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.44.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
<groupId>net.masterthought</groupId>
<artifactId>maven-cucumber-reporting</artifactId>
<version>3.8.0</version>
<executions>
<execution>
<id>execution</id>
<phase>verify</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<projectName>sample</projectName>
<outputDirectory>target/cucumber-reports/advanced-reports</outputDirectory>
<cucumberOutput>target/cucumber-reports/CucumberTestReport.json</cucumberOutput>
<buildNumber>1</buildNumber>
<parallelTesting>false</parallelTesting>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我说错了
POM file C:docker specified with the -f/--file command line argument does not exist
我知道,我的Docker基础知识有问题,但是如果您教我/告诉我这里可能是什么问题,那将对您有很大帮助。
最佳答案
C:/docker/
在maven:3.6.0-jdk-8
图片中不是有效路径,您应该改用/docker/
这样的名称。
以下Dockerfile
:
FROM maven:3.6.0-jdk-8
COPY pom.xml /docker/
COPY testng.xml /docker/
COPY src /docker/
RUN cd /docker/ && mvn clean verify
应该工作并在Docker容器中运行
mvn clean verify
。您还可以设置工作目录以避免在各处重复/docker/
:FROM maven:3.6.0-jdk-8
RUN mkdir /docker
WORKDIR /docker
COPY pom.xml .
COPY testng.xml .
COPY src .
RUN mvn clean verify
最后,像您一样使用Maven进行构建时的一个小窍门(超出问题范围,但要知道):您可以在
mvn dependency:resolve
指令之后下载依赖项(使用COPY pom.xml /docker/
),从而显着减少构建时间,例如:FROM maven:3.6.0-jdk-8
RUN mkdir /docker
WORKDIR /docker
COPY pom.xml .
RUN mvn dependency:resolve
COPY testng.xml .
COPY src .
RUN mvn clean verify
这样,如果您两次构建镜像,但是仅第二次更新
src
文件夹中的文件,则Docker将能够使用缓存的层并从COPY src .
层重新启动(因此不必重新下载所有依赖项)。但是,当然,如果您更新pom.xml
,Docker将在下一个构建过程中重新下载所有依赖项。
关于maven - 如何使用dockerfile中的Maven创建和运行Docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55303475/