dockerfile---创建镜像

news2024/9/23 17:11:44

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

docker镜像的方式:

1、基于官方源进行创建

根据官方提供的镜像源,创建镜像,然后拉起容器。是一个白板,只能提供基础的功能,扩展性的功能还是需要自定义(进入容器进行操)


2、基于模板进行创建

3、dockerfile

联合文件系统(UnionFS),docker的基础。镜像通过分成来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统。
docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。
每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs。

docker原理

bootfs:宿主机提供的内核和引导程序
roosfs:就是容器的操作系统,在dockerfile中,我们可以自己指定。
rootfs是多个基础镜像和应用镜像结合起来的只读层。镜像实际上就是一个只读文件
容器基于镜像实力,运行起来后容器可变成可读可写层。

docker报错

在dockerfile当中每创建一个指定都是一格镜像,镜像层被缓存和复用
1-6层
1-4 4失败
再次执行1-4直接完成,继续运行5-6

一旦有一层镜像失败,那么所有的镜像层都会失败。镜像也不会创建
镜像层是不可变的,在某一次添加一个新的命令,在下一次删除指令,镜像中基于这个命令创建的文件依然存在,但在容器中不可见。

总结以上描述核心:用户个性化定制docker的镜像

dockerfile的结构:

1、基础镜像信息
2、维护者信息
3、镜像的操作指令
4、容器启动时,执行的命令。

docker logs 没日志原因?????????

nginx:定义好了容器执行的命令 /bin/bash,覆盖了容器内的标准输出。

dockerfile语法:

类型名说明
FROM指定基础镜像的信息,指定容器的操作系统。
MAINTAINER指定维护者信息(可有可无)
RUN在基础镜像上执行的命令,每个run就是一层,分层越多,镜像就越大。
ENTRYPOINT设置容器运行时的命令(容器内部运行的主程序)
CMD可以指定容器运行时的默认命令(docker run /bin/bash后面加了其他的命令,cmd指令将会被覆盖)
EXPOSE暴露端口(指定容器的运行端口)
ENV设置环境变量,环境变量可以被run命令使用(声明容器运行需要的环境变量)
ADD复制,解压。解压不支持.zip和.tlr,tar.gz tar.bz2 支持url的地址解压和复制(解压)
COPY复制文件,不能解压,而且只能复制本地文件。文件要和dockerfile在一个目录.。(官方推荐)
VOLUME创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载。
USER设置运行镜像时使用的用户或者UID(可以不加)
WORKDIR未后续指令设置的工作目录。
ONBUILD这个镜像可以被其他镜像引用,需要这个命令。
ARG传参,用于创建容器时,传递参数。ENV用于容器运行时设置环境变量。

CMDENTRYPOINT的区别

 cmd可以把参数传给ENTRYPOINT的默认命令。
有多个entrypoint和多个cmd,只会运行最后一个(一个dockerfile当中只会有一个entrypoint和cmd)
 ENTRYPOINT指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖。
ENTRYPOINT和CMD的指令在容器启动时执行,都会成为容器的主进程。主进程负责接受信号,处理容器的生命周期,主进程退出,容器也将终止运行。

RUN命令的优化:

核心作用:主要是减少镜像的层数:把多个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
如果前面的命令执行失败,才会执行后面的操作

\:换行

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

可读写更高

copy和add区别

copy和add都可以把本地文件复制到镜像中,官方推荐复制用copy
add:可以解压,add可以在复制文件之后会自动解压,可以支持URL下载源文件,支持下载,但是不能解压。通过URL拷贝的文件无法自动解压。
copy:只能复制,不能解压,而且只能是本地文件,不支持URL路径

centos7 构建一个apache的dockerfile(编译安装):

所需的包放在与Dockerfile文件同一个目录下

vim Dockerfile

FROM centos:7
MAINTAINER "this is my apache <LYW>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

创建启动容器

docker run -itd --name 容器 镜像名:标签

例
docker run -itd --name test1 apache1:centos

centos7 构建一个apache的dockerfile(编译安装):

FROM centos:7
MAINTAINER "this is my nginx <LYW>"
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /opt
RUN useradd -M -s /sbin/nologin nginx &&\
cd /opt/nginx-1.22.0 &&\
mkdir -p /usr/local/nginx/run/ &&\
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&\
chown -R nginx.nginx /usr/local/nginx &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ &&\
make -j 4 && make install
EXPOSE 80
RUN
CMD ["/usr/local/nginx/sbin","-g","daemon off;"]

创建启动容器

docker run -itd --name nginx1 nginx:centos

操作中遇到的问题

1、yum安装出错

解决方法:重启docker

systemctl restart docker.service

2、报错:RUN中&&\与下一个命令一起

解决方案:将下一条命令run单写
        

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

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

相关文章

国产猫粮推荐排行榜有哪些牌子?国产主食冻干猫粮品牌十大排行

近年来&#xff0c;冻干猫粮作为热门的高品质猫粮&#xff0c;受到了许多追求纯天然、健康食品的铲屎官的关注。萌新铲屎官就很疑惑了冻干猫粮可以代替猫粮作为主食吗&#xff1f;冻干猫粮真就那么好吗&#xff1f; 作为一个猫咖店长&#xff0c;这几年我至少给猫挑选了20几款…

智能故障诊断期刊推荐【中文期刊】

控制与决策 http://kzyjc.alljournals.cn/kzyjc/home 兵工学报 http://www.co-journal.com/CN/1000-1093/home.shtml 计算机集成制造系统 http://jsjjc.soripan.net/ 机械工程学报 http://www.cjmenet.com.cn/CN/0577-6686/home.shtml 太阳能学报 https://www.tynxb.org.c…

Windows ❀ 关闭Google的自动更新功能

文章目录 1. 故障问题2. 解决方法 1. 故障问题 如何关闭掉Google的自动更新功能&#xff1f; 2. 解决方法 修改更新域名本地hosts为环回地址即可。 # 禁止google自动更新 127.0.0.1 update.googleapis.com备注&#xff1a; mac路径&#xff1a;/etc/hostswindows路径&…

SpringBoot之数组,集合,日期参数的详细解析

1.4 数组集合参数 数组集合参数的使用场景&#xff1a;在HTML的表单中&#xff0c;有一个表单项是支持多选的(复选框)&#xff0c;可以提交选择的多个值。 多个值是怎么提交的呢&#xff1f;其实多个值也是一个一个的提交。 后端程序接收上述多个值的方式有两种&#xff1a; 数…

EM的理论基础

1 EM定义​ 电迁移(Electro-Migration)是指在外加电场下,电子和金属原子之间的动量转移导致材料的运动。这种动量传递导致金属原子(比如Cu原子)从其原始位置移位,如图7-1。这种效应随着导线中电流密度的增加而增加,并且在更高的温度下,动量传递变得更加严重。因此,在先…

2023全球开发者生态调研:84%的开发者表示他们在工作中正积极使用生成式AI工具

今年JetBrains首次在一年一度的开发者生态调研中&#xff0c;增加了人工智能方向的问题。在全球26348名开发者参与的调研中&#xff0c;总体对人工智能的发展持乐观态度。特别是生成式AI在软件开发和编程环节中的应用&#xff0c;84%的开发者表示他们在工作中正在积极使用生成式…

【STM32CubeMX】F103 BxCAN

F103&BxCAN bxCAN总体描述 有一个增强的过滤机制来处理各种类型的报文此外&#xff0c;应用层任务需要更多CPU时间&#xff0c;因此报文接收所需的实时响应程度需要减轻。 接收FIFO的方案允许&#xff0c;CPU花很长时间处理应用层任务而不会丢失报文。 构筑在底层CAN驱动程…

MySQL增量备份与恢复

实验环境 某学校近期在进行期中考试&#xff0c;要求数据库管理员负责一班&#xff0c;二班学生的考试成绩录入&#xff0c;为保证数据的可靠性&#xff0c;数据库管理员在录入学生成绩后均要做数据库备份&#xff0c;并且为了测试备份数据是否可 用&#xff0c;模拟数据丢失故…

柯桥日常英语口语,外贸英语商务英语|英文打电话的常用语

日常生活中&#xff0c;我们常常需要打电话交流。在打电话时说话清楚&#xff0c;使用适当的礼节是很重要的。 如果你太正式&#xff0c;人们在和你说话时&#xff0c;可能会很难感到舒适。如果你太随便&#xff0c;他们可能会认为你很粗鲁&#xff01; 所以&#xff0c;说话的…

Jmeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

Disruptor详解,Java高性能内存队列最优解

文章目录 一、Disruptor介绍1、为什么要有Disruptor2、Disruptor介绍3、Disruptor的高性能设计4、RingBuffer数据结构5、等待策略6、Disruptor在日志框架中的应用7、术语 二、Disruptor实战1、引入依赖2、Disruptor构造器3、入门实例&#xff08;1&#xff09;Hello World&…

MATLAB 绘制伯德图之将幅频特性和相频特性分开绘制方法

幅频和相频特性分别在两个图窗&#xff0c;不在一起方便保存&#xff0c;无需再裁剪 clear; close all; k 1; numH 1; denH [1,k]; sysH tf(numH,denH); w logspace(-2,2);[mag, phase] bode(sysH,w);% 幅频特性 loglog(w,squeeze(mag));grid on; % 相频特性 semilogx(…

在springboot中引入参数校验

一、概要 一般我们判断前端传过来的参数&#xff0c;需要对某些值进行判断&#xff0c;是否满足条件。 而springboot相关的参数校验注解&#xff0c;可以解决我们这个问题。 二、快速开始 首先&#xff0c;我用的springboot版本是 3.1.5 引入参数校验相关依赖 <!--1…

数据之美:零售业的变革之道

数据可视化能够为零售业带来令人瞩目的变化。随着零售业务的发展&#xff0c;数据可视化成为了洞察市场、优化运营并提升客户体验的强大工具。下面我就以可视化从业者的视角出发&#xff0c;简单分析一下数据可视化为零售业可能带来的改变。 数据可视化让零售商深入了解消费者行…

邮政快递物流查询,分析筛选出提前签收件

批量查询邮政快递单号的物流信息&#xff0c;将提前签收件分析筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角…

从 AST 到代码生成:代码背后的秘密花园(下)

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

JS基础之执行上下文

JS基础之执行上下文 执行上下文顺序执行可执行代码执行上下文栈回顾上文 执行上下文 顺序执行 写个JavaScript的开发者都会有个直观的印象&#xff0c;那就是顺序执行&#xff1a; var foo function(){console.log(foo1) } foo(); //foo1 var foo function(){console.log(…

ES分词查询

全文检索介绍 全文检索的发展过程&#xff1a; 数据库使用SQL语句&#xff1a;select * from table where data like “%检索内容%”出现lucene全文检索工具&#xff08;缺点&#xff1a;暴露的接口相对复杂&#xff0c;且没有效率&#xff09;出现分布式检索服务框架solr&am…

Unity 控制刚体的移动与旋转的方法

在场景创建一个Cube,并添加刚体&#xff0c;如图&#xff1a; 编写脚本&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;[RequireComponent(typeof(Rigidbody))] public class RibRotate : MonoBehaviour {//private Vector3 mo…

计算机如何看待内存

计算机如何看待内存&#xff1b; 对象在内存中如何表示&#xff0c;如何操纵对象&#xff1b;