准备:jboss、jdk、一个javaee的war包、Dockerfile

注:jboss和jdk可以不用提前准备好,在命令中wget也可以,因为我恰好有,就直接复制了

Dockerfile内容:

  1. #admln 20150120
  2. FROM ubuntu:14.04
  3. MAINTAINER admln <admln@example.com>
  4. RUN mkdir /usr/jboss
  5. COPY wildfly-8.2.0.Final /usr/jboss/
  6. COPY JavaEEDocker.war /usr/jboss/standalone/deployments/
  7. RUN mkdir /usr/java/
  8. COPY jdk-7u71-linux-x64.tar.gz /usr/java/
  9. WORKDIR /usr/java/
  10. RUN tar -zxf jdk-7u71-linux-x64.tar.gz
  11. RUN update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.7.0_71/bin
  12. /javac 100
  13. RUN update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_71/bin/j
  14. ava 100
  15. RUN update-alternatives --display java
  16. RUN java -version
  17. EXPOSE 8080 9990
  18. CMD ["/usr/jboss/bin/standalone.sh", "-c", "standalone-full.xml", "-b", "0.0.0.0
  19. "]

构建:

  1. sudo docker build -t="javaee_docker_jboss" .

构建过程:

Sending build context to Docker daemon 422.1 MB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
---> b39b81afc8ca
Step 1 : MAINTAINER admln <admln@example.com>
---> Using cache
---> c6410b257abc
Step 2 : RUN mkdir /usr/jboss
---> Running in faae0476fa09
---> bee1d5851e62
Removing intermediate container faae0476fa09
Step 3 : COPY wildfly-8.2.0.Final /usr/jboss/
---> 8d40f390a11e
Removing intermediate container a7a4174c0e79
Step 4 : COPY JavaEEDocker.war /usr/jboss/standalone/deployments/
---> 1335bd7ad129
Removing intermediate container 589fa30b1311
Step 5 : RUN mkdir /usr/java/
---> Running in ac21536064f7
---> cb4703bc284c
Removing intermediate container ac21536064f7
Step 6 : COPY jdk-7u71-linux-x64.tar.gz /usr/java/
---> 35a31c2bc140
Removing intermediate container f4c26050e511
Step 7 : WORKDIR /usr/java/
---> Running in 1217154d1cca
---> a17af238fed9
Removing intermediate container 1217154d1cca
Step 8 : RUN tar -zxf jdk-7u71-linux-x64.tar.gz
---> Running in dfb046ddb86d
---> ea154f6f3896
Removing intermediate container dfb046ddb86d
Step 9 : RUN update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.7.0_71/bin/javac 100
---> Running in ff061540aae3
update-alternatives: using /usr/java/jdk1.7.0_71/bin/javac to provide /usr/bin/javac (javac) in auto mode
---> c3f4118943cc
Removing intermediate container ff061540aae3
Step 10 : RUN update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_71/bin/java 100
---> Running in 764aa09ab43f
update-alternatives: using /usr/java/jdk1.7.0_71/bin/java to provide /usr/bin/java (java) in auto mode
---> fddc132f2010
Removing intermediate container 764aa09ab43f
Step 11 : RUN update-alternatives --display java
---> Running in dd123440d778
java - auto mode
link currently points to /usr/java/jdk1.7.0_71/bin/java
/usr/java/jdk1.7.0_71/bin/java - priority 100
Current 'best' version is '/usr/java/jdk1.7.0_71/bin/java'.
---> 0951d9f62f99
Removing intermediate container dd123440d778
Step 12 : RUN java -version
---> Running in 839afe5e2276
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
---> f51af884a45f
Removing intermediate container 839afe5e2276
Step 13 : EXPOSE 8080 9990
---> Running in ed736e99366e
---> bce05a7bdb61
Removing intermediate container ed736e99366e
Step 14 : CMD /usr/jboss/bin/standalone.sh -c standalone-full.xml -b 0.0.0.0
---> Running in fea176d2760b
---> 947def6b3995
Removing intermediate container fea176d2760b
Successfully built 947def6b3995

启动容器

  1. sudo docker run -p : javaee_docker_jboss

测试:


tomcat版:

Dockerfile:

  1. #admln
  2. FROM ubuntu:14.04
  3. MAINTAINER admln <admln@example.com>
  4. RUN mkdir /usr/tomcat
  5. COPY apache-tomcat-7.0..tar.gz /usr/tomcat/
  6. WORKDIR /usr/tomcat/
  7. RUN tar zxf apache-tomcat-7.0..tar.gz
  8. COPY JavaEEDocker.war /usr/tomcat/apache-tomcat-7.0./webapps/
  9. RUN mkdir /usr/java/
  10. COPY jdk-7u71-linux-x64.tar.gz /usr/java/
  11. WORKDIR /usr/java/
  12. RUN tar -zxf jdk-7u71-linux-x64.tar.gz
  13. RUN update-alternatives --install /usr/bin/javac javac /usr/java/jdk1..0_71/bin
  14. /javac
  15. RUN update-alternatives --install /usr/bin/java java /usr/java/jdk1..0_71/bin/j
  16. ava
  17. RUN update-alternatives --display java
  18. RUN java -version
  19. EXPOSE
  20. CMD /usr/tomcat/apache-tomcat-7.0./bin/startup.sh && tail -f /usr/tomcat/apach
  21. e-tomcat-7.0./logs/catalina.out

构建启动... ...

测试:

tomcat和JBoss有点不一样,JBoss启动后默认一直进行的,而tomcat启动后终端就运行完了

所以 CMD 命令中我加了一个 tail -f /usr/tomcat/apache-tomcat-7.0.57/logs/catalina.out

保证终端一直运行。

不过后来发现 bin/catalina.sh run 命令可以让tomcat启动并且终端不退出

所以比较推荐的Dockerfile写法是:

  1. ... ...
  2. CMD /usr/tomcat/apache-tomcat-7.0./bin/catalina.sh run

 


tomcat 的两三次失败带来的另一个深入理解是 docker 的层级关系

我修改了Dockerfile 再已同样的名字构建时,由于只修改了第十六步的内容,所以之前的都使用已经构建好的,只是重新构建第十六步那一层(layer),然后把原来的镜像删除生成一个新的

还有一个就是 docker 容器的即时性,运行完即退出,这一点和 VM 区别也很大,所以限制了 docker 的应用场景


JavaEE&Docker 容器示例的更多相关文章

  1. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  2. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  3. docker学习(5) 在mac中创建mysql docker容器

    github上有一个专门的docker-libary项目,里面有各种各样常用的docker镜像,可以做为学习的示例,今天研究下其中mysql镜像的用法,国内镜像daocloud.io也能找到mysql ...

  4. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  5. 理解Docker容器的进程管理

    摘要: Docker在进程管理上有一些特殊之处,如果不注意这些细节中的魔鬼就会带来一些隐患.另外Docker鼓励"一个容器一个进程(one process per container)&qu ...

  6. 给一个正在运行的Docker容器动态添加Volume

    给一个正在运行的Docker容器动态添加Volume本文转自:http://dockone.io/article/149 [编者的话]之前有人问我Docker容器启动之后还能否再挂载卷,考虑到mnt命 ...

  7. [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务

    转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...

  8. Docker容器中运行ASP.NET Core

    在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...

  9. 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

    一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...

随机推荐

  1. 微软IOC容器Unity简单代码示例1

    @(编程) 1. 通过Nuget下载Unity 这个就不介绍了 2. 接口代码 namespace UnityDemo { interface ILogIn { void Login(); } } 3 ...

  2. ubuntu官方源列表网址

    http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8 (推荐台湾的源)

  3. centos下安装mysql不能启动

    初学者犯了个错误:yum安装mysql的命令是:yum -y install mysql-server,而不是yum -y install mysql ----------------------以下 ...

  4. 转载linq to sql 的详解

    [转]LINQ To SQL 语法及实例大全 2011-11-26阅读38651 评论9 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL ...

  5. 我的Memcache学习笔记

    一.编绎安装Memcached 二.Memcached基本命令 四.PHP扩展模块安装 五.设置session用memcache来存储 六.PHP使用Memcache的一致性哈希连接方式 七.Memc ...

  6. 使用多个Worker的时候Odoo的系统日志配置

    当我们开启Wokrer来启动Odoo的时候,用默认的日志会出现日志丢失的问题,这个是logger的问题:多个进程对单个文件写入日志.有一个简单的解决办法:配置openerp-server.conf,开 ...

  7. 如何用C++语言编程(How to program in C++)

    这几年在公司一直带徒弟,每次必教的内容就是C++.在我看来,C++已经有非常好的教材了(注1),实在没有必要从头教起.自学就可以了,可是结果总是不尽人意. 不想再重复一次"把C++当成一门新 ...

  8. CFileDialog 、CFile 如何进行文件操作 [转]

    如何进行文件操作 [1]显示对话框,取得文件名 CString FilePathName; CFileDialog dlg(TRUE);//TRUE为OPEN对话框,FALSE为SAVE AS对话框 ...

  9. Binary Search

    Binary Search                              [原文见:http://www.topcoder.com/tc?module=Static&d1=tuto ...

  10. ARM&Linux 下驱动开发第二节

    驱动文件:qudong.c,make生成qudong.ko文件,烧录到ARM板上 #include<linux/init.h> #include<linux/module.h> ...