как создать и запустить образ докера с помощью Maven из dockerfile - PullRequest
0 голосов
/ 22 марта 2019

Я новичок в 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    

В моем понимании приведенные выше команды таковы: извлеките образ maven 3.6 из docker hub, скопируйте существующие файлы проекта в контейнер 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-файл C: докер, указанный в аргументе командной строки -f / - file не существует

Я знаю, что у меня проблемы с основами докера, но было бы очень полезно, если бы вы научили / скажите мне, в чем может быть проблема здесь.

1 Ответ

1 голос
/ 22 марта 2019

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

следуетработать и запускать mvn clean verify в контейнере Docker.Вы также можете установить рабочий каталог, чтобы избежать повторения /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 повторно загрузит все зависимости во время следующей сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...