Dockerfile的常用指令和构建案例

news2024/12/29 8:45:00

一、Dockerfile操作常用的指令

 

(1) FROM 镜像

  • 指定新镜像所基于的基础镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令

(2) MAINTAINER 名字

  • 说明新镜像的维护人信息

(3) RUN命令

  • 在所基于的镜像上执行命令,并提交到新的镜像中

(4) ENTRYPOINT [“要运行的程序”,“参数1”, “参数2”]

  • 设定容器启动时第一一个运行的命令及其参数。
  • 可以通过使用命令dockerrun–entrypoint来覆盖镜像中的ENTRYPOINT指令的内容

(5) CMD [“要运行的程序”,“参数1”, “参数2”]

上面的是exec形式, shell形式: CMD  命令  参数1  参数2

  • 启动容器时默认执行的命令或者脚本,Dockerfile只 能有一条CMD命令。如果指定多条命令,只执行最后一条命令。
  • 如果在dockerrun时指定了命令或者镜像中有ENTRYPOINT,那么cmd就会被覆盖。
    CMD可以为ENTRYPOINT 指令提供默认参数
ENTRYPOINT ["echo"]
CMD ["test2"]

(6) EXPOSE 端口号

  • 指定新镜像加载到Docker时要开启的端口

(7)ENV 环境变量变量值

  • 设置一个环境变量的值,会被后面的RUN使用

(8) ADD 源文件/目录目标文件/目录

        将源文件复制到镜像中,源文件要与Dockerfile 位于相同目录中,或者是一个URL
有如下注意事项:
        1、如果源路径是个文件,且目标路径是以/结尾, 则docker会把目标路径当作一一个目录, 会把源文件拷贝到该目录下。
                如果目标路径不存在,则会自动创建目标路径。
        2、如果源路径是个文件,且目标路径是不是以/结尾,则docker会把目标路径当作一个文件。
                如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
                如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
                如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。注意,这种情况下,最好显示的以/结尾,以避免混淆。
        3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
                如果目标路径是个已经存在的目录,则docker 会把源路径目录下的文件拷贝到该目录下。
        4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
                URL"下载和解压特性不能一 起使用。任何压缩文件通过URI拷贝, 都不会自动解压。

(9) COPY 源文件/目录目标文件/目录

  • 只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile 在相同的目录中

(10) VOLUME [“目录”]

  • 在容器中创建一个挂载点.

(11) USER 用户名/UID

  • 指定运行容器时的用户

(12) WORKDIR路径

  • 为后续的RUN、 CMD、 ENTRYPOINT 指定工作目录

(13) |ONBUILD命令

  • 指定所生成的镜像作为一个基础镜像时所要运行的命令。
  • 当在一个Dockerfile文件中加_上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响。
  • 但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像 ( 比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行0NBUILD指令指定的指令,然后才会执行其它指令。
     

(14 ) HEALTHCHECK

  • 健康检查

二、Dockerfile案例

在编写Dockerfile时,有严格的格式需要遵循:

  • 第一行必须使用 FROM 指令指明所基于的镜像名称;
  • 之后使用 MAINTAINER 指令说明维护该镜像的用户信息;
  • 然后是镜像操作相关指令,如RUN指令。每运行一条指令,都会给基础镜像添加新的一层。
  • 最后使用CMD指令指定启动容器时要运行的命令操作。
#建立工作目录
mkdir /opt/ apache
cd /opt/ apache

vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <wdc,2021.7.27>
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
//方法一:
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]

//准备执行脚本
vim run.sh

#!/bin/bash
rm -rf /run/httpd/*                        #清理httpd的缓存
exec /usr/sbin/apachectl -D FOREGROUND     #指定为前台运行
#因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容 器也就退出了。

//准备网站页面
echo "this is test web" > index.html

//生成镜像
docker build -t httpd:centos7 .     #注意别忘了末尾有"."

//新镜像运行容器
docker run -d -p 1216:80 httpd:centos7

//外主机测试
http://192.168.80.10:1216/
########如果有网络报错提示########
[Warning] IPv4 forwarding is disabled. Networking will not work.
解决方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -P
systemctl restart network
systemct1 restart docker

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B2B商城交易平台搭建方案为专用设备行业注入新动力,加快产业数字化转型升级

专用设备是指设备的结构、性能专门针对某一种或一类对象&#xff0c;实现一项或几项功能的工业&#xff0c;包括工程机械、光伏设备、锂电设备、3C设备、半导体设备等。近年来&#xff0c;受市场对专用设备的应用需求不断扩大、产业技术升级趋势加快等影响&#xff0c;我国专用…

直播回顾:Coremail校园邮件安全防护交流会暨新技术应用分享

11月23日&#xff0c;Coremail校园邮件安全防护交流会暨新技术应用分享直播举办。 Coremail作为国内TOP级邮件系统厂商&#xff0c;服务上百家高校&#xff0c;特邀以下重磅嘉宾参与了本次圆桌讨论。 本次圆桌会主要探讨校园典型钓鱼邮件防范与新技术在校园邮件中的应用。 高校…

mysql 查询在一张表不在另外一张表的记录

SQL Join子句&#xff0c;主要用在select语句中&#xff0c;把两个或多个表的行结合起来&#xff0c;基于这些表之间的共同字段(往往是id字段)来查询&#xff0c;从多个表中返回满足条件的所有行。 常见join子句类型 常见join子句类型有INNER JOIN(同JOIN)、LEFT JOIN、RIGHT…

【Java学习Note】第8章 多线程

8. 多线程 文章目录8. 多线程8.1 程序、进程、线程8.2 线程的创建8.2.1 继承Thread类-创建线程方法之一8.2.2 Thread常用方法8.2.3 实现Runnable接口-创建线程方法之二8.2.4 两种多线程的区别8.3 线程得调度8.4 线程的生命周期8.5 线程的同步8.5.1 线程同步--Synchronized8.5.2…

html网页设计与制作:基于html设计整套招聘网站求职前端模板页面 静态网页HTML代码 学生网页课程设计期末作业下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

联通边缘AI:打造“职业技能”,助力行业高质量发展

内容来源&#xff1a;2022年11月12日&#xff0c;由边缘计算社区主办的全球边缘计算大会上海站圆满落幕。我们非常荣幸邀请到了联通数科首席AI科学家廉士国博士来分享&#xff0c;廉博士是中国图像图形学会三维视觉专委会委员、IEEE智能计算及多媒体通信委员会委员、国家工业互…

WSL VSCode运行C++项目

WSL VSCode运行C项目collect2: error: ld returned 1 exit statusboost库的链接安装并编译boost库&#xff1a;链接库(&#xff01;&#xff01;这一步有错误&#xff0c;下面会改正)/usr/include/boost/python/detail/wrap_python.hpp:57:11: fatal error: pyconfig.h: No suc…

RK3588平台开发系列讲解(SARADC篇)SARADC的工作流程

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、SARADC驱动二、SARADC常用接口三、SARADC源码分析1、SARADC驱动注册2、用例分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍SARADC的源码分析和工作流程。 一、SARADC驱…

【Flink】需求实现之独立访客数量的计算 和 布隆过滤器的原理及使用

文章目录一 独立访客数量计算二 布隆过滤器1 什么是布隆过滤器2 实现原理&#xff08;1&#xff09;HashMap 的问题&#xff08;2&#xff09;布隆过滤器数据结构3 使用布隆过滤器去重一 独立访客数量计算 public static void main(String[] args) throws Exception{StreamExe…

Locust学习记录3-用户类属性【host attribute,tasks attribute】

host attribute(主机属性) host属性是家长主机的URL前缀&#xff08;即“https://www.baidu.com”&#xff09;。 这是在Locust的web UI 或命令行上指定的&#xff0c;在Locust【--host】启动时使用该选项 【--host】如果在用户类中声明了一个host属性&#xff0c;那么在命令…

答网友提问 - SAP Business Technology Platform(BTP) 的计费模式

我的知识星球 有朋友向我提问&#xff1a; S4HANA(本地部署或云版)跟SAP家族系统以及非SAP系统的集成&#xff0c;sap的标准/推荐做法是通过BTP还是直接连接&#xff0c;或者是根据目标系统分别选择&#xff1f;有参考链接最好了。 还有BTP的收费模式是什么样的&#xff0c;是不…

业聚医疗通过聆讯:上半年营收6885万美元 钱永勋为实控人

雷递网 雷建平 12月5日血管介入器械公司――业聚医疗集团有限公司&#xff08;OrbusNeich Medical Group Limited&#xff09;&#xff08;简称“业聚医疗”&#xff09;日前通过聆讯&#xff0c;准备在香港上市。上半年营收6885万美元业聚医疗总部位于中国香港&#xff0c;是一…

springboot解决跨域问题

springboot解决跨域问题 文章目录springboot解决跨域问题一、跨域是什么&#xff1f;二、java解决CORS请求的方式1.返回新的CORSFilter&#xff08;全局跨域&#xff09;2.重写WebMvcConfigurer&#xff08;全局跨域&#xff09;3.使用注解CorsOrigin4.手动设置响应头&#xff…

如何安装Ambari集群_大数据培训

注意&#xff1a;以下操作主节点操作即可 1 制作本地源 制作本地源是因为在线安装Ambari太慢。制作本地源只需在主节点上进行。 1.1 配置HTTPD 服务 配置HTTPD 服务到系统层使其随系统自动启动 [roothadoop102 ~]# chkconfig httpd on [roothadoop102 ~]# service httpd …

[附源码]Python计算机毕业设计Django网上电影购票系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

股票量化分析工具QTYX使用攻略——均线系统多头排列选股

搭建自己的量化系统如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。如何学会搭建自己的量化交易系统&#xff1f;边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量化…

【软件测试】软件测试工程师职位核心任务?测试人测试职业发展?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 你认为软件测试工程…

RDMA测试集:preftest安装与使用

RDMA测试集&#xff1a;preftest安装与使用 perftest是一组基于uverbs编写的测试程序&#xff0c;是RDMA性能相关的benchmark。可用于软硬件调优以及功能测试。 源码位置 linux-rdma/perftest: Infiniband Verbs Performance Tests (github.com) perftest测试软件包含的测试…

111个Python数据分析实战项目,代码已跑通,数据可下载

写在前面&#xff1a; 这里整理了111个数据分析的案例&#xff0c;每一个都进行了严格的筛选&#xff0c;筛选标准如下&#xff1a; 1. 有干货&#xff1a;杜绝纯可视化、统计性分析&#xff0c;有一定比例的讲解性文字 2. 可跑通&#xff1a;所有代码均经过测试&#xff0c;…

框架的优点(SpringBoot VS Servlet)

创建项目比较&#xff1a; 创建Servlet项目&#xff1a;流程复杂&#xff0c;容易出错&#xff0c;这里可以参考之前写的一篇博客&#xff1a; 如何创建一个Servlet项目&#xff08;Maven&#xff09;&#xff1f;_crazy_xieyi的博客-CSDN博客_maven创建servlet 1.创建maven…