使用Dockerfile创建简单java应用镜像

利用Dockerfile构建一个简单的java应用镜像,依赖环境比较简单,JDK,定制化的Tomcat(名为star-appserver)
1、环境准备
    ubuntu:14.04
    docker : 1.4
    jdk:jdk-8u31-linux-x64.gz
    tomcat : 7.0(star-appserver)
    在/usr/local下创建目录:sms,将jdk-8u31-linux-x64.gz和star-appserver(此处为了简单,已包含应用)拷贝到此目录下,由于Docker在构建镜像时,需将Dockerfile所在目录传给Docker daemon作为构建上下文,所以此目录下应包含构建时所依赖的各种环境。
2、环境准备好后,在sms下创建Dockerfile(名字必须为Dockerfile)文件,内容如下
FROM ubuntu:latest
MAINTAINER zhangjy

#install JDK and TOMCAT
ADD jdk-8u31-linux-x64.gz  /usr/local/
ADD tomcat /usr/local/     #tomcat下为star-appserver,如果直接复制star-appserver,只会复制目录里边的内容,不会复制目录本身
ADD timezone /etc/
#启动脚本,用于从镜像启动容器时调用执行,见下面的ENTRYPOINT
ADD onStart.sh /usr/local/

ENV JAVA_HOME=/usr/local/jdk1.8.0_31 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin
RUN echo "JAVA_HOME=/usr/local/jdk1.8.0_31\nCALSSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nPATH=$PATH:$JAVA_HOME/bin" >> /etc/profile

#start tomcat
ENTRYPOINT ["/usr/local/onStart.sh"]
3、在sms下创建onStart.sh,并赋予执行权限,用于启动tomcat并输出日志(为了保证容器中有执行状态的进程,否则容器停止)
    #!/bin/bash
    /usr/local/star-appserver/bin/startup.sh
    tail -f /usr/local/star-appserver/logs/stariboss.log
4、在sms下执行命令,创建成功
       $docker build -t zhangjy/starsms:v1 .
   
启动时,发现应用访问数据库报错:ORA-01882: timezone region  not found,原因是JVM默认使用Ubuntu的/etc/timezone里配置的时区,查看timezone时区为Etc/UTC,再查看ORACLE数据库支持的时区:select * from V$TIMEZONE_NAMES发现没有,于是又在sms目录下创建了一个timezone文件,将时区配置成Asia/Shanghai,在Dockerfile中加入到镜像/etc/目录下

Dockerfile文件配置说明:
FROM
    表明基于哪个镜像创建
MAINTAINER
    作者和邮箱
ADD
    将目录或文件加入到镜像的某个目录,格式是ADD <源文件> <目标目录>
RUN
    有两种格式:
  • RUN <command> (the command is run in a shell - /bin/sh -c - shell form)
  • RUN ["executable", "param1", "param2"] (exec form)
    默认RUN后的命令是在/bin/sh下执行,像Ubuntu默认/bin/sh是指向/bin/dash,如果想使用/bin/bash,则可按如下方式
        RUN ["/bin/bash","-c","source /etc/profile"]
    但需注意,这种方式不能解析类似于$HOME的参数引用
ENV
    设置环境变量,在镜像构建过程中和容器启动后均有效
CMD

    CMD在容器运行的时候提供一些命令及参数,用法如下:

  
  
  • CMD ["executable","param1","param2"] (exec form, this is the preferred form) 
  • CMD ["param1","param2"] (as default parameters to ENTRYPOINT) 
  • CMD command param1 param2 (shell form) 
    - 第一种用法:运行一个可执行的文件并提供参数。
    - 第二种用法:为ENTRYPOINT指定参数,即为ENTRYPOINT指定命令的默认参数,通过docker run命令传过来的参数会将其覆盖
    - 第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。

    如指定:

  
  
    1. CMD [“/bin/echo”, “this is a echo test ”] 

    build后运行(假设镜像名为ec):

  
  
    1. docker run ec 

    就会输出: this is a echo test

注意:如果在docker run命令后指定命令,如docker run ec echo 'test',会将CMD的命令覆盖。CMD的命令不能接收run传过来的参数,而ENTRYPOINT可以
ENTRYPOINT
    有两种用法
  • ENTRYPOINT ["executable", "param1", "param2"] (the preferred exec form)
  • ENTRYPOINT command param1 param2 (shell form)
    第一种可以接收docker run命令传过来的参数(即使docker run传过来的是命令,也会被当做参数处理),如果想覆盖,可使用docker run ... --entrypoint <COMMAND>




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建Java镜像的步骤如下: 1. 首先,你需要准备一个Dockerfile文件,该文件包含了构建镜像的指令和配置信息。你可以根据你的Java项目的需要进行相应的配置。一个示例的Dockerfile可以参考引用中提供的链接。 2. 接下来,你可以使用Docker命令构建镜像使用`docker build -t 镜像名:标签 .`命令来构建镜像。其中,镜像名可以使用用户名/镜像名的方式命名,标签可以是一个版本号或其他标识符。例如,使用`docker build -t anna/docker-package-only-build-demo:1.0-SNAPSHOT .`命令构建镜像。这个命令会告诉Docker在当前目录下获取Dockerfile,并将构建的镜像命名为anna/docker-package-only-build-demo,标签为1.0-SNAPSHOT。这个命令的示例可以参考引用中提供的命令。 3. 等待构建完成后,你就可以使用镜像来部署和运行你的Java项目了。可以使用`docker run`命令来运行镜像,并指定需要运行的Java项目。具体的运行命令将根据你的Java项目的需要而定。 通过以上步骤,你可以成功创建一个Docker镜像来部署你的Java项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker学习(二十一)构建 java 项目基础镜像](https://blog.csdn.net/qq_33204709/article/details/129429590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [为Java应用创建Docker镜像的三种方式](https://blog.csdn.net/maxinchun0215/article/details/129145867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值