日常开发工作中,可以把jar包发布为一个docker服务。
如下是一个简单的Dockerfile文件,前提是将Dockerfile和jar包放在同一目录,比如~/dev/test。
FROM java:8
ADD psa2-0.0.1-SNAPSHOT.jar /qqq/
ENTRYPOINT ["java","-jar","/qqq/psa2-0.0.1-SNAPSHOT.jar"]
EXPOSE 6666
在此文件中:
- FROM 语句下载指定的映像,并创建基于此映像的新容器。
- WORKDIR 命令在容器中设置当前工作目录,供以下命令使用。
- COPY 命令将文件从主计算机复制到容器。 第一个参数 (
myapp_code
) 是主计算机上的文件或文件夹。 第二个参数 (.
) 指定文件或文件夹的名称来充当容器中的目标位置。 在本例中,目标位置是当前工作目录 (/app
)。 - RUN 命令执行容器中的命令。 RUN 命令的参数是命令行命令。
- EXPOSE 命令创建新映像中的配置,指定在容器运行时计划打开哪些端口。 如果容器运行 Web 应用,则通常会通过 EXPOSE 命令指定端口 80。
- ENTRYPOINT 命令指定容器启动时应该运行的操作。 在本示例中,它运行新生成的应用。 指定要运行的命令,并将每个参数都指定为字符串数组。
如下命令编译该docker。
sudo docker build -t psaok .
//假设 psa这个jar包本身对外提供服务的端口号是8888。
那么,使用如下命令运行该docker。
sudo docker run -d -p 6666:8888 --name psaok psaok
在这里:左边6666是 服务器上提供端口的地址。
右边8888是Docker内部的端口地址。
这样,就可以使用 http://ip地址:6666 访问该容器了。
注意:如果是在云的虚拟机中部署,需要为其添加入站访问端口权限。
如下命令打开该docker。
sudo docker exec -it psaok bash
bash是指开了一个bash窗口。
进入到psaok的docker中,可以看到存在了一个/qqq目录。
注意:执行如上命令可能失败,可能是bash路径不对,也可能时没有bash,则会报如下错误
OCI runtime exec failed: exec failed: unable to start container process: exec: "/usr/bin/bash": stat /usr/bin/bash: no such file or directory: unknown
这时,需要将bash替换为 sh,或者/bin/sh。
那么,如果jar包中的接口函数本身调用了需要认证的api,则需要为docker中的jdk添加该认证文件。
假设从windows机器上已有生成的认证文件 jssecacerts,则运行命令将其拷贝到docker中。
sudo docker cp jssecacerts 60753f347667:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security
之后docker restart psaok即可。
参照:
使用Dockerfile文件制作java的jar架包镜像具体过程
使用Dockerfile文件制作java的jar架包镜像具体过程_dockerfile java -jar-CSDN博客
注意:每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行