docker - 如何使用Dockerfile正确构建Spring Boot Docker镜像?

标签 docker spring-boot docker-build

我具有以下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文件,我应该做什么?

最佳答案

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-plugin:
https://spring.io/guides/gs/spring-boot-docker/

希望有帮助!

关于docker - 如何使用Dockerfile正确构建Spring Boot Docker镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39838650/

相关文章:

spring - 防止 Spring Boot 注册 servlet 过滤器

docker - 如何创建大于 20GB 的 windows docker 镜像?

Docker 看不到所有磁盘 - 设备上没有剩余空间

docker - Kubernetes适用于多用户应用程序,每个项目具有特定的隔离资源

docker - 如何使用Docker Dockerfile创建启用PostgreSQL图像的PostGIS

docker - docker 上的 repmgrd 和 supervisord - 失去 parent ?

spring - 将 Spring(Boot?)添加到现有的 RESTEasy JAX-RS 应用程序

docker - 在Windows 8.1上安装restcomm docker镜像

java - 我可以使用 HandshakeInterceptor 和 graphql-spring-boot-starter 来获取 Cookie 吗?

docker - 从多阶段 Docker 构建中提取文件