如何更新在Docker容器中运行的应用程序? (例如,春季靴)

时间:2019-01-31 09:54:21

标签: spring-boot docker dockerfile

我正试图找出docker的第100次。现在,我创建spring-boot简单应用程序并为其创建docker image

FROM openjdk:8
EXPOSE 8080
ADD /build/libs/hello-docker-0.0.1-SNAPSHOT.jar hello-docker.jar
ENTRYPOINT ["java", "-jar", "hello-docker.jar"]

我逐步做了什么:

1)构建我的应用程序(结果,我的hello-docker-0.0.1-SNAPSHOT.jar出现在build文件夹中)

2)移至Docker file所在的目录并执行以下命令:docker build -f Dockerfile -t springdocker .

3)将此image作为容器运行:docker run -p 8080:8080 springdocker

结果,我的应用程序成功启动。

但是现在我决定在应用程序中进行一些更改。我做到了,并尝试重复所有步骤。 1-> 2-> error

在第2步中,创建了新映像,而旧映像处于活动状态。原来,我需要停止旧的并且开始新的。

这不舒服。我凭直觉理解这不是应该如何工作。我不了解如何正确更新容器。我经常更改我的应用程序,如果我需要停止容器,然后创建一个映像,然后启动它-这不是方便,而是一个麻烦。同样成功,我可以停止我的应用程序并在没有docker的情况下启动一个新应用程序。我了解我不了解它是如何工作的,我希望有人向我解释如何做。

2 个答案:

答案 0 :(得分:0)

您可以使用docker-compose,这将节省您很多时间。

只需在与Dockerfile相同的文件夹中写入一个docker-compose.yml文件:

version: '3.5'
services:
  yourapplication:
    build: . -> this is the location of your dockerfile
    image: yourapplication_imagename
    container_name: yourapplication_containername
    ports:
       - "8080:8080"
    tty: true

而且,要更新应用程序,您只需运行:

docker-compose build --no-cache yourapplication
docker-compose up -d

这将重新创建图像,并将容器替换为更新后的应用程序。

没有docker-compose:您已经对此here

有很好的了解

答案 1 :(得分:0)

您应该使构建过程自动化。如果此过程的理想结果是docker映像,则在创建.jar

之后,您的自动构建过程不应停止

幸运的是,有一个很好的教程,用于使用不同的构建工具(Maven,Gradle)构建用于运行Spring Boot应用程序的Docker映像: https://spring.io/guides/gs/spring-boot-docker/

最后,您将可以仅使用

将应用程序部署到Docker映像中。
C:\Blockchain\IBM_Blockchain\Chaincode_Samples\marbles\node_modules\pkcs11js>if not defined npm_config_node_gyp (node "C:\Users\dany.vandermeij\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "C:\Users\dany.vandermeij\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp ERR! configure error
gyp ERR! stack Error: Command failed: C:\Users\dany.vandermeij\AppData\Local\Programs\Python\Python37-32\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack   File "<string>", line 1
gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack                                ^
gyp ERR! stack SyntaxError: invalid syntax
gyp ERR! stack
gyp ERR! stack     at ChildProcess.exithandler (child_process.js:275:12)
gyp ERR! stack     at emitTwo (events.js:126:13)
gyp ERR! stack     at ChildProcess.emit (events.js:214:7)
gyp ERR! stack     at maybeClose (internal/child_process.js:925:16)
gyp ERR! stack     at Socket.stream.socket.on (internal/child_process.js:346:11)
gyp ERR! stack     at emitOne (events.js:116:13)
gyp ERR! stack     at Socket.emit (events.js:211:7)
gyp ERR! stack     at Pipe._handle.close [as _onclose] (net.js:557:12)
gyp ERR! System Windows_NT 10.0.17134
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\dany.vandermeij\\AppData\\Roaming\\npm\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Blockchain\IBM_Blockchain\Chaincode_Samples\marbles\node_modules\pkcs11js
gyp ERR! node -v v8.11.4
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! pkcs11js@1.0.17 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the pkcs11js@1.0.17 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\dany.vandermeij\AppData\Roaming\npm-cache\_logs\2019-01-31T10_05_52_209Z-debug.log