簡體   English   中英

如何使用Dockerfile正確構建spring boot docker鏡像?

[英]how to properly build spring boot docker image using Dockerfile?

我有以下 Spring Boot 項目結構:

pwd
/Users/eugene/Documents/Dev/Java/workspace/Springboot-Receiver-API

tree
.
├── Dockerfile
├── pom.xml
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── myconpany
│       │           └── myproject
│       │               └── data
│       │                   ├── Application.java
│       │                   ├── ConsumerThreadPool.java
│       │                   ├── ErpConsumer.java
│       │                   ├── configs
│       │                   │   ├── ConsumerConfigFactory.java
│       │                   │   └── DatabaseConfig.java
│       │                   ├── controllers
│       │                   │   ├── AppBeans.java
│       │                   │   ├── BankcustpaymidtableController.java
│       │                   │   ├── CompanynafcodeController.java
│       │                   │   ├── CustcollectionscontactController.java
│       │                   │   ├── CustdirectdebitmandateController.java
│       │                   │   ├── CusttableController.java
│       │                   │   ├── CusttradingpartnercodeController.java
│       │                   │   ├── DirnameaffixController.java
│       │                   │   ├── DirnamesequenceController.java
│       │                   │   ├── DirorganizationnameController.java
│       │                   │   ├── DirpartylocationController.java
│       │                   │   ├── DirpartytableController.java
│       │                   │   ├── DirpersonnameController.java
│       │                   │   ├── DirpersonuserController.java
│       │                   │   ├── HcmworkerController.java
│       │                   │   ├── LogisticselectronicaddressController.java
│       │                   │   ├── LogisticspostaladdressController.java
│       │                   │   ├── LvpaymtranscodesController.java
│       │                   │   ├── MainController.java
│       │                   │   ├── McrcusttableController.java
│       │                   │   ├── McrmessageassociationCOntroller.java
│       │                   │   ├── RetailcusttableController.java
│       │                   │   ├── SpringBootKafkaProducer.java
│       │                   │   ├── Taxgstreliefgroupheading_myController.java
│       │                   │   ├── Taxinformationcusttable_inController.java
│       │                   │   └── WhscusttableController.java
│       │                   └── models
│       │                       ├── Bankcustpaymidtable.java
│       │                       ├── BankcustpaymidtableCompositeKey.java
│       │                       ├── BankcustpaymidtableDao.java
│       │                       ├── Companynafcode.java
│       │                       ├── CompanynafcodeCompositeKey.java
│       │                       ├── CompanynafcodeDao.java
│       │                       ├── Custcollectionscontact.java
│       │                       ├── CustcollectionscontactCompositeKey.java
│       │                       ├── CustcollectionscontactDao.java
│       │                       ├── Custdirectdebitmandate.java
│       │                       ├── CustdirectdebitmandateCompositeKey.java
│       │                       ├── CustdirectdebitmandateDao.java
│       │                       ├── Custtable.java
│       │                       ├── CusttableCompositeKey.java
│       │                       ├── CusttableDao.java
│       │                       ├── Custtradingpartnercode.java
│       │                       ├── CusttradingpartnercodeCompositeKey.java
│       │                       ├── CusttradingpartnercodeDao.java
│       │                       ├── Dirnameaffix.java
│       │                       ├── DirnameaffixCompositeKey.java
│       │                       ├── DirnameaffixDao.java
│       │                       ├── Dirnamesequence.java
│       │                       ├── DirnamesequenceCompositeKey.java
│       │                       ├── DirnamesequenceDao.java
│       │                       ├── Dirorganizationname.java
│       │                       ├── DirorganizationnameCompositeKey.java
│       │                       ├── DirorganizationnameDao.java
│       │                       ├── Dirpartylocation.java
│       │                       ├── DirpartylocationCompositeKey.java
│       │                       ├── DirpartylocationDao.java
│       │                       ├── Dirpartytable.java
│       │                       ├── DirpartytableCompositeKey.java
│       │                       ├── DirpartytableDao.java
│       │                       ├── Dirpersonname.java
│       │                       ├── DirpersonnameCompositeKey.java
│       │                       ├── DirpersonnameDao.java
│       │                       ├── Dirpersonuser.java
│       │                       ├── DirpersonuserCompositeKey.java
│       │                       ├── DirpersonuserDao.java
│       │                       ├── Hcmworker.java
│       │                       ├── HcmworkerCompositeKey.java
│       │                       ├── HcmworkerDao.java
│       │                       ├── Logisticselectronicaddress.java
│       │                       ├── LogisticselectronicaddressCompositeKey.java
│       │                       ├── LogisticselectronicaddressDao.java
│       │                       ├── Logisticspostaladdress.java
│       │                       ├── LogisticspostaladdressCompositeKey.java
│       │                       ├── LogisticspostaladdressDao.java
│       │                       ├── Lvpaymtranscodes.java
│       │                       ├── LvpaymtranscodesCompositeKey.java
│       │                       ├── LvpaymtranscodesDao.java
│       │                       ├── Mcrcusttable.java
│       │                       ├── McrcusttableCompositeKey.java
│       │                       ├── McrcusttableDao.java
│       │                       ├── Mcrmessageassociation.java
│       │                       ├── McrmessageassociationCompositeKey.java
│       │                       ├── McrmessageassociationDao.java
│       │                       ├── Retailcusttable.java
│       │                       ├── RetailcusttableCompositeKey.java
│       │                       ├── RetailcusttableDao.java
│       │                       ├── Taxgstreliefgroupheading_my.java
│       │                       ├── Taxgstreliefgroupheading_myCompositeKey.java
│       │                       ├── Taxgstreliefgroupheading_myDao.java
│       │                       ├── Taxinformationcusttable_in.java
│       │                       ├── Taxinformationcusttable_inCompositeKey.java
│       │                       ├── Taxinformationcusttable_inDao.java
│       │                       ├── Whscusttable.java
│       │                       ├── WhscusttableCompositeKey.java
│       │                       └── WhscusttableDao.java
│       └── resources
│           └── application.properties
└── target
    ├── Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar
    ├── Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar.original
    ├── classes
    │   ├── META-INF
    │   │   ├── MANIFEST.MF
    │   │   └── maven
    │   │       ├── netgloo
    │   │       │   └── spring-boot-mysql-jpa-hibernate
    │   │       │       ├── pom.properties
    │   │       │       └── pom.xml
    │   │       └── myconpany
    │   │           └── Spring-Boot-ReceiverAPI
    │   │               ├── pom.properties
    │   │               └── pom.xml
    │   ├── application.properties
    │   └── com
    │       └── myconpany
    │           └── myproject
    │               └── data
    │                   ├── Application.class
    │                   ├── ConsumerThreadPool.class
    │                   ├── ErpConsumer$1.class
    │                   ├── ErpConsumer$10.class
    │                   ├── ErpConsumer$11.class
    │                   ├── ErpConsumer$2.class
    │                   ├── ErpConsumer$3.class
    │                   ├── ErpConsumer$4.class
    │                   ├── ErpConsumer$5.class
    │                   ├── ErpConsumer$6.class
    │                   ├── ErpConsumer$7.class
    │                   ├── ErpConsumer$8.class
    │                   ├── ErpConsumer$9.class
    │                   ├── ErpConsumer.class
    │                   ├── configs
    │                   │   ├── ConsumerConfigFactory.class
    │                   │   └── DatabaseConfig.class
    │                   ├── controllers
    │                   │   ├── AppBeans.class
    │                   │   ├── BankcustpaymidtableController$1.class
    │                   │   ├── BankcustpaymidtableController.class
    │                   │   ├── CompanynafcodeController$1.class
    │                   │   ├── CompanynafcodeController.class
    │                   │   ├── CustcollectionscontactController$1.class
    │                   │   ├── CustcollectionscontactController.class
    │                   │   ├── CustdirectdebitmandateController$1.class
    │                   │   ├── CustdirectdebitmandateController.class
    │                   │   ├── CusttableController.class
    │                   │   ├── CusttradingpartnercodeController$1.class
    │                   │   ├── CusttradingpartnercodeController.class
    │                   │   ├── DirnameaffixController$1.class
    │                   │   ├── DirnameaffixController.class
    │                   │   ├── DirnamesequenceController$1.class
    │                   │   ├── DirnamesequenceController.class
    │                   │   ├── DirorganizationnameController$1.class
    │                   │   ├── DirorganizationnameController.class
    │                   │   ├── DirpartylocationController$1.class
    │                   │   ├── DirpartylocationController.class
    │                   │   ├── DirpartytableController$1.class
    │                   │   ├── DirpartytableController.class
    │                   │   ├── DirpersonnameController$1.class
    │                   │   ├── DirpersonnameController.class
    │                   │   ├── DirpersonuserController$1.class
    │                   │   ├── DirpersonuserController.class
    │                   │   ├── HcmworkerController.class
    │                   │   ├── LogisticselectronicaddressController$1.class
    │                   │   ├── LogisticselectronicaddressController.class
    │                   │   ├── LogisticspostaladdressController$1.class
    │                   │   ├── LogisticspostaladdressController.class
    │                   │   ├── LvpaymtranscodesController$1.class
    │                   │   ├── LvpaymtranscodesController.class
    │                   │   ├── MainController.class
    │                   │   ├── McrcusttableController$1.class
    │                   │   ├── McrcusttableController.class
    │                   │   ├── McrmessageassociationCOntroller$1.class
    │                   │   ├── McrmessageassociationCOntroller.class
    │                   │   ├── RetailcusttableController$1.class
    │                   │   ├── RetailcusttableController.class
    │                   │   ├── SpringBootKafkaProducer.class
    │                   │   ├── Taxgstreliefgroupheading_myController$1.class
    │                   │   ├── Taxgstreliefgroupheading_myController.class
    │                   │   ├── Taxinformationcusttable_inController$1.class
    │                   │   ├── Taxinformationcusttable_inController.class
    │                   │   ├── WhscusttableController$1.class
    │                   │   └── WhscusttableController.class
    │                   └── models
    │                       ├── Bankcustpaymidtable.class
    │                       ├── BankcustpaymidtableCompositeKey.class
    │                       ├── BankcustpaymidtableDao.class
    │                       ├── Companynafcode.class
    │                       ├── CompanynafcodeCompositeKey.class
    │                       ├── CompanynafcodeDao.class
    │                       ├── Custcollectionscontact.class
    │                       ├── CustcollectionscontactCompositeKey.class
    │                       ├── CustcollectionscontactDao.class
    │                       ├── Custdirectdebitmandate.class
    │                       ├── CustdirectdebitmandateCompositeKey.class
    │                       ├── CustdirectdebitmandateDao.class
    │                       ├── Custtable.class
    │                       ├── CusttableCompositeKey.class
    │                       ├── CusttableDao.class
    │                       ├── Custtradingpartnercode.class
    │                       ├── CusttradingpartnercodeCompositeKey.class
    │                       ├── CusttradingpartnercodeDao.class
    │                       ├── Dirnameaffix.class
    │                       ├── DirnameaffixCompositeKey.class
    │                       ├── DirnameaffixDao.class
    │                       ├── Dirnamesequence.class
    │                       ├── DirnamesequenceCompositeKey.class
    │                       ├── DirnamesequenceDao.class
    │                       ├── Dirorganizationname.class
    │                       ├── DirorganizationnameCompositeKey.class
    │                       ├── DirorganizationnameDao.class
    │                       ├── Dirpartylocation.class
    │                       ├── DirpartylocationCompositeKey.class
    │                       ├── DirpartylocationDao.class
    │                       ├── Dirpartytable.class
    │                       ├── DirpartytableCompositeKey.class
    │                       ├── DirpartytableDao.class
    │                       ├── Dirpersonname.class
    │                       ├── DirpersonnameCompositeKey.class
    │                       ├── DirpersonnameDao.class
    │                       ├── Dirpersonuser.class
    │                       ├── DirpersonuserCompositeKey.class
    │                       ├── DirpersonuserDao.class
    │                       ├── Hcmworker.class
    │                       ├── HcmworkerCompositeKey.class
    │                       ├── HcmworkerDao.class
    │                       ├── Logisticselectronicaddress.class
    │                       ├── LogisticselectronicaddressCompositeKey.class
    │                       ├── LogisticselectronicaddressDao.class
    │                       ├── Logisticspostaladdress.class
    │                       ├── LogisticspostaladdressCompositeKey.class
    │                       ├── LogisticspostaladdressDao.class
    │                       ├── Lvpaymtranscodes.class
    │                       ├── LvpaymtranscodesCompositeKey.class
    │                       ├── LvpaymtranscodesDao.class
    │                       ├── Mcrcusttable.class
    │                       ├── McrcusttableCompositeKey.class
    │                       ├── McrcusttableDao.class
    │                       ├── Mcrmessageassociation.class
    │                       ├── McrmessageassociationCompositeKey.class
    │                       ├── McrmessageassociationDao.class
    │                       ├── Retailcusttable.class
    │                       ├── RetailcusttableCompositeKey.class
    │                       ├── RetailcusttableDao.class
    │                       ├── Taxgstreliefgroupheading_my.class
    │                       ├── Taxgstreliefgroupheading_myCompositeKey.class
    │                       ├── Taxgstreliefgroupheading_myDao.class
    │                       ├── Taxinformationcusttable_in.class
    │                       ├── Taxinformationcusttable_inCompositeKey.class
    │                       ├── Taxinformationcusttable_inDao.class
    │                       ├── Whscusttable.class
    │                       ├── WhscusttableCompositeKey.class
    │                       └── WhscusttableDao.class
    ├── generated-sources
    │   └── annotations
    ├── maven-archiver
    │   └── pom.properties
    ├── maven-status
    │   └── maven-compiler-plugin
    │       └── compile
    │           └── default-compile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    └── test-classes

我的 Dockerfile 看起來像這樣:

FROM java:8
ADD target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

從項目根目錄(/Users/eugene/Documents/Dev/Java/workspace/Springboot-Receiver-API)運行以下命令來構建 docker 鏡像:

sudo docker build - < Dockerfile

我得到以下輸出:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM java:8
 ---> 96cddf5ae9f1
Step 2 : ADD target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar app.jar
lstat target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar: no such file or directory

在同一目錄中,當我運行ls target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar我得到:

target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar

我應該怎么做才能讓 docker build 識別我的target/Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar /Spring-Boot-ReceiverAPI-0.0.1-SNAPSHOT.jar 文件?

AFAIK 您可以使用maven-resources-plugin來確保 Dockerfile 位於適當的位置(然后您甚至可以將 jar 文件的名稱作為變量放入您的 Dockerfile 中):

<build>
    <resources>       
        <resource>
            <directory>${basedir}/src/main/docker</directory>
            <filtering>true</filtering>
            <includes>
                <include>Dockerfile</include>
            </includes>
        </resource>
    </resources>
</build>

或者,更好的是,您按照此處所述選擇maven-docker-pluginhttps : //spring.io/guides/gs/spring-boot-docker/

希望有幫助!

您可以使用Spotifydockerfile-maven-plugin來簡化事情。
該插件默認在 Maven 項目的基本目錄中查找Dockerfile

您可以使用它,例如:

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <repository>${project.groupId}/${project.artifactId}</repository>
                <tag>latest</tag>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

本示例使用latest作為標簽版本創建圖像。
如果有意義,您還可以指定特定版本,例如 pom 的版本:

<tag>${project.version}</tag>

要從先前執行的mvn package構建映像:

mvn dockerfile:build

在構建映像之前打包應用程序:

mvn clean package dockerfile:build

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM