从零开始构建一个centos+jdk7+tomcat7的镜像文件

centos7系统下docker运行环境的搭建

准备centos基础镜像

docker pull centos
或者直接下载我准备好的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/repos_zyl/centos:0.0.1

准备jdk7和tomcat7安装包

  • 创建工作目录,mkdir -p /z/docker
  • 准备下载jdk7的tar.gz包http://download.oracle.com/otn/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz
  • 解压到目录/z/docker下,并重命名为jdk
  • 准备下载tomcat7的tar.gz包http://mirrors.cnnic.cn/apache/tomcat/tomcat-7/v7.0.75/bin/apache-tomcat-7.0.75.tar.gz
  • 解压到目录/z/docker下,并重命名为tomcat
  • 删掉jdk文件夹下多余文件,降低build的镜像大小
rm -rf /z/docker/jdk/*src.zip \
    /z/docker/jdk/lib/missioncontrol \
    /z/docker/jdk/lib/visualvm \
    /z/docker/jdk/lib/*javafx* \
    /z/docker/jdk/jre/lib/plugin.jar \
    /z/docker/jdk/jre/lib/ext/jfxrt.jar \
    /z/docker/jdk/jre/bin/javaws \
    /z/docker/jdk/jre/lib/javaws.jar \
    /z/docker/jdk/jre/lib/desktop \
    /z/docker/jdk/jre/plugin \
    /z/docker/jdk/jre/lib/deploy* \
    /z/docker/jdk/jre/lib/*javafx* \
    /z/docker/jdk/jre/lib/*jfx* \
    /z/docker/jdk/jre/lib/amd64/libdecora_sse.so \
    /z/docker/jdk/jre/lib/amd64/libprism_*.so \
    /z/docker/jdk/jre/lib/amd64/libfxplugins.so \
    /z/docker/jdk/jre/lib/amd64/libglass.so \
    /z/docker/jdk/jre/lib/amd64/libgstreamer-lite.so \
    /z/docker/jdk/jre/lib/amd64/libjavafx*.so \
    /z/docker/jdk/jre/lib/amd64/libjfx*.so

进入/z/docker目录,在当前目录下创建Dockerfile文件

cd /z/docker
vi Dockerfile

#插入以下内容
#使用的基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/repos_zyl/centos:1
#作者信息
MAINTAINER yzzhouyalei "yzzhouyalei@foxmail.com"

#创建目录
RUN mkdir -p /z/java/jdk1.7.0_79
#把当前目录下的jdk文件夹添加到镜像
ADD jdk /z/java/jdk1.7.0_79

#创建tomcat目录
RUN mkdir -p /z/java/apache-tomcat-7.0.70
#把当前目录下的tomcat文件夹添加到镜像
ADD tomcat /z/java/apache-tomcat-70

#添加环境变量
ENV JAVA_HOME /z/java/jdk1.7.0_79
ENV CATALINA_HOME /z/java/apache-tomcat-70
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

#暴露8080端口
EXPOSE 8080

#启动时运行tomcat
CMD [/z/java/apache-tomcat-7.0.70/bin/catalina.sh",run"]

开始构建docker镜像文件

docker build -t repos_local/centos-jdk7-tomcat7:1 .
-t 设置tag名称,命名规则registry/image:tag
. 表示使用当前目录下的Dockerfile文件

等待构建完成,不出意外的话,执行docker images将会得到以下结果

[root@localhost docker]# docker images
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
repos_local/centos-jdk7-tomcat7                      1               2c5efe7056ce        4 minutes ago       511.7 MB

repos_local/centos-jdk7-tomcat7镜像已经构建好了,从这个镜像启动容器,并配置好端口,就能直接在浏览器上看到tomcat默认界面了

启动centos-jdk7-tomcat7容器

docker run -d -p 8081:8080 --name test-tomcat repos_local/centos-jdk7-tomcat7:1
-d 后台运行
-p 宿主机port:容器port 端口映射
--name 容器名称,可以通过容器名称对容器操作

如果系统没禁用防火墙的话,可能需要开放8081端口

#直接执行命令,开放端口号(重启后可能失效)
iptables -A INPUT -ptcp --dport 8081 -j ACCEPT
##或者 #直接修改iptables,重启后不会失效 vi /etc/sysconfig/iptables #插入以下内容 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT 重启iptables服务 service iptables restart

centos7下可以直接使用firewall-cmd来开放端口

#开放8081端口  permanent为永久开放
firewall-cmd --zone=public --add-port=8081/tcp --permanent
#重新读取配置
firewall-cmd --reload
#查看全部开放端口
firewall-cmd --list-all

如果提示FirewallD is not running
执行systemctl start firewalld.service,启动firewalld服务

直接在浏览器访问centos7系统的8081端口,已经能看到tomcat的默认界面了

查看container容器的运行状态

[root@localhost docker]# docker ps
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
1a49a277c235        repos_local/centos-jdk7-tomcat7:1   /z/java/apache-tomca"   3 minutes ago       Up 3 minutes        0.0.0.0:8081->8080/tcp   test-tomcat

现在的容器状态为Up,运行中,如何停止一个运行中的容器? 运行docker stop命令

[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS                       PORTS               NAMES
1a49a277c235        repos_local/centos-jdk7-tomcat7:47 hours ago        Exited (143) 3 minutes ago                       test-tomcat
[root@localhost docker]# docker start test-tomcat
test-tomcat
[root@localhost docker]# docker ps a
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
1a49a277c235        repos_local/centos-jdk7-tomcat7:3 seconds        0.0:8081->8080/tcp   test-tomcat
[root@localhost docker]# docker stop test4 seconds ago                       test-tomcat

以上命令,把一个容器从退出状态->运行中->退出状态

如何强制删除一个运行中的容器?

[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
1a49a277c235        repos_local/centos-jdk7-tomcat7:5 seconds        docker rm -f test-tomcat
test-tomcat
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost docker]# 

docker rm 命令删除一个Exited状态的容器,docker rm -f 强制删除一个运行中的容器

到这里,在centos7系统下构建docker镜像文件已经成功

从零开始构建一个centos+jdk7+tomcat7的镜像文件的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios中的.dylib和.a lib有什么区别?

    我知道Objectivec中的编译和运行时是什么,但是我想知道是什么画了这两个库之间的界限?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

  3. xamarin.ios – ShareKit与MonoTouch如何?

    有人可以验证ShareKit实际上是否可用于MonoTouch并指导我完成使其工作所需的步骤?解决方法您首先从getsharekit.com下载还是使用ShareKit2.0?

  4. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  5. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  6. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  7. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  8. 在两个屏幕上运行的iOS应用程序(无镜像)

    我创建了一个包含幻灯片的iPad应用程序,当用户点击此幻灯片时,他/她可以输入一些信息.我现在要做的是在通过AirPlay连接电视和iPad时在电视上显示幻灯片显示内容可以这样做吗?如何在iOS中完成?所以不要反映整个应用程序.解决方法您可以使用Airplay和AppleTV编写应用程序以处理2个UIScreens,然后为电视UIScreen和iPadUIScreen设置单独的根视图控制器.然后在电视的视图控制器上显示图像或幻灯片,并从iPad视图控制器的事件中运行该图像或幻灯片!

  9. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

  10. ios – Xcode 7 beta 2:LaunchScreen.storyboard无法打开文档

    我在两个不同的Mac(iMac和MacBookpro)上收到这个错误.不知道为什么人们不能再现它,但我需要一些帮助.在运行XX优胜美地10.10.4的Mac上运行Xcode7beta2(15六月’15).甚至无法编译和运行我的项目..我从创建菜单创建了一个视图应用程序项目,就是这样.编辑:我试图删除并重新添加storyboard文件(也可以打开Main.storyboard插件),我仍然得到相同的

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部