四、Dockerfile应用案例教程(将一个或多个jar包部署到docker容器中运行)

系列文章目录

一、Docker安装及初始化配置(Linux版)
二、Docker安装及使用教程(Windows版)
三、Docker常用命令和部署实例(Linux和Windows通用)
四、Dockerfile应用案例教程(将一个或多个jar包部署到docker容器中运行)
五、Docker Compose下载安装及使用教程
六、Docker Swarm、Docker Stack和Portainer的使用
七、清除docker环境中服务、镜像、容器、挂载卷、网络

1.现有环境

现有环境如下:
1.工作目录下有若干个可执行的jar包:在工作目录下打开命令行进行操作(Windows和Linux版的docker均可,这里以Windows为例)
在这里插入图片描述
2.拉取任意一个能运行jar包的jdk镜像:我的是adoptopenjdk/openjdk12
在这里插入图片描述
3.已具备jar包所需的基本组件:例如mysql、redis、nacos等
在这里插入图片描述

2.部署方式

方式一:直接部署jar包为容器(单个jar包)

在这里插入图片描述
假如我只想将nettyserver-1.0.36-SNAPSHOT.jar这个jar包部署成容器运行,只需要直接输入以下命令即可:

docker run -d --name nettyserver -p 8083:8083 -p 8066:8066 -v G:\platform\jarapp:/home/jarapp adoptopenjdk/openjdk12 java -jar -Dfile.encoding=utf-8 /home/jarapp/nettyserver-1.0.36-SNAPSHOT.jar
指令说明:
--name nettyserver:创建的容器名为nettyserver
-p 8083:8083 -p 8066:8066:该jar包所要暴露的端口为8083和8066
-v G:\platform\jarapp:/home/jarapp:将本机的G:\platform\jarapp目录挂载到容器中/home/jarapp目录
adoptopenjdk/openjdk12 :基于这个镜像创建的容器
java -jar -Dfile.encoding=utf-8 /home/jarapp/nettyserver-1.0.36-SNAPSHOT.jar:创建容器时执行这条命令

可以通过docker ps -a命令查看已有容器中是否有nettyserver。
该方式比较方便快捷,但不会生成镜像。

方式二:以启动jar包打包镜像,部署容器(单个和多个jar包均可)

1.Dockerfile指令说明

FROM:构建镜像基于哪个镜像
MAINTAINER:镜像维护者姓名或邮箱地址
RUN:构建镜像时运行的指令
CMD:运行容器时执行的shell环境
VOLUME:指定容器挂载点到宿主机自动生成的目录或其他容器
USER:为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR:为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH:健康检查
ARG:构建时指定的一些参数
EXPOSE:声明容器的服务端口(仅仅是声明)
ENV:设置容器环境变量
ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT:运行容器时执行的shell命令

2.创建并制作Dockerfile文件

创建Dockerfile文件:
在这里插入图片描述
填入以下自定义内容:

#环境
FROM adoptopenjdk/openjdk12 
#作者信息
MAINTAINER funfan <1424393744@qq.com>
#将本地文件挂载到容器
EXPOSE 8082 8083 8066 8090
#拷贝
COPY ut-rtj1a-1.0.36-SNAPSHOT.jar /ut-rtj1a-1.0.36-SNAPSHOT.jar
COPY nettyserver-1.0.36-SNAPSHOT.jar /nettyserver-1.0.36-SNAPSHOT.jar
COPY essgserver-1.0.36-SNAPSHOT.jar /essgserver-1.0.36-SNAPSHOT.jar
#执行命令
CMD ["sh", "-c", "java -jar /ut-rtj1a-1.0.36-SNAPSHOT.jar > /rtj1a.log 2>&1 & java -jar /nettyserver-1.0.36-SNAPSHOT.jar > /nettyserver.log 2>&1 & java -jar /essgserver-1.0.36-SNAPSHOT.jar > /essgserver.log 2>&1"]

**

如果只需制作单个jar包的镜像,只需将有关多余jar包的指令删除即可。

**

3.制作镜像

根据Dockerfile制作镜像命令如下:

docker build -f 【dockerfile文件的路径】 -t 【自定义镜像名】:latest .

本案例中我自定义的镜像名为menjin,制作镜像的具体命令如下:

docker build -f menjin.dockerfile -t menjin:latest .

可以通过docker images命令查看已有镜像:
在这里插入图片描述

4.部署容器

根据刚刚生成的镜像部署容器:

docker run -d --name 【自定义容器名】 -p 【需要暴露的端口号】 【所基于的镜像名】

本案例中我自定义容器名也为menjin,3个jar包的暴露端口有8082、8083、8066、8090:

docker run -d --name menjin -p 8082:8082 -p 8083:8083 -p 8066:8066 -p 8090:8090 menjin

可以通过docker ps -a命令查看已有容器:
在这里插入图片描述

方式三:以启动脚本打包镜像,部署容器(单个和多个jar包均可)

与方式一不同之处是,除了制作dockerfile文件外,还要制作一个启动脚本run.sh在这里插入图片描述

1.创建并制作启动脚本run.sh

填入以下内容:(jar包为工作目录的jar包)

#!/bin/bash
nohup java -jar -Dfile.encoding=utf-8 /ut-rtj1a-1.0.36-SNAPSHOT.jar & nohup java -jar -Dfile.encoding=utf-8 /essgserver-1.0.36-SNAPSHOT.jar & nohup java -jar -Dfile.encoding=utf-8 /nettyserver-1.0.36-SNAPSHOT.jar

注意事项:在windows编辑的sh脚本的行尾符是CRLF格式的,要在linux中运行的话要改成LF格式才行。更换脚本格式的方法可以自行百度,我是采用notepad++工具将CRLF替换为LF的:

如果只需制作单个jar包的镜像,只需将有关多余jar包的指令删除即可。

2.创建并制作Dockerfile文件

#环境
FROM adoptopenjdk/openjdk12 
#作者信息
MAINTAINER funfan <1424393744@qq.com>
EXPOSE 8082 8083 8066 8090
#拷贝
COPY run.sh /run.sh
COPY ut-rtj1a-1.0.36-SNAPSHOT.jar /ut-rtj1a-1.0.36-SNAPSHOT.jar
COPY nettyserver-1.0.36-SNAPSHOT.jar /nettyserver-1.0.36-SNAPSHOT.jar
COPY essgserver-1.0.36-SNAPSHOT.jar /essgserver-1.0.36-SNAPSHOT.jar
#RUN命令
RUN chmod 777 /run.sh
#执行命令
ENTRYPOINT ["sh","/run.sh"]

如果只需制作单个jar包的镜像,只需将有关多余jar包的指令删除即可。

3.制作镜像

根据Dockerfile制作镜像命令如下:

docker build -f 【dockerfile文件的路径】 -t 【自定义镜像名】:latest .

本案例中我自定义的镜像名为acs,制作镜像的具体命令如下:

docker build -f acs.dockerfile -t acs:latest .

可以通过docker images命令查看已有镜像中是否有acs。

4.部署容器

根据刚刚生成的镜像部署容器:

docker run -d --name 【自定义容器名】 -p 【需要暴露的端口号】 【所基于的镜像名】

本案例的自定义容器名也为acs,3个jar包的暴露端口有8082、8083、8066、8090:

docker run -d --name acs -p 8082:8082 -p 8083:8083 -p 8066:8066 -p 8090:8090 acs

可以通过docker ps -a命令查看已有容器中是否有acs。

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

funfan0517

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值