前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像:

  想了想干脆创建一个Java+Scala+Tomcat的环境好了,首先创建一个拥有操作系统的container:

  1. docker run -i -t ubuntu /bin/bash

  其中,-it的意思是这个:

  1. -t, --tty Allocate a pseudo-TTY
  2. -i, --interactive Keep STDIN open even if not attached

  然后使用docker cp命令将本地的tar包传入容器

  1. cloud@cloud5:~/docker$ docker cp --help
  2.  
  3. Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  4. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  5.  
  6. Copy files/folders between a container and the local filesystem
  7. Use '-' as the source to read a tar archive from stdin
  8. and extract it to a directory destination in a container.
  9. Use '-' as the destination to stream a tar archive of a
  10. container source to stdout.
  11.  
  12. --help Print usage
  13. -L, --follow-link Always follow symbol link in SRC_PATH

  然后将这些包解压并删除:

  1. tar -zxvf ......
  2. rm ....

  接下来配了/etc/profile和/etc/rc.local,设置了环境变量和开机自启动,并重启容易docker restart env。

  然后问题来了,rc.local和/etc/profile都没有生效,docker container肯定不是完全启动,但是启动哪些我不是很清楚,只能通过迂回方式解决:手动启动/etc/rc.local。首先登录我们的container

  1. docker exec -it env bash

  使用docker自带的命令要远好于install ssh,如果在本地执行使用上面的命令就可以实现修改container的功能,我们将/etc/profile中配置好的环境变量写入rc.local,写之后的rc.local是这样的:

  1. #--------------JAVA--------------------
  2. JAVA_HOME=/usr/local/jdk/
  3. PATH=${PATH}:${JAVA_HOME}/bin
  4. CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  5. export JAVA_HOME PATH CLASSPATH
  6.  
  7. #--------------SCALA------------------
  8. SCALA_HOME=/usr/local/scala-2.10./
  9. PATH=${PATH}:${SCALA_HOME}/bin
  10. export SCALA_HOME PATH
  11.  
  12. #-------------TOMCAT------------------
  13. CATALINA_HOME=/usr/local/tomcat
  14. CATALINA_BASE=/usr/local/tomcat
  15. PATH=${PATH}:${CATALINA_HOME}/bin
  16.  
  17. export CATALINA_HOME CATALINA_BASE PATH
  18.  
  19. /etc/init.d/ssh start
  20. /usr/local/tomcat/bin/startup.sh
  21.  
  22. /bin/bash
  23.  
  24. exit

  接下来使用docker commit env docker-env命令创建一个image。之后试试这个image是否可用

  1. docker run --name tomcat -i -t -p : -p : docker-env /etc/rc.local

  访问 localhost:50017发现可以访问tomcat,设置成功。我在执行run的时候设置它的启动命令是/etc/rc.local,这样就可以将我们tomcat直接开机启动,并且将环境变量加入进来,由于在试用时走了一些弯路,所以我这里还装了vim和ssh,所以image略大,如果不装这两个会小一些。创建出来的tomcat打上war包可以部署web服务,这样在服务迁移时便会简单许多,至少只装一个docker应该就可以了。。

docker 通过commit方法创建镜像(Tomcat+Java+Scala)的更多相关文章

  1. [转]Docker基础-使用Dockerfile创建镜像

    本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...

  2. Docker基础-使用Dockerfile创建镜像

    1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # This dockerfile uses the ubuntu image # VERSION 2 - ED ...

  3. 在IntelliJ IDEA中创建和运行java/scala/spark程序

    本文将分两部分来介绍如何在IntelliJ IDEA中运行Java/Scala/Spark程序: 基本概念介绍 在IntelliJ IDEA中创建和运行java/scala/spark程序 基本概念介 ...

  4. docker学习笔记5:利用commit命令创建镜像 和 删除本地镜像

    一.概述 创建镜像有两种方法,一是用commit命令,二是用dockerfile方法(这个更常用,在下面文章介绍).本章介绍commit方法. 在介绍commit命令前,我们先回顾下对代码的版本控制, ...

  5. centos7下安装docker(3.1创建镜像commit)

    docker commit创建镜像 步骤:1.运行容器 2.修改容器 3.将容器保存为镜像 1. 注:-it是以交互模式进入容器,并打开终端 2.安装一个vim进行修改镜像 yum install - ...

  6. docker基于commit命令创建支持ssh服务的镜像

    以centos为基础,目的使用ssh服务远程连接docker容器. 环境:宿主机centos7(宿主机ip地址为192.168.164.130),直接搜索docker的centos镜像,下载最新版本. ...

  7. Docker端口映射及创建镜像演示(二)--技术流ken

    前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...

  8. centos7下安装docker(3.3创建镜像--修改dockerfile)

    1.我们在制作dockerfile的时候可能有些命令无法执行,导致镜像无法创建成功,这时我们可以修改dockerfile,从而达到我们的目的 查看Dockerfile内容 创建新的镜像,失败 Dock ...

  9. Docker端口映射及创建镜像演示(二)

    Docker暴露容器方法 第一种:将容器中的一个端口映射成宿主机中的一个随机端口 第二种:将容器中的一个端口映射成宿主机中的一个端口 第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口 ...

随机推荐

  1. 和阿文一起学H5——H5工具、素材

    字体: 一般的H5工具都会提供一部分字体,如果提供的字体中没有自己想用的字体,可以在PPT或PS中进行加工,然后另存为图片,再导入到H5工具中去. 字全生成器: 1.http://www.diyizi ...

  2. Servlet之初识

    doHeader 用于处理HEADER请求doGet 用于处理GET请求,也可以自动的支持HEADER请求doPost 用于处理POST请求 doPut 用于处理PUT请求 doDelete 用于处理 ...

  3. Agile.Net 组件式开发平台 - 数据报表组件

    Agile.Report.dll 文件为平台数据报表支持库,基于FasstReport.Net扩展重写,提供了非常强大的自定义报表的功能使开发者为应用程序快速有效地生成报表.报表类库提供了创建报表所需 ...

  4. cocos2dx-lua class语法糖要注意了

    cocos2dx-lua function.lua 定义了class方法,让lua实现继承像传统语言一样漂亮和方便 看定义 function class(classname, super) local ...

  5. Swift使用闭包表达式

    Swift中的闭包表达式很灵活,其标准语法格式如下:{ (参数列表) ->返回值类型 in    语句组}其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是 ...

  6. out ref区别

    1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候. ...

  7. java filter的一些理解

    java filter即  java中的过滤器: 一. * web项目中只有三个组件 * 过滤器filter  ↓    级 别 * 监听器            ↓   级 别 * servlet  ...

  8. oracle 之路目录

    oracle linux单机安装 oracle windows单机安装创建实例卡死解决办法 oracle rac安装 HPDL380G8平台11.2.0.3 RAC实施手册 pl-sql develo ...

  9. VM 打开虚拟机时报“内部错误”

    VM 打开虚拟机时报“内部错误” 你是直接双击VM软件吗? 试下右键用管理员身份打开VM吧 是不是成功了 不成功不要找我,我就是这样成功的,就自己记录下

  10. PHP缓冲区强制及时输出

    string '{"multicast_id":4917012850725514945,"success":0,"failure":38,& ...