当前位置: 首页 > news >正文

Docker基础:Dockerfile相关知识介绍

目录

1、Dockfile介绍

2、Dockerfile命令书写规则

3、Dockerfile的指令的分类

4、Dockerfile指令组成

4.1 From(指定基础镜像)

4.2 MAINTAINER(指定镜像作者信息)

4.3 RUN (指定需要执行的shell命令)

4.4 CMD(设置容器启动时执行的操作)

4.5 ENTRYPOINT(设置容器启动时执行的操作)

4.6 USER(设置容器执行shell命令的用户)

4.7 EXPOSE(宿主和容器端口映射设置)

4.8 ENV(设置环境变量)

4.9 ADD(文件复制命令)

4.10 COPY

4.11 VOLUME (指定挂载点)

4.12 WORKDIR(设置工作目录)

5、完整的Dockerfile示例

5.1 创建mytomcat文件

5.2 构建镜像

5.3 运行镜像


今天给大家整理一下Dockerfile相关的知识,希望对大家能有所帮助!

1、Dockfile介绍

Dockfile是一种可以被Docker解释的脚本文件,Dockerfile其实由若干条的指令组成,每条指令对应Linux下面的一条脚本命令。Docker应用程序可以将这些指令转化为Linux实际执行的命令。Docker读取Dockerfile文件的指令然后生成对应的docker镜像。通过dockerfile文件可以比较明确的描述出Docker镜像是如何一步一步构建的。有了Dockerfile,我们可以根据实际的因业务需要构建自己的镜像并可以添加一些需要执行的命令,这样可以避免后续的部署工作省去了需要重复敲命令的繁琐过程,大大节约了项目部署的时间成本

2、Dockerfile命令书写规则

Dockerfile的指令忽略大小写,不过建议使用大写,可以使用#作为指令的注释,每一行只能表示一条指令,每条指令可以携带多个参数。

3、Dockerfile的指令的分类

根据作用可以分为两种,构建指令和设置指令。

构建指令:用于构建Docker镜像,其指定的操作不会在运行image的容器上执行,属于镜像的构建过程。。

设置指令:用于设置Docker镜像的属性,其指定的操作会在运行镜像的容器中执行。

4、Dockerfile指令组成

4.1 From(指定基础镜像)

  • Dockerfile必须指定FROM ,并且是第一行,属于构建命令。

  • 表示基于那个基础镜像来构建

  • 基础镜像可以是本地镜像也可以是远程仓库的镜像

语法: FROM image name

4.2 MAINTAINER(指定镜像作者信息)

用来指定构建镜像的作者信息,方便后续通过docker inspect命令查看,对镜像没有实际的影响。

语法: MAINTAINER author name

4.3 RUN (指定需要执行的shell命令)

该命令会在新创建的镜像上添加新的层面。docker build 时运行。

格式:RUN  command命令

4.4 CMD(设置容器启动时执行的操作)

可以是执行自定义脚本,也可以是执行系统命令,该指令只能在文件中存在一次,如果有多个,则只会执行最后一条。docker run时运行。

格式: CMD ["executable","param1","param2"] 或 CMD ["param1","param2"]

4.5 ENTRYPOINT(设置容器启动时执行的操作)

设置指令,指定容器启动时执行的命令,可以追加命令,但是只有最后一个ENTRYPOINT有效。

格式: ENTRYPOINT ["executable", "param1","param2"]

4.6 USER(设置容器执行shell命令的用户)

设置指令,设置启动该容器的用户,默认是root用户。

格式:USER root

4.7 EXPOSE(宿主和容器端口映射设置)

指定容器需要映射到宿主机器的端口。

格式: EXPOSE port

4.8 ENV(设置环境变量)

ENV指令可以用于为docker容器设置环境变量。

示例: ENV JAVA/HOME /usr/local/jdk1.8.0.25 指定java环境变量

4.9 ADD(文件复制命令)

复制文件命令,支持自动下载和解压

格式:ADD  源路径  目标路径

优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

说明:参数:destination 是容器内的路径。source 可以是 下载文件的URL 或者宿主主机的目录

4.10 COPY

类似ADD命令,将地文件拷贝到镜像中

本地目录为源目录时,官方推荐使用COPY。

4.11 VOLUME (指定挂载点)

创建一个可以从本地主机或其他容器挂载的挂载点,用来存放数据库和需要保持的数据等

4.12 WORKDIR(设置工作目录)

指定RUN、CMD与ENTRYPOINT 命令的工作目录。

格式:  WORKDIR  /path/to/workdir

5、完整的Dockerfile示例

5.1 创建mytomcat文件

FROM centos
#设置作者
MAINTAINER xiaoming admion@qq.com
#拷贝tomcat jdk 到镜像内并解压
ADD apache-tomcat-8.5.30.tar.gz /usr/local/tomcat
ADD jdk-8u202-linux-x64.tar.gz /usr/local/jdk
#设置工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置jdk 和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_202
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-8.5.30
ENV CATALINA_BASE /usr/local/tomcat/apache-tomcat-8.5.30
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#设置暴露的端口
EXPOSE 8080
#运行tomcat
CMD /usr/local/tomcat/apache-tomcat-8.5.30/bin/startup.sh && tail -f /usr/local/tomcat/apache-tomcat-8.5.30/logs/catalina.out

5.2 构建镜像

docker build -f mytomcat -t xm/tomcat:1.8 .

注意:docker build 命令最后要有一个 .

5.3 运行镜像

docker run -d -p 8080:8080 --name mytomcat1.8
-v /usr/local/tomcat/logs:/usr/local/tomcat/apache-tomcat-8.5.30/logs/
-v /usr/local/tomcat/webapps:/usr/local/tomcat/apache-tomcat-8.5.30/webapps/  
xm/tomcat:1.8

相关文章:

  • Elastic实战:canal自定义客户端,实现mysql多表同步到es
  • R语言dplyr包select_if函数筛选dataframe数据中的所有因子类型变量(筛选所有的因子数据列、is.factor)
  • LVC | 一种简单的小样本目标检测方法
  • TypeScript 贪吃蛇游戏详细教程
  • 无需内嵌代码的全新GUI截图方案在TouchGFX,ThreadX GUIX,emWin,LVGL,AWTK全部测试通过,含多缓冲方式玩法
  • 【信息科学技术与创新】机器学习 深度学习 人工神经网络相关分析
  • YOLO v7详解
  • 简简单单的结构体
  • Spring Cloud Zookeeper 优雅下线优化
  • 《计算机视觉基础知识蓝皮书》第3篇 卷积神经网络
  • 【JavaScript】四个常用功能/案例:表格排序 | 替换链接 | 倒计时 | 双色球机选一注
  • 数据结构-复杂度(深入学习版+Java版)
  • 【opencv-c++】cv::addWeighted图像加权混合
  • C++开发坦克大战--补充(加入传送门)--附完整代码
  • 浅谈梯度下降算法(模拟退火实战)
  • Angular Elements 及其运作原理
  • CentOS7简单部署NFS
  • export和import的用法总结
  • Java精华积累:初学者都应该搞懂的问题
  • Java面向对象及其三大特征
  • java取消线程实例
  • mysql常用命令汇总
  • orm2 中文文档 3.1 模型属性
  • Python 基础起步 (十) 什么叫函数?
  • react 代码优化(一) ——事件处理
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • react-native 安卓真机环境搭建
  • Spring核心 Bean的高级装配
  • vue2.0项目引入element-ui
  • 观察者模式实现非直接耦合
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 蓝海存储开关机注意事项总结
  • 前端自动化解决方案
  • 如何合理的规划jvm性能调优
  • 入门到放弃node系列之Hello Word篇
  • 提醒我喝水chrome插件开发指南
  • 昨天1024程序员节,我故意写了个死循环~
  • # include “ “ 和 # include < >两者的区别
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #QT项目实战(天气预报)
  • #Z0458. 树的中心2
  • #微信小程序:微信小程序常见的配置传旨
  • (zhuan) 一些RL的文献(及笔记)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 中的轻量级线程安全
  • .NET6实现破解Modbus poll点表配置文件
  • .NET连接MongoDB数据库实例教程
  • /var/lib/dpkg/lock 锁定问题
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [20150629]简单的加密连接.txt