网站首页 > 基础教程 正文
简介: Docker通过读取Dockerfile里面的内容可以自动创建镜像(image),Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系。Docker程序将读取Dockerfile,根据指令生成定制的image。Dockerfile是一个包含了build过程中需要执行的所有命令的文本文件。也可以理解为Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux系统下面的一条命令,由Docker程序将这些Dockerfile指令翻译成真正的Linux命令。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,直观明确的表明image是怎么产生的。有了Dockerfile,当需要定制个性化的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了不断输入命令的麻烦。
本文将通过Dockerfile容器文件创建Tomcat镜像,Tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过Tomcat中间件,将动态资源(而apache和nginx处理的是静态资源)转发到最终的目的服务器上,响应消息再通过Tomcat返回给浏览器。
详细内容请参考下文。
一、Dockerfile格式
1、Dockerfile格式
2、Dockerfile编写规则
说明:Dockerfile的指令是忽略大小写的,建议使用大写,使用#作为注释,每一行只支持一条指令,每条指令可以携带多个参数。
Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。构建指令用于构建镜像(image),其指定的操作不会在运行镜像(image)的容器上执行;而设置指令则用于设置镜像(image)的属性,其指定的操作将在运行镜像(image)的容器中执行。
二、Dockerfile构建Tomcat镜像
1、准备阶段
(1)、登录Linux
(2)、创建Tomcat的dockerfile目录
2、构建阶段
(1)、查看docker的运行情况
执行指令# systemctl status docker
备注:Docker运行状态为active (running),说明Docker已经安装并正常运行。
(2)、pull docker镜像
执行指令# docker pull centos:7.6.1810
(3)、下载Tomcat&JDK安装包
(4)、上传Tomcat&JDK安装包到创建的目录下
(5)、编写Dockerfile文件
#基础镜像
FROM centos:7.6.1810
#作者名称
LABEL maintainer="JasonTang"
ENV REFRESHED_AT 2024-02-26
#切换镜像目录,进入/usr目录
WORKDIR /usr
#在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk
#在/usr/下创建tomcat目录,用来存放tomcat
RUN mkdir tomcat
#将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下
ADD jdk1.8.0_401 /usr/jdk/
#将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下
ADD apache-tomcat-8.5.59 /usr/tomcat/
#设置环境变量
ENV JAVA_HOME=/usr/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
#设置权限
RUN chmod -R 777 /usr/tomcat/bin/
RUN chmod -R 777 /usr/jdk/
#公开端口
EXPOSE 8080
#设置启动命令
ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]
(6)、通过docker命令构建镜像
执行指令# docker build -t tomcat:v2 .构建tomcat镜像
备注:执行指令后有镜像id显示,表示指令执行成功。
(7)、查看生成的镜像
执行指令# docker images
(8)、通过创建好的镜像启动一个容器
执行指令# docker run -dit -p 8080:8080 --name tomcat tomcat:v2
(9)、查看刚生成的容器
执行指令# docker ps -a
(10)、访问页面
执行指令# curl 本机IP地址
终端计算机浏览器访问
三、Docker启动后的错误信息及其解决办法
说明:通过镜像创建容器后,有时会出现Exited (126)或者Exited (127)的错误信息。
1、Exited (126)
说明:一般情况下,出现Exited (126)错误信息是由于JDK版本的问题,这个可以通过执行下列指令
# docker logs [容器ID] 查看启动过程的报错信息。
备注:通过查询,发现是由于JDK是32位版本,需要更换为64位的版本。
2、Exited (127)
说明:而出现Exited (127)错误信息情况是由于容器里头的目录及其以下文件没有对应权限,这个需要执行下列指令
先查询报错信息:
#docker logs [容器ID] 查看启动过程的报错信息。
再通过修改Dockfile文件执行授权指令:
然后执行
#docker rm [容器ID]删除容器
#docker rmi [镜像ID]删除镜像
再根据新的Dockerfile重新生成镜像
# docker build -t tomcat:v2 .
# docker run -dit -p 8080:8080 --name tomcat tomcat:v2
猜你喜欢
- 2025-03-14 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
- 2025-03-14 教你测试开发丨测试小白也能听懂的Docker讲解和应用
- 2025-03-14 Docker安装及mysql、redis实战(docker安装mysql5.7)
- 2025-03-14 Docker技术:大神整理——Harbor私服搭建和使用
- 2025-03-14 Springboot项目使用docker部署(springboot docker部署)
- 2025-03-14 终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
- 2025-03-14 linux下面安装docker(linux安装docker报错)
- 2025-03-14 DeepSeek:一分钟教会你部署Tomcat
- 2025-03-14 Docker 安装Mysql(流程、注意点、实例)
- 03-14从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
- 03-14教你测试开发丨测试小白也能听懂的Docker讲解和应用
- 03-14Docker安装及mysql、redis实战(docker安装mysql5.7)
- 03-14Docker技术:大神整理——Harbor私服搭建和使用
- 03-14Springboot项目使用docker部署(springboot docker部署)
- 03-14Linux环境通过Dockerfile创建Tomcat镜像
- 03-14终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
- 03-14linux下面安装docker(linux安装docker报错)
- 最近发表
-
- 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
- 教你测试开发丨测试小白也能听懂的Docker讲解和应用
- Docker安装及mysql、redis实战(docker安装mysql5.7)
- Docker技术:大神整理——Harbor私服搭建和使用
- Springboot项目使用docker部署(springboot docker部署)
- Linux环境通过Dockerfile创建Tomcat镜像
- 终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
- linux下面安装docker(linux安装docker报错)
- DeepSeek:一分钟教会你部署Tomcat
- Docker 安装Mysql(流程、注意点、实例)
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)