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

dockerFile编写

dockerFile编写

语法参数

# DockerFile常用指令 
USER # 指定运行的用户,一般不用配置 
FROM # 拉取基础镜像,一切从这里开始构建 
ARG # 构建参数,只能在dockerFile中使用,
# eg: JAR_FILE=target/springboot-mongo-0.0.1-SNAPSHOT.jar
MAINTAINER # 镜像是谁写的, 姓名+邮箱 
RUN # 镜像构建的时候需要运行的命令 
ADD # 拷贝文件(支持正则表达式)到镜像,并自动解压(如果是压缩包),也可以自动下载URL并拷贝到镜像,如:ADD http://www.shiyanlou.com/html.tar /var/www
WORKDIR # 镜像的工作目录 
VOLUME # 挂载的目录,eg: VOLUME ["/home/appLog/redis","//home/2233"]
EXPOSE # 暴露的端口配置 
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 
COPY # 类似ADD命令,将我们的文件拷贝到镜像中 
ENV # 构建的时候设置环境变量,可以在后续的指令中使用
HEALTHCHECK # 健康检查
ONBUILD # 延迟构建命令,在本次构建镜像不起作用,当下一个构建的dockerFile引用了本次构建镜像,将会执行命令

配置注意

RUN有两种格式

  • shell 格式:

    RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
    
  • exec 格式:

    RUN ["可执行文件", "参数1", "参数2"]
    # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offlinexxxxxxxxxx 
    

CMDENTRYPOINT区别

ENTRYPOINT 容器启动后执行的命令,让容器执行表现的像一个可执行程序一样,

  • ENTRYPOINTCMD的区别是不可以被 docker run 的命令行参数指定的指令所覆盖,会把docker run后面的参数当作传递给ENTRYPOINT指令的参数。
  • Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。
  • docker run命令的-entrypoint参数可以把指定的参数继续传递给ENTRYPOINT

copyadd的区别

  • add可以将压缩包进行自动解压,还可以下载url的远程文件,但官方不推荐这样使用,官方建议我们当需要从远程复制文件时,最好使用 curl 或 wget 命令来代替 ADD 命令。原因是,当使用 ADD 命令时,会创建更多的镜像层,当然镜像的 size 也会更大
  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢
  • copy只能复制本地文件到镜像,但是没有解压、下载需求,建议使用copy

案例

springboot

FROM java:8
#此处的*为正则表达式,表示以.jar结尾的同步录下的文件(这里的jar是maven打包好的)
COPY *.jar /app.jarCMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

使用dockerFile打包镜像

# '-t' 设置打包镜像tag, '-f' 设置DockerFile文件, '.'选择当前目录
docker build -t testJar:1.0 -f .\DockerFile . 

redis案例一

#指定基础镜像,默认最新版本
FROM centos
#设置镜像yum源,此处应该先进行备份
RUN rm -f /etc/yum.repos.d/*
ADD CentOS-Linux-BaseOS.repo /etc/yum.repos.d/
#重新加载yum
RUN yum clean all
RUN yum makecache
WORKDIR /usr/local
#安装编译必备组件
RUN ["yum","install","-y","gcc","gcc-c++","net-tools","make"]
# 复制并解压缩
ADD redis-5.0.4.tar.gz .
WORKDIR /usr/local/redis-5.0.4/src
#编译安装
RUN make && make install
WORKDIR /usr/local/redis-5.0.4
#复制redis配置文件
ADD redis-6300.conf .
# 暴露端口
EXPOSE 6300
# 容器运行时默认启动redis服务
CMD ["redis-server","redis-6300.conf"]

redis案例二

FROM centos:centos7
RUN ["yum" , "install" , "-y" ,"gcc","gcc-c++","net-tools","make"]
WORKDIR /usr/image
ADD redis-4.0.14.tar.gz .
WORKDIR /usr/image/redis-4.0.14/src
RUN make && make install
WORKDIR /usr/image/redis-4.0.14
ADD redis-7000.conf .
EXPOSE 7000
CMD ["redis-server","redis-7000.conf"]
http://www.lryc.cn/news/38129.html

相关文章:

  • jenkins扩展你的流水线
  • Golang模糊测试入门
  • ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植
  • 不用索引怎么优化百亿数据? | MySQL性能优化篇
  • JavaScript(WebAPI)
  • idea集成GitHub
  • 软考高级信息系统项目管理师系列之四十一:项目组合管理
  • Spring——Spring整合Mybatis(XML和注解两种方式)
  • 【专项训练】布隆过滤器和LRU缓存
  • 从一道面试题看 TCP 的吞吐极限
  • rsync 的用法
  • 【LeetCode每日一题:[面试题 17.05] 字母与数字-前缀和+Hash表】
  • 华为OD机试题 - 简易压缩算法(JavaScript)| 机考必刷
  • Kubenates中的日志收集方案ELK(下)
  • LeetCode - 42 接雨水
  • python --生成时间序列,作为横轴的标签。时间跨越2008-2022年,生成每年的6-10月的第一天作为时间序列
  • 【Unity VR开发】结合VRTK4.0:创建一个按钮(Togglr Button)
  • lottie-miniprogram在taro+vue的小程序中怎么使用
  • C++回顾(二十二)—— stack容器 与 queue容器
  • 逻辑优化基础-disjoint support decomposition
  • 保姆级使用PyTorch训练与评估自己的DaViT网络教程
  • Java8新特性:Stream流处理使用总结
  • Java基准测试工具JMH高级使用
  • 问心 | 再看token、session和cookie
  • Ubuntu 安装 CUDA and Cudnn
  • 【漏洞复现】Grafana任意文件读取(CVE-2021-43798)
  • 磨金石教育摄影技能干货分享|春之旅拍
  • 中断以及 PIC可编程中断控制器
  • SecureCRT 安装并绑定ENSP设备终端
  • ESP32设备驱动-TCS3200颜色传感器驱动