dockerfile创建自定义镜像

1、作用

创建自定义的镜像,包含配置文件、挂载点、对外暴露的端口、设置环境变量等

2、docker创建镜像的方式

(1)基于已有镜像创建

根据官方提供的镜像源创建镜像,拉取容器,但空空如也,只能提供基础功能,扩展性功能还需要自定义(进入容器进行操作)

(2)基于模板创建https://download.openvz.org/template/precreated/

(3)dockerfile创建(生产中使用)

①定义:联合文件系统(UnionFS),docker镜像的基础

②特性:镜像通过分层进行集成,一次同时加载多个文件系统,但从用户角度来说,就是一个文件系统

③docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS,每一层都是一个layers,每一层都包含文件系统的一部分,这些层次叠加在一起最终形成rootfs

bootfs:宿主机提供的内核和引导程序

rootfs:容器的操作系统,在dockerfile中可以自己指定。是多个基础镜像和应用镜像结合起来的只读层,实际上,镜像就是一个只读文件,容器基于镜像实例,运行起来后,容器变成一个可读可写层

注意:

①在dockerfile中,每创建一个指令都是一个镜像层

②镜像层会被缓存和复用。一旦有一层镜像失败,所有的镜像层都会失败,镜像也不会创建

举例:镜像总共1-6层

若1-4层失败,直接完成,继续运行5-6层

整个镜像失败

③镜像层是不可变的,在某一层中添加一个新的命令,但在下一层删除此指令,镜像中基于此命令创建的文件依然存在,但在容器中看不见

举例:第一层执行touch 123

第二层执行rm -rf 123

整个容器中没有123

3、dockerfile核心

用户个性化定制docker镜像

4、dockerfile结构

(1)基础镜像信息

(2)维护者信息

(3)镜像的操作指令

(4)容器启动时执行的命令

5、dockerfile语法(所有语法都是大写)

代表必须要加的

(1)FROM:指定基础镜像信息(指定容器的操作系统)

(2)MAINTAINER:指定维护者信息(可有可无)

(3)RUN:在基础镜像信息上执行的命令。每个RUN代表一层,RUN越多,分层越多,镜像越大

(4)ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序)【面试题】

(5)CMD:指定容器运行时的默认命令(docker run加上后面其他命令,例如:/bin/bash,cmd指令将会被覆盖)【面试题】

(6)EXPOSE:暴露端口(指定容器的运行端口)

(7)ENV:设置环境变量。环境变量可以被RUN命令使用(声明容器运行时需要的环境变量)

(8)ADD:复制、解压(不支持.zip和.tar,只支持tar.gz、tar.bz2、url地址解压)。ADD主要作用是解压,官方推荐用copy复制

(9)COPY:复制本地文件(文件要和dockerfile在一个目录才能复制)

(10)VOLUME:创建容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载(可有可无)

(11)USER:设置运行镜像时使用的用户或者UID(可有可无)

(12)WORKDIR:为后续指令(ENTRYPOINT和CMD)设置的工作目录

(13)ONBUILD:这个镜像可以被其他镜像引用,就需要这个命令(可有可无)

(14)ARG:用于创建容器时传递参数(可有可无)

CMD和ENTRYPOINT的区别【面试题】

(1)共同点:①都可以作为容器启动时的默认命令

②ENTRYPOINT和CMD指令在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的生命周期,主进程退出,容器将终止运行

(2)不同点:①CMD可以把参数传给ENTRYPOINT

②多个ENTRYPOINT和多个CMD,只会运行最后一个(一般Dockerfile中只有一个ENTRYPOINT和CMD)

③在docker run后面加上输出,ENTRYPOINT指令不会被覆盖,CMD指令会被覆盖

创建基础镜像

①CMD可以把参数传给ENTRYPOINT

创建镜像Dockerfile

(每个都命名为Dockerfile,每个Dockerfile都是单独目录)

构建镜像docker build -t centos7:test .

.表示使用当前目录下的Dockerfile

创建容器docker run --name centos1 centos7:test

②多个ENTRYPOINT和多个CMD,只会运行最后一个(一般Dockerfile中只有一个ENTRYPOINT和CMD)

③在docker run后面加上输出,ENTRYPOINT指令不会被覆盖,CMD指令会被覆盖

6RUN命令的优化

目的:减少镜像的层数,减小镜像,把多个RUN命令写在一起

操作:①&&符号(前一个命令执行成功才会执行下一个命令)

RUN yum -y install nginx&&make -j 4&&make install

②;符号(不管前一个命令是否成功,后面的命令都会执行)(不推荐)

RUN yum -y install nginx;make -j 4;make install

③||符号—或(前面的命令执行失败,才会执行后面的命令)(不推荐)

RUN yum -y install nginx||make -j 4||make install

④\—换行。可读性更高

RUN yum -y install nginx\

&&make -j 4\

&&make install

7、COPY和ADD区别

(1)共同点:COPY和ADD都可以把本地文件复制到镜像中,但官方推荐复制使用COPY

(2)不同点:ADD可以解压。若是一个压缩文件,ADD在复制后会自动解压(只支持tar.gz和tar.bz2);支持URL下载源文件,不能解压,通过URL拷贝的文件无法自动解压

COPY只能复制本地文件,不能解压,不支持URL路径

8、基于centos7构建一个apache的dockerfile(编译安装)

(1)环境准备

(2)创建基础镜像Dockerfile

MAINTAINER声明作者

-D指定运行方式

FOREGROUND前台运行

如果yum安装报错,重启docker

(3)创建容器

9、基于镜像的二次构建(很少用)

10、基于centos7构建一个nginx的dockerfile(编译安装)

(1)创建基础镜像Dockerfile

mkdir nginx

vim Dockerfile

(2)构建镜像

docker build -t nginx:1.22.0 .

(3)创建容器

docker run -itd --name nginx -p 80:80 nginx:1.22.0

注意:一定要指定端口-p 80:80,否则本地无法访问

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

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

相关文章

Swagger快速上手

快速开始&#xff1a; 导入maven包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version> </dependency><dependency><groupId>io.springfox<…

深拷贝、浅拷贝 react的“不可变值”

知识获取源–晨哥&#xff08;现实中的人 嘿嘿&#xff09; react中如果你想让一个值始终不变 或者说其他操作不影响该值 它只是作用初始化的时候 使用了浅拷贝–改变了初始值 会改变初始值(selectList1) 都指向同一个地址 const selectList1 { title: 大大, value: 1 };con…

编辑器Sublime text 常用快捷命令 列模式 替换空行

平替notepad 下载可取官网 www.sublimetext.com 据说可以无限试用&#xff0c;没有功能限制 1、快速删除空行 ctrl h选择正则表达式 .*Find输入&#xff1a; ^(\t)*$\nReplace输入&#xff1a;点击Replace All 2、快速选择指定字符 用鼠标选中alt f3修改 3、列编辑模式 ct…

lv13 交叉开发环境搭建

1 ubuntu网络环境配置 目的&#xff1a;让Ubuntu可以上外网&#xff0c;让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

Axure->Axure安装,Axure菜单栏和工具栏功能介绍,页面及概要区

Axure安装Axure菜单栏和工具栏功能介绍&#xff0c;页面及概要区 1.Axure安装 即时设计 - 可实时协作的专业 UI 设计工具 (js.design) 点击上方下载安装⬆ 打开软件点击帮助->管理授权-> 被授权人 Axure 授权密钥:gjqpIxSSUUqFwPoZPi8XwBBhRE2VNmOQsrord0JqShk4QCXxrw6…

Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件

Postman 提供了四种类型的变量 环境变量&#xff08;Environment Variable&#xff09; 不同的环境&#xff0c;使用不同的环境变量&#xff0c;例如&#xff1a;测试过程中经常会用到 测试环境&#xff0c;外网环境等 全局变量&#xff08;Global Variable&#xff09; 所有的…

arcgis for js 添加自定义叠加图片到地图坐标点上

在使用arcgis for js开发地图绘制图层时&#xff0c;可以通过相关api实现添加图标到某个坐标点&#xff0c;那么如果现在有一个需要添加一个小图叠大图的需求&#xff0c;又或者是自定义绘制图标&#xff0c;如何实现&#xff1f; 1、简单地绘制一个图标到底图图层上面 const…

DevEco Studio 3.1IDE环境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE环境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、环境安装 IDE下载地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 IDE的安装就是…

智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文…

Python爬取酷我音乐

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

Sci Transl Med

今天给同学们分享一篇实验文章“Radiation-induced circulating myeloid-derived suppressor cells induce systemic lymphopenia after chemoradiotherapy in patients with glioblastoma”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解…

2024 年 SEO 现状

搜索引擎优化&#xff08;SEO&#xff09;一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程&#xff0c;SEO领域正在经历重大变革&#xff0c;有些变革已经开始&#xff0c;这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…