Docker 之 Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
一、官方镜像
学习docker镜像的制作之前,先去看看官方的镜像是怎么制作的,查看官方dockerfile的方式如下所示
进入官方镜像仓库,搜索镜像,如下图所示

找到镜像后,查看的相应的版本信息并进入到github

进入github后,即可看到官方的Dockerfile,通过Dockerfile文件后,可以清晰的看到镜像的制作过程

二、Dockerfile构建过程
- 基础知识:
- 每个关键字(指令)都必须是大写字母
- 执行流程是从上到下顺序执行
- "#" 表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交

- 步骤
- Dockerfile:构建文件,定义了一切的步骤,源代码
- Dockerimages:通告Dockerfile构建生成的镜像,最终发布运行的产品
- Docker容器:容器就是镜像运行起来提供服务
三、命令
FROM # 基础镜像,一切从这开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 添加内容
WORKDIR # 镜像的工作命令
VOLUME # 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
EXPOSE # 指定暴露端口
CMD # 指定容器启动的时候运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令可以追加命令
ONBUILD # 当构建一个被继承的 dockerfile ,这个时候就会运行ONBUILD的指令,触发指令
COPY # 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
ENV # 构建的时候设置环境变量
ARG # 构建参数,与 ENV 作用一致。不过作用域不一样。
USER # 用于指定执行后续命令的用户和用户组
HEALTHCHECK # 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
LABEL # LABEL 指令用来给镜像添加一些元数据(metadata)
具体的命令使用请看考菜鸟教程的命令介绍
四、Dockerfile编写
这里我们编写自己的Tomcat镜像进行测试
- 准备镜像文件,这里需要Tomcat和jdk的压缩包
- 编写Dockerfile文件,文件命名为Dockerfile,build会自动寻找这个文件,否则编译时需要使用-f指定
FROM ubuntu:16.04
MAINTAINER jiaozhu<3333333333@qq.com> # 名字
COPY readme.txt /usr/local/readme.txt #复制文件
ADD jdk-8u311-linux-x64.tar.gz /usr/local/ #复制解压
ADD apache-tomcat-9.0.56-src.tar.gz /usr/local/ #复制解压
RUN apt-get update --fix-missing && apt-get install -y vim --fix-missing
ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH #设置工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_311 #设置环境变量
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar #设置环境变量 分隔符是:
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.56-src #设置环境变量
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.56-src #设置环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080 #设置暴露的端口
CMD /usr/local/apache-tomcat-9.0.56/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.56//bin/logs/catalina.out # 设置默认命令

注意 这里的Dockerfile中不能进行注释否则编译会出错
- 编译
docker build -t diytomcat:1.0 .

安装完成后即可看到生成的镜像

- 问题

解决办法
# 原始命令
RUN apt-get install -y vim
# 修改方法
RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list;
RUN apt-get update && apt-get install -y vim
#或者这个都可以
RUN apt-get update --fix-missing && apt-get install -y vim --fix-missing
五、运行测试
- 启动Tomcat
docker run -d -p 8088:8080 --name diytomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.56/webapps/test -v /home/tomcat/tomcatlog/:/usr/local/apache-tomcat-9.0.56/logs/ diytomcat:1.0

测试是否启动成功


进入容器,查看设置是否成功

发布自己的应用
- 编写hello.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
</body>
</html>
- 将文件放在webapps/test中


- 打开浏览器访问http://192.168.2.239:8088/test/hello.html

参考文献
Docker:https://www.cnblogs.com/j-chao/p/13212436.html
Docker Dockerfile:https://www.runoob.com/docker/docker-dockerfile.html
Docker build出现“The command :https://blog.csdn.net/weixin_41693877/article/details/108504527
Docker制作Tomcat镜像:https://blog.csdn.net/weixin_43397326/article/details/83306562
Docker 之 Dockerfile的更多相关文章
- Centos7安装Docker 基于Dockerfile 搭建httpd运行环境
Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...
- docker 13 dockerfile的保留字指令
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤:1.编写dockerfile文件:2.docker build:3.docker run doc ...
- docker:Dockerfile构建LNMP平台
docker:Dockerfile构建LNMP平台 1.dockerfile介绍 Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...
- docker之Dockerfile指令介绍
Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...
- Docker、Dockerfile、Docker镜像、容器这些都是什么鸟?
老生常谈,再再再……普及一下: Docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotCloud改成Docker. Dockerfile: ...
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...
- (转)Docker 基础 : Dockerfile
全文来自 Docker 基础 : Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的 ...
- 【docker】Dockerfile
[docker]Dockerfile 转载: ============================================================= =============== ...
- Docker 0x05: Dockerfile制作镜像
目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...
- docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像
docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...
随机推荐
- Advanced .Net Debugging 5:基本调试任务(线程的操作、代码审查、CLR内部的命令、诊断命令和崩溃转储文件)
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第五篇文章.今天这篇文章的标题虽然叫做"基本调试任务",但是这章的内容还是挺多的.上一篇我 ...
- [Java]小功能
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130858061 出自[进步* ...
- 本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献
OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...
- 实战:如何优雅的从 Skywalking 切换到 OpenTelemetry
背景 最近公司将我们之前使用的链路工具切换为了 OpenTelemetry. 我们的技术栈是: OTLP Client──────────►Collect────────►StartRocks (Ag ...
- k8s之基于metallb实现LoadBalancer型Service
一.实验说明 1.介绍 MetalLB 是裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议,主要用于暴露 K8s 集群的服务到集群外部访问,MetalLB 可以让我们在 K8s 集群 ...
- Spring Cloud Alibaba 官方实践指南【文章有点长自备咖啡茶点】
注:本文内容均转自官方文档,方便胖友们学习,不代表博主观点. 链接地址:SpringCloudAlibaba | Spring Cloud Alibaba 基于网关实现 SpringCloud 服务发 ...
- Python2同时输出中文和变量时中文乱码
Python2同时输出中文和变量时中文乱码 一.问题描述 最近在学习tensorflow时,突然发现一个问题,python2在输出中文和变量时会出现一点问题,如下图: 可以看到,输出并不是想要的结果, ...
- 重新整理 .net core 实践篇——— 测试控制器[四十九]
前言 其实就是官方的例子,只是在此收录整理一下. 正文 测试控制器测试的是什么呢? 测试的是避开筛选器.路由.模型绑定,就是只测试控制器的逻辑,但是不测试器依赖项. 代码部分: https://git ...
- IIS 出现405
前言 在一次配置服务器中,出现一个问题,那就是使用put和delete 出现405. 当时我蒙了,调试的时候好好的,部署405. 原因是put和delete是非简单请求,也就是说非安全请求了. 这时候 ...
- 使用Elasticsearch做手机号和身份证号的模糊检索
使用Elasticsearch做手机号和身份证号的模糊检索 背景 客户想通过人名 四位数值 来检索人的信息 例如 张三 3421,例如需要检索包含张三和且手机号或者身份证里包含3421的数据 过程 e ...



