一、下载centos镜像

  • docker pull hub.c.163.com/library/centos:latest
  • docker tag containId centos:7
  • docker run -i -t -v /Users/enniu1/Desktop/docker-data/software:/mnt/software centos:7
    • -i:以"交互模式"运行容器
    • -t:表示容器启动后会进入其命令行
    • -v:数据卷,这里将宿主机的/Users/enniu1/Desktop/docker-data/software目录(宿主机存放软件目录)挂载到容器的/mnt/software目录(容器存放软件目录)
      • 这里是为了让容器直接共享宿主机的/Users/enniu1/Desktop/docker-data/software目录下的软件

二、宿主机下载jdk之后移动到/Users/enniu1/Desktop/docker-data/software

三、容器内解压jdk

  • cd /opt
  • tar -zxf /mnt/software/jdk-8u102-linux-x64.tar.gz -C .
    • 将/mnt/software/jdk-8u102-linux-x64.tar.gz(直接共享的宿主机的挂载目录)解压到当前目录

四、设置环境变量

  • vi ~/.bashrc,添加如下两句

    • export JAVA_HOME=/opt/jdk
    • export PATH=$PATH:$JAVA_HOME/bin
  • source ~/.bashrc
    • 使文件生效
  • java -version进行测试

五、创建自己的镜像:zjg/jdk8:v1.0(第一种创建镜像的方式)

  • exit退出容器
  • docker commit 86e6187ea166 -m"install jdk8 to centos7" zjg/jdk8:v1.0
    • 86e6187ea166:原本的centos的容器id
    • zjg/jdk8:v1.0:镜像名与tag

六、编写代码并使用maven install为jar包,拷贝到与Dockerfile相同的包下

建立一个简单的springboot项目即可。

二者均在/Users/enniu1/Desktop/docker-data/file目录下

七、编写Dockfile文件

 #first java application

 FROM zjg/jdk8:v1.

 ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/

 ENV JAVA_HOME /opt/jdk
ENV PATH $PATH:$JAVA_HOME/bin CMD ["java","-jar","/opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"]

说明:

  • #注释
  • FROM zjg/jdk8:v1.0
    • 基于哪个镜像进行创建
  • ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/
    • 将宿主机的myservice1-docker-1.0-SNAPSHOT.jar拷贝到容器的/opt/jar/目录下

      • 注意:这里的myservice1-docker-1.0-SNAPSHOT.jar最好与Dockerfile在同一个文件夹下,否则可能有问题(使用绝对路径和相对Dockerfile的路径都有问题)
      • 注意:/opt/jar/必须带有后边的"/"(目录),如果是/opt/jar这样的话,容器会创建一个jar文件而非目录
  • ENV JAVA_HOME /opt/jdk
  • ENV PATH $PATH:$JAVA_HOME/bin
  • CMD ["java","-jar","/opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"]
    • 容器启动之后,执行"java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"

八、创建服务镜像(第二种创建镜像的方式)

  • docker build -t="zjg/myservice1docker:v1.1" /Users/enniu1/Desktop/docker-data/file

    • -t:指定镜像名与tag
    • /Users/enniu1/Desktop/docker-data/file:dockerfile所在的目录

build日志如下:

 Sending build context to Docker daemon  13.8 MB
Step : FROM zjg/jdk8:v1.
---> e7b4cf41e531
Step : ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/
---> ea8401c3ee2e
Removing intermediate container da2e0b518a1f
Step : ENV JAVA_HOME /opt/jdk
---> Running in db5d6bed3872
---> 2c123cd7d20f
Removing intermediate container db5d6bed3872
Step : ENV PATH $PATH:$JAVA_HOME/bin
---> Running in 66bbcdf76dfb
---> 38ce4cac8d38
Removing intermediate container 66bbcdf76dfb
Step : CMD java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar
---> Running in 9359f360c777
---> 1bbfc1635a71
Removing intermediate container 9359f360c777
Successfully built 1bbfc1635a71

每一个step都会创建一层镜像,以上就会创建五层镜像,在删除镜像的时候就会看出,会删除五层镜像。

  • docker images

九、启动测试

  • docker run -d -p 8014:8080 1bbfc1635a71
  • 浏览器访问:localhost:8014/docker/hello(自己springboot项目中的一个controller路径)

第三十七章 springboot+docker(手动部署)的更多相关文章

  1. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  2. Gradle 1.12用户指南翻译——第三十七章. OSGi 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  3. “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. “全栈2019”Java第三十七章:类与字段

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. 【第三十七章】 springboot+docker(手动部署)

    一.下载centos镜像 docker pull hub.c.163.com/library/centos:latest docker tag containId centos:7 docker ru ...

  6. 第十七章 springboot + devtools(热部署)

    技术介绍 devtools:是boot的一个热部署工具,当我们修改了classpath下的文件(包括类文件.属性文件.页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现 ...

  7. SpringBoot | 第三十七章:集成Jasypt实现配置项加密

    前言 近期在进行项目安全方面评审时,质量管理部门有提出需要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题.想想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,导致了相 ...

  8. 第三十八章 springboot+docker(maven)

    回顾上一章的整个部署过程: 使用"mvn install"进行打包jar 将jar移动到与Dockerfile文件相同的文件夹下 编写Dockerfile文件 使用"do ...

  9. 第二十七章 springboot + zipkin(brave-okhttp实现)

    本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620 一.前提 1.zipkin基本知识:附8 zipkin 2.启动zipki ...

随机推荐

  1. IEnumerable 和 IQueryable 区别

    IQueryable继承自IEnumerable,所以对于数据遍历来说,它们没有区别. 但是IQueryable的优势是它有表达式树,所有对于IQueryable的过滤,排序等操作,都会先缓存到表达式 ...

  2. Linux下安装php加速器xcache

    一.环境说明 php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini Nginx安装目录:/usr/local/nginx Ng ...

  3. GridView使用自带分页功能时分页方式及样式PagerStyle

    // 转向地址:http://www.bubuko.com/infodetail-412562.html GridView分页,使用自带分页功能,类似下面样式: 在aspx页面中,GridView上的 ...

  4. ios webview中关于宽高的总结

    测试一 测试的物料: <html> <head> <meta charset="UTF-8"> <meta name="view ...

  5. HTML 全局属性_02

    New : HTML5 新属性. 属性 描述 accesskey 设置访问元素的键盘快捷键. class 规定元素的类名(classname) contenteditableNew 规定是否可编辑元素 ...

  6. C++模板元编程 - 挖新坑的时候探索到了模板元编程的新玩法

    C++真是一门自由的语言,虽然糖没有C#那么多,但是你想要怎么写,想要实现什么,想要用某种编程范式或者语言特性,它都会提供. 开大数运算类的新坑的时候(又是坑),无意中需要解决一个需求:大数类需要分别 ...

  7. xml中数据存储 <![CDATA[ … ]]>

    在xml中  有些可能是 转义的字符  比如像<等  &符号,  你没发现 在加参数后面要进行转义 写成&#26: 可以是&  但是每处都要 这么写.  在未来不可控的 ...

  8. [CF442B] Andrey and Problem (概率dp)

    题目链接:http://codeforces.com/problemset/problem/442/B 题目大意:有n个人,第i个人出一道题的概率是pi,现在选出一个子集,使得这些人恰好出一个题的概率 ...

  9. 【原】安装mongo的php插件

    http://pecl.php.net/package/mongo https://github.com/mongodb/mongo-php-driver/tarball/master 1. 安装mo ...

  10. 【转】CwRsync简介

    rsync是linux下一款用于同步文件的优秀软件,window下也可以使用它,不过名字为cwRsync.cwRsync也分为客户端和服务端,官方网址:https://www.itefix.no/i2 ...