基于Dockerfile搭建JAVA Tomcat运行环境

来源:互联网 发布:java变量的命名规则 编辑:程序博客网 时间:2024/05/23 12:33

1.Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,解放运维,个人认为是有革命性的技术。在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个Java tomcat运行环境,虽然也初见成效,但很累人。如果依靠依靠脚本构建一个Tomcat容器实例,一个命令可以搞定,何乐而不为呢。好在Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,Dockerfile脚本可以做到随时维护修改,即可以分享,
更有利于在模板化,更不用说传输了.
编辑一个Dockerfile文件了,下面就是具体文件内容:

VERSION 0.0.1

默认ubuntu server长期支持版本,当前是12.04

FROM ubuntu

签名啦

MAINTAINER yongboy “anybody@gmail.com”

更新源,安装ssh server

RUN echo “deb http://archive.ubuntu.com/ubuntu precise main universe”> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd

设置root ssh远程登录密码为123456

RUN echo “root:123456” | chpasswd

添加orache java7源,一次性安装vim,wget,curl,java7,tomcat7等必备软件

RUN apt-get install python-software-properties
RUN add-apt-repository ppa:webupd8team/java
RUN apt-get update
RUN apt-get install -y vim wget curl oracle-java7-installer tomcat7

设置JAVA_HOME环境变量

RUN update-alternatives –display java
RUN echo “JAVA_HOME=/usr/lib/jvm/java-7-oracle”>> /etc/environment
RUN echo “JAVA_HOME=/usr/lib/jvm/java-7-oracle”>> /etc/default/tomcat7

容器需要开放SSH 22端口

EXPOSE 22

容器需要开放Tomcat 8080端口

EXPOSE 8080

设置Tomcat7初始化运行,SSH终端服务器作为后台运行

ENTRYPOINT service tomcat7 start && /usr/sbin/sshd -D
需要注意:

ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
CMD,表示镜像运行默认参数,可被重写覆盖
ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!
ENTRYPOINT/CMD,一般两者可以配合使用,比如:

ENTRYPOINT [“/usr/sbin/sshd”]
CMD [“-D”]
在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。

以下无效方式:

ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
CMD service tomcat7 start #运行几秒钟之后,容器就会退出
这样有效:

ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

或者

CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
这样也有效:

ENTRYPOINT [“/usr/sbin/sshd”]
CMD [“-D”]
具体请参考官方文档:Dockerfiles for Images

构建镜像
脚本写好了,需要转换成镜像:

docker build -t yongboy/java7 .
-t: 为构建的镜像制定一个标签,便于记忆/索引等

. : 指定Dockerfile文件在当前目录下

网速不太好,会等待很长时间。很多操作可能需要科学上网,逼得我只能一直挂着VPN,方能畅通无阻。

构建镜像完成之后,看看运行效果:

docker run -d -p 22 -p 8080:8080 yongboy/java7
在运行命令中,还得需要显式指定 -p 22 -p 8080:8080,否则在Docker 0.8.1版本中不会主动映射到宿主机上。据悉在Docker 0.4.8版本时,就不担心这个问题。 或者,您要有好的方式,不妨告知于我,谢谢。

在Dockerfile中,若没有使用ENTRYPOINT/CMD指令,若运行多个命令,可以这样做:

docker run -d -p 22 -p 8080 yongboy/java7 /bin/sh -c “service tomcat7 start && /usr/sbin/sshd -D”
提交/保存镜像
创建好的镜像,可以保存到索引仓库中,便于下次使用(当然,我们直接共享Dockerfile,是最简单的事情,:)) ),但毕竟镜像可以做到开箱即用。

https://index.docker.io/ 注册一个账号,例如yongboy
构建镜像

docker build -t yongboy/java7 .
上面已经构建OK的话,可省略此步。

登陆

docker login
提交到Docker索引仓库

docker push yongboy/java7
国内你懂的,pull比较慢,建议挂载VPN

上传OK的话,可以得到类似地址:https://index.docker.io/u/yongboy/java7/

如何使用镜像
docker pull yongboy/java7
剩下的步骤,就很简单了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喂奶期间乳房有肿块怎么办 宝宝只吃乳头不吃奶嘴怎么办 宝宝只吃一个乳头怎么办 宝宝只吃乳头不吃奶瓶怎么办 给泰迪奶狗喂奶呛到了怎么办 奶壶喂奶呛到了怎么办 宝宝喝奶瓶老是呛到怎么办 两个月宝宝睡偏头了怎么办 婴儿吐奶豆花状怎么办 吃母乳乳头破了怎么办 顺产后仰卧睡了怎么办 宝宝含着母乳睡怎么办 刚出生的孩子不吃母乳怎么办 月子里挤奶手痛怎么办 做完月子之后腿疼腰疼怎么办 腰疼引起的腿疼怎么办 上网上久了脑袋痛怎么办 莲花坐的脚麻怎么办 月子腿疼膝盖疼怎么办 做月子腿着凉了怎么办 出月子大腿根酸怎么办 出了月子腰酸痛怎么办 出了月子腿没劲怎么办 生完孩子后缺钙怎么办 生完孩子腿疼怎么办 生完孩子后腿疼怎么办 生完孩子肛门突出怎么办 生完孩子肋骨突出怎么办 蛙跳理蛙跳后腿疼怎么办 蛙跳两天后腿还疼怎么办 莲花菩提盘黑了怎么办 体育课蛙跳后肌肉拉伤怎么办 o型腿骨头弯了怎么办 小孩钢琴坐姿不对向后仰怎么办 小孩皮肤不好容易留疤怎么办 学游泳时站不稳怎么办 水呛到了不停打嗝怎么办 来月经前游泳了怎么办 快来完事游泳了怎么办 游泳时来月经了怎么办 经期第7天游泳了怎么办