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

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

准备centos基础镜像

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

准备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:0.0.
#作者信息
MAINTAINER yzzhouyalei "yzzhouyalei@foxmail.com" #创建目录
RUN mkdir -p /z/java/jdk1..0_79
#把当前目录下的jdk文件夹添加到镜像
ADD jdk /z/java/jdk1..0_79 #创建tomcat目录
RUN mkdir -p /z/java/apache-tomcat-7.0.
#把当前目录下的tomcat文件夹添加到镜像
ADD tomcat /z/java/apache-tomcat-7.0. #添加环境变量
ENV JAVA_HOME /z/java/jdk1..0_79
ENV CATALINA_HOME /z/java/apache-tomcat-7.0.
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin #暴露8080端口
EXPOSE #启动时运行tomcat
CMD ["/z/java/apache-tomcat-7.0.70/bin/catalina.sh","run"]

开始构建docker镜像文件

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

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

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

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

启动centos-jdk7-tomcat7容器

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

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

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

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

#开放8081端口  permanent为永久开放
firewall-cmd --zone=public --add-port=/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:0.0. "/z/java/apache-tomca" minutes ago Up 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:0.0. "/z/java/apache-tomca" hours ago Exited () 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:0.0. "/z/java/apache-tomca" hours ago Up seconds 0.0.0.0:->/tcp test-tomcat
[root@localhost docker]# docker stop test-tomcat
test-tomcat
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a49a277c235 repos_local/centos-jdk7-tomcat7:0.0. "/z/java/apache-tomca" hours ago Exited () seconds ago test-tomcat

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

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

[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a49a277c235 repos_local/centos-jdk7-tomcat7:0.0. "/z/java/apache-tomca" hours ago Up seconds 0.0.0.0:->/tcp test-tomcat
[root@localhost docker]# 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镜像文件已经成功

另 , 可以直接使用官方的tomcat镜像 , 把自己的网站目录映射到容器内部

docker run -d -p :8080 --name test-tomcat --privileged=true -v 宿主机目录:/usr/local/tomcat/webapps/ tomcat:

如需帮助可向我发起QQ聊天发起QQ聊天

友情赞助

如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。

赞助方式:打开支付宝App,使用“扫一扫”付款,付款码见下图,别忘了付款留言哦!


或使用微信, 不用加好友就能付款

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

  1. 构建一个拥有sshd服务的docker镜像

    不直接描述结果,通过一个过程探究如何写一个 Dockerfile 一.环境 虚拟机CentOS7.4,Docker1.13.1 二.尝试步骤 1.下载基础镜像 docker pull alpine:3 ...

  2. 从零开始构建一个的asp.net Core 项目

    最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到"He ...

  3. 从零开始构建一个的asp.net Core 项目(一)

    最近突发奇想,想从零开始构建一个Core的MVC项目,于是开始了构建过程. 首先我们添加一个空的CORE下的MVC项目,创建完成之后我们运行一下(Ctrl +F5).我们会在页面上看到“Hello W ...

  4. 如何将docker镜像文件上传至Docker Hub

    一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...

  5. 从零开始构建一个的asp.net Core 项目(二)

    接着上一篇博客继续进行.上一篇博客只是显示了简单的MVC视图页,这篇博客接着进行,连接上数据库,进行简单的CRUD. 首先我在Controllers文件夹点击右键,添加->控制器 弹出的对话框中 ...

  6. .Net 从零开始构建一个框架之基本实体结构与基本仓储构建

    本系列文章将介绍如何在.Net框架下,从零开始搭建一个完成CRUD的Framework,该Framework将具备以下功能,基本实体结构(基于DDD).基本仓储结构.模块加载系统.工作单元.事件总线( ...

  7. [计算机视觉]从零开始构建一个微软how-old.net服务/面部属性识别

    大概两三年前微软发布了一个基于Cognitive Service API的how-old.net网站,用户可以上传一张包含人脸的照片,后台通过调用深度学习算法可以预测照片中的人脸.年龄以及性别,然后将 ...

  8. Docker镜像文件操作

    1什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式).最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永 ...

  9. Docker镜像文件存储结构

    docker相关文件存放在:/var/lib/docker目录下 镜像的存储结构主要分两部分,一是镜像ID之间的关联,一是镜像ID与镜像名称之间的关联,前者的结构体叫Graph,后者叫TagStore ...

随机推荐

  1. 提交变更(git commit)

    当所有的变更都进入暂存区,就可以使用git commit进行提交了 $ git commit 执行这句话后,会弹出文本编辑区(自己配置的或默认的),文本编辑器可能会显示如下内容 # Please en ...

  2. Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

    1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...

  3. tomcat设置为开机自启动

    第一步:设置环境变量(在java环境变量配置完成的情况下) 计算机右键——>属性——>高级系统设置——>环境变量——>在用户变量中心新建CATALINA_HOME变量 编辑pa ...

  4. 全局API

    Vue.extend( options ): extend创建的是一个组件构造器,而不是一个具体的组件实例 //选项对象 baseOptions let baseOptions= { template ...

  5. angular Observable

    1.回调函数 /** 1.设计实现函数 */ print_msg(msg) { console.log(msg); } /** 2.设计调用函数,param1:实现函数参数,param2:实现函数本身 ...

  6. 实验吧 deeeeeeaaaaaadbeeeeeeeeeef-20

    题目描述: 图片是正确的吗? 解题思路: 这道题很有意思,常规的隐写思路没有线索,结果问题出现在照片的分辨率上,tEXtSource iPhone 5的后置摄像头是3264×2448的分辨率,前置摄像 ...

  7. css悬浮提示框

    效果图: code: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  8. C#使用RabbitMQ(转)

      1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地 ...

  9. hikey960编译记录

    arm64内核编译命令: 1 make ARCH=arm64 hikey960-defconfig 2 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- ...

  10. Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals

    /*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...