Docker基本概念与实践(五)-使用dockerfile部署简单web项目和springboot项目
Dockerfile简介
Dcokerfile是一个文本格式的配置文件,由一系列命令和参数构建的脚本,用户可通过这个快速构建自定义的镜像
官方仓库dockerhub和一些镜像仓库已经提供大量的镜像,但有些时候不能满足我们的需求,例如安装一些安装比较少的第三方软件,或自定义的项目,这个时候只能先用公共仓库镜像,启动容器,然后在容器中按照我们的需求安装软件,修改配置等等操作,之后提交镜像等等。。。
这种方式显得比较臃肿,Dockerfile为自动化创建部署镜像提供了解决方案。
Dockerfile基本结构
基础镜像信息:以哪个镜像作为基础进行制作,用法是FROM 基础镜像名称 维护者信息:指定维护者信息,用法是MANITAINER 名字/邮箱 镜像操作命令:对基础镜像要进行的改造命令,比如安装新的软件,进行特殊配置等,使用run命令 容器启动执行命令:当基于该镜像的容器启动时需要执行哪些命令,常见的是CMD、ENTRYPOINT命令
几个重要参数
ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖 ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效! CMD,表示镜像运行默认参数,可被重写覆盖 copy与add的区别 copy:能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统 add:不仅能将构建命令所在的主机和目录,还能将远程url对应的文件或目录作为资源复制到镜像文件系统。如果是压缩文件如tar还会帮忙解压 若需要初始化多个命令,彼此可使用&&隔开
很形象的一张图
#创建dockerfile文件 touch dockerfile #与mkdir的区别 touch能更新文件时间戳,如果不存在可新建文件(file),mkdir则只是新建目录(folder) #如果filename存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间 #如果filename不存在,touch指令会在当前目录下新建一个filename空白文件
需注意的地方
在Docker daemon(守护进程)模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出,例如
#以下两种方式运行几秒钟之后,容器就会退出 ENTRYPOINT service tomcat8 start CMD service tomcat8 start #以下方式容器不会自动退出 ENTRYPOINT service tomcat8 start && tail -f /var/lib/tomcat8/logs/catalina.out CMD service tomcat8 start && tail -f /var/lib/tomcat8/logs/catalina.out
如创建包含jdk的ubuntu基础镜像不从本地获取 而在容器内apt-get安装,例如
FROM ubuntu:14.04 MAINTAINER mhy "641084049@qq.com" RUN apt-get update RUN apt-get install -y -q openjdk-7-jdk WORKDIR / ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 CMD ["/bin/bash"]
定制简单的dockerfile并运行完整例子
(这边我用已有的会比较快点,实际应用环境在容器内下载,从宿主机copy或add都有可能用到)
#基础镜像 FROM ubuntu:latest #维护者信息 MAINTAINER Garwer #将压缩好的jdk1.8.0_171 命名为jdk8 并配置环境 (tomcat同理) COPY jdk1.8.0_171 /usr/local/jdk8/ COPY apache-tomcat-9.0.7 /usr/local/tomcat9/ ENV JAVA_HOME /usr/local/jdk8 ENV PATH $JAVA_HOME/bin:$PATH ENV CATALINA_BASE /usr/local/tomcat9 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ENTRYPOINT /usr/local/tomcat9/bin/startup.sh&&tail -F /usr/local/tomcat9/logs/catalina.out
构建并运行
#在Dockerfile目录下构建镜像 并自定义 镜像名:标签 需注意后面有个. docker build -t="ubuntu_web:v1" . #启动镜像 docker run -d -t -i -p 8080:8080 ubuntu_web:v1
2.定制dockerfile,使用springboot项目,导成jar包在ubuntu容器内运行的镜像
#springboot内嵌tomcat,例如在本地运行java -jar xxx java -jar docker.jar #后台运行 后面加& 这种方式缺点是窗口关闭程序中止 java -jar docker.jar & #不挂断运行命令 退出或终端关闭仍然运行 缺点:当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件 nohup java -jar docker.jar & #指定输出文件运行jar 输出内容不打印到屏幕上 将输出pid 日志文件在自定义新生成的out.log查看 nohup java -jar docker.jar >out.log & #根据不同的启动方式CTRL+c或者杀进程来关闭服务
现在将jar包远程到装有docker的宿主机上,再导入到容器中,测试运行,编写dockerfile定制镜像,测试运行
大致步骤
1.将jar包传到服务器上,新建一个目录 2.跟前一个dockerfile大致相同 不过路径要做相应调整,编写dockerfile 3.构建镜像并运行 #构建镜像 docker build -t="ubuntu_springboot:v1" . #启动镜像 docker run -d -t -i -p 8080:8080 ubuntu_springboot:v1
#相比于上个dockerfile 因为jar包自带tomcat省掉了tomcat的配置 FROM ubuntu:latest MAINTAINER Garwer COPY jdk1.8.0_171 /usr/local/jdk8/ ENV JAVA_HOME /usr/local/jdk8 ENV PATH $JAVA_HOME/bin:$PATH #ENV CATALINA_BASE /usr/local/tomcat9 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin ADD docker.jar app.jar EXPOSE 8080 #运行这个jar -jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java基础8:深入理解内部类
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/80087616 这位大侠,这是我的公众号:程序员江湖。 分享程序员面试与技术的那些事。 干货满满,关注就送。 本文主要介绍了Java内部类的基本原理,使用方法和各种细节。 有关内部类实现回调,事件驱动和委托机制的文章将在后面发布。 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/04/25/javase8 内部类初探 一、什么是内部类? 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类 二、内部类的共性 (1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但...
- 下一篇
redis 集群环境搭建
redis 集群环境搭建 Redis集群部署文档(centos7系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个主节点,三个从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 1:下载redis。官网下载3.0.0版本,之前2.几的版本不支持集群模式 下载地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz 2:上传服务器,解压,编译 tar-zxvfredis-3.0.0-rc2.tar.gz mvredis-3.0.0-rc2.tar.gzredis3.0 cd/usr/local/redis3.0 make makeinstall 3:创建集群需要的目录 mkdir-p/usr.local/cluster cd/usr.local/cluster mkdir7000 mkdir7001 m...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G