Dockerfile生成镜像并实现应用自启
来源:互联网 发布:linux视频服务器搭建 编辑:程序博客网 时间:2024/06/05 00:20
初学docker,磕磕绊绊经历了很多坑,终于摸着点门路,趁手热赶紧记下来,后面温习改进。本篇的主要内容是,通过dockerfile文件,生成一个新镜像,并且实现镜像在启容器时,容器中应用自启动。
关于docker的基本操作和基础镜像这里就不再赘述了,我基于的基础镜像是centos7.0。
第1步,准备jdk1.7压缩包,并解压
# wget http://zhibo100.oss-cn-hangzhou.aliyuncs.com/software/jdk-7u79-linux-x64.tar.gz# tar -zxvf jdk-7u79-linux-x64.tar.gz
第2步,编辑dockerfile文件(涉密部分x代替)
FROM 基础镜像:1.2MAINTAINER xxxxxxxxxxxxxxxxxx.comCOPY jdk1.7.0_79 jdk1.7.0_79ENV JAVA_HOME=/jdk1.7.0_79ENV PATH=$JAVA_HOME/bin:$PATHENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarEXPOSE 20110EXPOSE 20140EXPOSE 20410EXPOSE 20440ENTRYPOINT ["java","-jar","/esb/lib/xxxxxx.jar"]
第3步,生成镜像(注意命令后面有一个 . )
# docker build -t 新镜像名 .
步骤看着很简单是吧?对于新手真是踩坑踩的不要不要的
1,如何进行容器中端口与宿主机的端口映射?
这是我在操作过程中遇到的第一个坑,先来认识两个参数:
-p 可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器-P 它会随机映射一个端口至容器内部开放的网络端口
对于指定端口映射,可以采用如下命令去启动容器
# docker run -d -it -p 宿主机端口:容器端口 -p 8088:8080 --name 容器名 镜像名:版本号
另外一种,就是本文dockerfile采用的这一种了,dockerfile中EXPOSE命令字,EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
生成容器时使用命令
# docekr run -d -it -P --name 容器名 镜像名:版本号
2,如何实现容器在启动时,应用自启动
这里描述一个之前失败的一个思路,并且总结从中学习到的东西。
容器中放一个启动脚本文件(.sh),然后在dockerfile中用CMD命名去执行;
然后出现了一个问题:容器启动后自动退出,并且应用没启
通过查找发现,Docker 在执行shell的时候,是在后台执行的;因此,在shell执行完成以后,docker检测到没有前台任务需要执行,便退出container。在shell脚本的最后加上一个“永远完成不了”的命令:
# tail -f /dev/null
进一步来探寻这个问题
Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用 upstart/systemd 去启动后台服务,容器内没有后台服务的概念。对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。因此主进程实际上是 sh。那么当 service nginx start 命令结束后,sh 也就结束了,sh 作为主进程退出了,自然就会令容器退出。
所以我后来采取了直接执行jar包
- Dockerfile生成镜像并实现应用自启
- 利用Dockerfile制作node+nginx应用自启动镜像
- 利用Dockerfile创建镜像并生成容器
- docker Dockerfile生成镜像
- Dockerfile 构建nginx镜像并运行
- centos7 docker Dockerfile 生成镜像
- 利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
- 实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署
- 使用dockerfile来pull镜像并启动
- Dockerfile 构建镜像
- Dockerfile创建镜像
- Dockerfile生成镜像的时候是如何缓存的?
- 使用Dockerfile创建简单java应用镜像
- 3 使用 Dockerfile 实现 自动化构建(创建) 镜像
- dockerfile制作docker镜像
- Dockerfile构建本地镜像
- Dockerfile 创建 tomcat 镜像
- dockerfile 创建 ssh 镜像
- Linux 文件系统理解
- 电商某些相关依赖
- 类型转换
- 从HPC到AI,看联想的进阶之路
- string与十六进制byte互转
- Dockerfile生成镜像并实现应用自启
- FEB开发指南
- 面试必备:ArrayMap源码解析
- Oc 本地推送
- Kylin初涉
- QTP11的安装
- 编写一个程序,要求接收一个数字,程序会将这个数字以二进制方式打印,例如:数字10 , 以1010的方式打印出来
- 侧滑
- MVP注册用户