【500强 Kubernetes 课程】第4章 dockerfile基础篇-基本语法

【读书笔记-首页】基于世界500强的高薪实战Kubernetes课程

第4章 dockerfile基础篇-基本语法

  • dockerfile构建镜像的文本文件

1FROM 

作用:基础镜像来源

2MAINTAINER 

作用:作者信息

3RUN

作用:构建过程中运行的命令 

4EXPOSE

作用: 申明端口
  • docker build 构建镜像时运行

  • docker run -P 时,会自动随机映射 EXPOSE 的端口

  • 可以指定多个 EXPOSE

格式:

        EXPOSE <端口 1> [<端口 2>...] 

5CMD

作用:为启动的容器 指定默认要运行的程序 (会被 docker run 覆盖
  • docker run 时运行

  • 程序运行结束,容器也就结束

  • CMD 指令指定的程序可被docker run 命令行参数中指定要运行的程序所覆盖

两种模式
  • exec  模式  如:CMD [“程序名”,“参数1”,“参数2”]

  • Shell 模式  如:CMD command 

 

6ENTERYPOINT 

作用:为启动的容器 指定默认要运行的程序 (会被 docker run  --entrypoint 覆盖
  • 类似于 CMD 指令但不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 

  •  docker run  --entrypoint 选项,将覆盖 entrypoint 指令指定的程序 

  • 优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需参数 

  • 注意: Dockerfile 中多个 ENTRYPOINT 指令,仅最后一个生效 

格式: 
  • ENTERYPOINT [“程序名”,“参数1”,“参数2”](exec 模式) 

  • ENTERYPOINT command (shell 模式) 

可以搭配 CMD 命令使用:

一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参


示例: 

> 假设已通过 Dockerfile 构建了 nginx:test 镜像: 


        FROM nginx 
        ENTRYPOINT ["nginx", "-c"] # 定参 
        CMD ["/etc/nginx/nginx.conf"] # 变参

1、不传参运行 

        $ docker run nginx:test 

容器内会默认运行以下命令,启动主进程。 

        nginx -c /etc/nginx/nginx.conf 
 

2、传参运行 (new.conf 覆盖nginx.conf)

        $ docker run nginx:test -c /etc/nginx/new.conf 

容器内会默认运行以下命令,启动主进程

        nginx -c /etc/nginx/new.conf

(/etc/nginx/new.conf:假设容器内已有此文件)

 

7COPY

作用:复制文件或者目录到容器
格式:
  • COPY [--chown=<user>:<group>] <源路径>... <目标路径> 

  • COPY [--chown=<user>:<group>] ["<源路径>",... "<目标路径>"] 

[--chown=<user>:<group>]

        可选参数,用户改变复制到容器内文件的拥有者和属组。 
 

<源路径>

        源文件/目录,支持 Go 的 filepath.Match 通配符

例如: 
        COPY hom* /mydir/ 
        COPY hom?.txt /mydir/ 

 

<目标路径>

        容器内的指定路径,路径不存在,会自动创建 

 

8ADD 

作用:功能类似COPY,官方推荐使用 COPY
 
优点:

        自动解压 为 tar<源文件> 到 <目标路径>

缺点:

        在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
 

例:替换/usr/share/nginx 下的 index.html 

  • Dockerfile 文件

cd /root/dockerfile/test1 
cat dockerfile 
FROM centos 
MAINTAINER xianchao 
RUN yum install wget -y 
RUN yum install nginx -y 
COPY index.html /usr/share/nginx/html/ 
EXPOSE 80 
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] 

实战:

# 构建镜像,并打标签(-t <标签名> ,其中t为tag)docker build -t="dockerfile/copy:v1" . # 根据镜像运行容器,-d <后台运行> ,-p <容器内端口> ,--name <容器名>docker run -d -p 80 --name html3 dockerfile/copy:v1 # 查看所有镜像 , grep <过滤名称>docker ps | grep html3
 显示如下:
478868402ac4 dockerfile/copy:v1 "/usr/sbin/nginx -
g …" 15 seconds ago Up 12 seconds 0.0.0.0:32771->80/tcp html3

 

访问页面

        curl 192.168.40.180:32771 显示的就是替换后的页面

9VOLUME 

作用:定义匿名数据卷
  • 避免重要的数据,因容器重启而丢失,这是非常致命的。 

  • 避免容器不断变大

  • docker run 通过 -v 参数修改挂载点

格式:
  • VOLUME ["<路径 1>", "<路径 2>"...] 

  • VOLUME <路径> 

 

10WORKDIR 

作用:指定工作目录 (必须提前创建好)填写绝对路径
  • 用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在

  • 每一个 RUN 命令都是新建的一层

  • 只有通过 WORKDIR 创建的目录才会一直存在

格式:
  • WORKDIR <工作目录路径> 

示例

        WORKDIR /path/to/workdir  

 

11ENV

作用:设置环境变量 
格式:
  • ENV <key> <value> 

  • ENV <key>=<value>... 

示例

        以下示例设置 NODE_VERSION =6.6.6,

        在后续的指令中可以通过 $NODE_VERSION 引用: ENV NODE_VERSION 6.6.6 
 

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" 
\ && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" 

 

12USER

作用:切换后续命令执行的用户用户和用户组必须存在) 
格式:
  • USER <用户名>[:<用户组>] 
示例:
USER daemon 
USER nginx 
USER user 
USER uid 
USER user:group 
USER uid:gid 
USER user:gid 
USER uid:group 

 

13ONBUILD 

作用:用于延迟构建命令的执行

        Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build 构建时会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。 

格式:
  • ONBUILD <其它指令> 

场景:为镜像添加触发器 

        当一个镜像被其他镜像作为基础镜像时需要写上 OBNBUILD ,会在构建时插入触发器指令 
 
 

14LABEL 

作用:给镜像添加元数据(metadata)
格式:
  • LABEL <key>=<value> <key>=<value> <key>=<value> ...

示例:
LABEL org.opencontainers.image.authors="lijiong"

 

15HEALTHCHECK 

作用:指定某个程序或者指令来监控 docker 容器服务的运行状态
格式:
  • HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况

  • HEALTHCHECK NONE:屏蔽基础镜像自带的健康检查

  • HEALTHCHECK [选项] CMD <命令> : 参考 CMD 的用法

 

16ARG 

作用:构建参数,与 ENV 作用域不同
  • 作用域:仅对 Dockerfile 内有效,即只有 docker build 中有效

  • docker build 中用 --build-arg <参数名>=<值> 来覆盖

格式:
  • ARG <参数名>[=<默认值>]


用于。
格式:



 

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

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

相关文章

Firewalld端口富规则——删除默认开放的服务

在Redhat8.6中&#xff0c;firewalld默认开放了ssh、cockpit、dhcpv6-client三个服务的端口富规则。如果想把默认开放的服务关掉可以执行下面的命令&#xff1a; firewall-cmd --permanent --remove-servicessh firewall-cmd --permanent --remove-servicecockpit firewall-cmd…

ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容

ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容 概述 什么是 AJAX &#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种用于创建快速动态网页的技术。 传统的网页&#xff08;不使用 AJAX&#…

PHP如何实现邮箱验证

在PHP中&#xff0c;提供了 mail() 函数用于发送邮件。使用该函数需要设置邮件头信息、收件人地址、邮件主题和邮件内容等参数。下面是一个简单的使用示例&#xff1a; $to 收件邮箱; $subject 邮件主题; $message 邮件内容; $from 发件邮箱; $headers "From: $from…

Linux 进程(一)

1 操作系统 概念&#xff1a;任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括 内核&#xff08;进程管理&#xff0c;内存管理&#xff0c;文件管理&#xff0c;驱动管理&#xff09; 其他程序&#xff08;例…

linux安装docker(脚本一键安装配置docker)

1、创建脚本 vi initDocker.sh #安装前先更新yum&#xff0c;防止连接镜像失败 yum -y update#卸载系统之前的docker&#xff08;可选择&#xff0c;我这里直接注释了&#xff09; #yum remove docker docker-client docker-client-latest docker-common docker-latest docke…

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…

android开发:子线程更新UI界面

多线程操作经常希望在子线程更新界面&#xff0c;这样方便调试&#xff0c;但是&#xff0c;但是经常这样做程序就不对劲了&#xff0c;为什么呢&#xff1f;因为为了保证界面流畅&#xff0c;不允许在非UI线程直接操作界面&#xff0c;只能通过一些专门途径进行。另外&#xf…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代&#xff0c;博客已经成为许多人分享观点、经验和知识的重要平台。然而&#xff0c;对于博主们来说&#xff0c;每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题&#xff0c;一些创新的工具应运而生&#xff0c;其中包括WordPress的…

vuepress-----4、侧边栏

# 4、侧边栏 # 自动生成侧栏 如果你希望自动生成一个仅仅包含了当前页面标题&#xff08;headers&#xff09;链接的侧边栏&#xff0c;你可以通过 YAML front matter 来实现&#xff1a; --- sidebar: auto ---你也可以通过配置来在所有页面中启用它&#xff1a; // .vuep…

深入探索 Vue 响应式原理:数据驱动视图的奥秘

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Docker快速创建一个单机版的Jenkins实例

谈到 CI/CD&#xff0c;那便少不了这里面的佼佼者 Jenkins&#xff0c;正如 Jenkins 官网说的一样&#xff1a;“Build great things at any scale”&#xff0c;构建伟大&#xff0c;无所不能&#xff01; 话不多说&#xff0c;该篇文章将会带你使用 Docker 快速创建一个单机…

COGVLM论文解读(COGVLM:VISUAL EXPERT FOR LARGE LANGUAGE MODELS)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、摘要二、引言三、模型方法1、模型思路2、融合公式 四、训练方法总结 前言 2023年5月18日清华&智谱AI发布并开源VisualGLM-6B以来&#xff0c;清华KEG&…

C++多线程-传递普通变量,指针,引用给线程

注意点&#xff1a; 1、传递空间已销毁 2、多线程共享一块内存 3、传递的指针变量的生命周期小于线程 #include <iostream> #include <thread> #include <string> #include <unistd.h>using namespace std;class Para {public:Para(){cout<<…

Linux搭建FTP并安装xrdp,实现Windows系统下利用FileZilla传输文件和远程桌面连接

一、实现FTP文件传输 1、搭建FTP服务器&#xff1a; sudo apt-get install vsftpd sudo service vsftpd status 2、查看vsftpd是否正在运行&#xff0c;并监听21端口 netstat -npl | grep :21 or sudo service vsftpd status # 查看 vsftpd 服务状态 3、配置vsftpd.conf sud…

4.6-容器的端口映射

首先&#xff0c;我们来拉取Nginx的image镜像。 docker pull nginx 接下来我们创建一个Nginx的容器。 docker run --name nginx -d nginx 但是&#xff0c;这样启动nginx容器的话我们没法访问。这个时候怎么办呢&#xff1f;就需要将Nginx这个服务暴露给外面的世界。 这时可以使…

yum命令详解

yum命令详解 文章目录 yum命令详解1. yum介绍2. yum使用说明3. yum命令的常见使用 1. yum介绍 yum&#xff08;全称为Yellow dogUpdater, Modified&#xff09;是一个在Fedora、RedHat以及CentOS中的软件包管理器&#xff0c;基于RPM包管理&#xff0c;能够从指定的服务器自动…

【C++】POCO学习总结(八):通知Notifications和事件Events

【C】郭老二博文之&#xff1a;C目录 1、Notifications和Events的区别 1&#xff09;通知Notifications&#xff1a;如果观察者不知道或不关心事件的来源&#xff0c;则使用通知Notifications。 Poco::NotificationCenter或Poco::NotificationQueue位于源source和目标target之…

【虚拟机】Docker基础 【一】

1.1.部署MySQL 首先&#xff0c;我们利用Docker来安装一个MySQL软件&#xff0c;大家可以对比一下之前传统的安装方式&#xff0c;看看哪个效率更高一些。 如果是利用传统方式部署MySQL&#xff0c;大概的步骤有&#xff1a; 搜索并下载MySQL安装包上传至Linux环境编译和配置…

Camunda 7.x 系列【57】流程设计器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. bpmn.js2.1 简介2.2 体系结构2.3 演示3. 仿钉钉3.1 钉钉创建流程3.2 实现建议3.2…

洛谷100题DAY8

36.P1416 攻击火星 此题找出规律即可 #include<bits/stdc.h> using namespace std; int n; int main() {cin >> n;cout << max(0, n - 2);return 0; } 37.P1551 亲戚 并查集模板题目 两个人如果使亲戚就合并建立联系&#xff0c;最后进行查找即可 #incl…