Dockerfile生成docker镜像,docker使用jar生成镜像

Dockerfile作用

Dockerfile文件用来自行定义生成docker镜像

Dockerfile概念

  • 镜像标签 每个镜像都可以有一个或多个标签,用来标识不同的版本或说明,例如:jenkins/jenkins:lts-jdk11 标明是长期支持的版本,且使用的是jdk11
  • 镜像层 镜像是由基础镜像+镜像层构建的,每个镜像层就是对系统的新增修改删除等操作
  • Dockerfile就是包含一组命令,让docker知道如何构建镜像
  • 镜像仓库 保存镜像的仓库

编写docker镜像的一般步骤

  1. 组织文件,将需要的文件都集中到一个文件夹
  2. 编写Dockerfile
  3. 构建镜像
  4. 运行容器
  5. 推送镜像

下面的地址是nginx官方的Dockerfile,可以看看

https://github.com/nginxinc/docker-nginx/blob/73a5acae6945b75b433cafd0c9318e4378e72cbb/mainline/debian/Dockerfile

Dockerfile命令展示

命令示例解释
FROMFROM centos:centos7以centos7为基础模板
LABELLABEL maintainer=“togeek”添加镜像元数据,如维护者、描述等,此处可添加多个
ENVENV MYPATH /usr/local设置环境变量,设置后的环境变量和正常的环境变量一样,同时也可以在之后的命令中使用;同时可以在docker run -e MYPATH=XXX命令传递过来 ,MYPATH是设置的环境变量的值
WORKDIRWORKDIR /app设置工作目录,即进入容器后的默认路径
SHELLSHELL [“/bin/bash”, “-c”]定义默认的Shell程序
USERUSER root设置容器运行时的用户
RUNRUN yum -y update && yum -y install vim在镜像中运行命令,一次可以添加多个命名,也尽量合并在一起进行执行,因为每次run就添加一个镜像层
COPYCOPY ipatool.jar /app/复制 ipatool.jar文件到镜像的/app下
ADDADD jdk.tar.gz /usr/local/java/增强版的COPY,复制文件到镜像中并解压,还可以下载远程文件,复制文件夹等
VOLUMEVOLUME /data定义容器数据卷,即挂载到物理机的路径;如docker run 时挂载-v 此路径,就放到挂载路径上,如未指定,则放到数据存储路径下
ENTRYPOINTENTRYPOINT [“java”, “-jar”, “/app/ipatool.jar”]容器启动时运行的命令,和项目的CMD类似,但一般设置的是固定启动命令(可通过启动参数entrypoint修改)
CMDCMD [“–spring.config.location=./application.properties”]容器启动时运行的命令,是可变参数,多个CMD只会执行一次
EXPOSEEXPOSE 80 8080暴露容器端口,可以写多个

Dockerfile示例1,简单示例

1.将 application.properties, ipatool.jar两个文件当地同一个文件夹内
2.在此文件夹内创建文件Dockerfile
3. 放入如下内容

#以centos7为基础镜像
FROM centos:centos7
LABEL maintainer="togeek"
ENV MYAPP /app
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_331
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#更新系统
#RUN yum -y update
#设定了工作目录,使用了上面的环境变量
WORKDIR $MYAPP
#安装vim编辑器
#RUN yum -y install vim
#安装java8
RUN mkdir /usr/local/java && mkdir /app/config
#添加jdk到设置的目录,并解压
ADD jdk1.8.tar.gz /usr/local/java/
#拷贝需要的文件
COPY ipatool.jar /app/
COPY application.properties /app/config/
#设定容器卷目录
#VOLUME /app

#以下命令只有在镜像启动的时候才会执行
#指定容器启动使用的命令
#相当于执行java -jar ipatool.jar --spring.config.location=/app/config/application.properties
ENTRYPOINT ["java", "-jar", "ipatool.jar","--spring.config.location=/app/config/application.properties"]

CMD /bin/bash  #这句是无用的,会被下面的CMD覆盖
CMD ["--server.port=21115"] #如果外部docker run添加参数--server.port=21116,则这句也不会被执行
EXPOSE 21115 21116
  1. 创建镜像,注意后面有个点
#创建docker image名称是test3
docker build -t test3 .

5.运行镜像test3 ,端口映射到21115

 docker run -it -p 21115:21115 test3
  1. 运行镜像是可以添加参数,使端口使用21116
 docker run -it -p 21115:21115 test3 --server.port=21116 #此处将替换掉CMD中执行的内容

Dockerfile示例2,与主机共享jar文件或其他需要持久化的内容

VOLUME /app 重点,会将容器内/app的内容会持久化到主机,如果docker run时挂载了app的按照指定目录来,如果未执行,则放到数据存储路径下

#以centos7为基础镜像
FROM centos:centos7
LABEL maintainer="togeek"
ENV MYAPP /app
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_331
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#更新系统
#RUN yum -y update
#设定了工作目录,使用了上面的环境变量
WORKDIR $MYAPP
#安装vim编辑器
#RUN yum -y install vim
#安装java8
RUN mkdir /usr/local/java && mkdir /app/config
#添加jdk到设置的目录,并解压
ADD jdk1.8.tar.gz /usr/local/java/
#拷贝需要的文件,这里就不需要拷贝文件了
#COPY ipatool.jar /app/
#COPY application.properties /app/config/
#设定容器卷目录
VOLUME /app
#指定容器启动使用的命令
ENTRYPOINT ["java", "-jar", "ipatool.jar","--spring.config.location=/app/config/application.properties"]

CMD /bin/bash  #这句是无用的,会被下面的CMD覆盖
CMD ["--server.port=21115"]#CMD命名就是接着ENTRYPOINT 输入的命令继续拼接
EXPOSE 21115 21116


运行镜像

#创建docker image名称是test4
docker build -t test4 .

由于之后会指定/app内挂载到主机目录,所以事先将ipatool.jar文件放到/home/ubuntu/dockertest/app,application.properties文件放到/home/ubuntu/dockertest/app/config

docker run -it -p 21115:21115 -v /home/ubuntu/dockertest/app:/app test4

这个就可以访问了

下次更新jar,或者配置文件,直接替换,并重新执行docker镜像即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

atadmin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值