dockerfile---创建镜像

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单写
        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<JavaEE> 网络编程 -- 网络通信基础(协议和协议分层、数据封装和分用)

目录 一、IP地址 1&#xff09;IP地址的概念 2&#xff09;IP地址的格式 二、端口号 1&#xff09;端口号的概念 2&#xff09;端口号的格式 3&#xff09;什么是知名端口号&#xff1f; 三、协议 1&#xff09;协议的概念 2&#xff09;协议的作用 3&#xff09;TC…

IBIS AMI Model 算法模式的选择

常规的信号完整性仿真&#xff0c;只会包含传统的基于IBIS的芯片行为级模型&#xff0c;但高速串行总线在使用过程中&#xff0c;经常会由于传输信道或链路过长以及信号频率较高而造成信号衰减过大&#xff0c;接收端无法正确判别信号&#xff0c;因此&#xff0c;这类SerDes芯…

Amazon SageMaker:让机器学习变得更简单、更强大

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 前言&#xff1a; 在大数据时代的浪潮中&#xff0c;数据不再只…

指令数据:训练大模型的“隐形助力”

作者&#xff1a;谭婧 &#xff08;一&#xff09;指令数据&#xff0c;了解一下 先聊一件圈内趣事&#xff1a; 2023年初&#xff0c;大约在1月到2月份前后&#xff0c; 百度公司如流工作卡上有一个任务&#xff0c; 让百度员工打开脑洞&#xff0c;写“问答对”。 一问一答都…

HashMap常见面试问题

简述HashMap原理&#xff1f; HashMap基于数组加链表的方式来实现&#xff0c;数组下标通过hash值来计算&#xff0c;当下表冲突时&#xff0c;就会进行遍历链表&#xff0c;当链表长度大于8的时候会转化为红黑树。 HashMap的put过程&#xff1f; put的第一步是计算hash值&a…

什么时候使用匿名类,匿名类解决了什么问题?为什么需要匿名类 ?

匿名类通常在以下场景下使用&#xff1a; 一次性使用&#xff1a; 当你需要创建一个类的实例&#xff0c;但该类只在一个地方使用&#xff0c;而不打算在其他地方重复使用时&#xff0c;可以考虑使用匿名类。 简化代码&#xff1a; 当创建一个小型的、一次性的类会让代码更简洁…

VUE中如果让全局组件在某一页面不显示

目录 前言 方法一 1.在全局组件中添加一个变量用于控制显示与隐藏。 2.在全局组件的模板中使用 v-if 条件来决定是否显示该组件 3.在不需要显示全局组件的页面中&#xff0c;修改 showGlobalComponent 变量的值为 false&#xff0c;以隐藏全局组件。 4.在需要隐藏全局组…

TrustZone之总线请求

接下来&#xff0c;我们将查看系统中的总线请求者&#xff0c;如下图所示&#xff1a; 系统中的A型处理器具有TrustZone感知&#xff0c;并在每个总线访问中发送正确的安全状态。然而&#xff0c;大多数现代SoC还包含非处理器总线请求者&#xff0c;例如GPU和DMA控制器。 与完成…

​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展

在数字化时代&#xff0c;云计算成为推动创新和业务发展的关键驱动力。Amazon Lightsail 作为亚马逊云科技家族中的一员轻量应用服务器&#xff0c;为小型企业和创业公司提供了简便、强大的云计算服务。无论您是刚刚起步的初创公司&#xff0c;还是需要灵活而高效的云解决方案&…

第5次实验:ICMP

目的&#xff1a; 要看ICMP&#xff08;互联网控制信息协议&#xff09;是如何使用的。ICMP是IP的一个配套协议&#xff0c;通过处理各种错误和测试情况&#xff0c;帮助IP执行其功能。通过处理各种错误和测试情况来帮助IP执行其功能。它在第5.6.4节中有介绍。文中有涉及。在做…

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…

【CANoe】CANoe中使用RS232

文章目录 1、CANoe中自带示例2、示例讲解2.1CANoe自带Port A和Port B通讯2.2CANoe自带Port A和串口助手通讯 1、CANoe中自带示例 我使用的事CANoe12&#xff0c;RS232路径如下&#xff1a; C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.75\IO_HIL\RS23…

如何安全运行别人上传的Python代码?

写后端的同学&#xff0c;有时候需要在网站上实现一个功能&#xff0c;让用户上传或者编写自己的Python代码。后端再运行这些代码。 涉及到用户自己上传代码&#xff0c;我们第一个想到的问题&#xff0c;就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行&…

人工智能联盟的首件神兵利器——“Purple Llama” 项目,旨为保护工智能模型安全性

Meta公司&#xff08;Meta Platform Inc&#xff09;&#xff0c;原名Facebook&#xff0c;创立于2004年2月4日&#xff0c;市值5321.71亿美元。总部位于美国加利福尼亚州门洛帕克。 Meta 公司推出了名为“Purple Llama”的项目&#xff0c;旨在保护和加固其开源人工智能模型。…

部署Nextcloud详细步骤及优化方法

一、安装PHP8.0以上 我这里使用PHP8.0.30 [rootlocalhost ~]# php -v PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.30, Copyright (c) Zend Technologies [rootlocalhost ~]# 安装方法参考 二、安装MY…

安卓版pytCharm怎么启动,安卓版手游免费下载

大家好&#xff0c;给大家分享一下安卓版python编辑器安装tkinter&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 我的GitHub 是的&#xff0c;Python 代码可以在 Android 平台上运行&#xff0c;尽管这并不是 Python 传统上最常用的运行环…

正则表达式(6):分组与后向引用

正则表达式&#xff08;6&#xff09;&#xff1a;分组与后向引用 总结 本博文转载自 在本博客中&#xff0c;”正则表达式”为一系列文章&#xff0c;如果你想要从头学习怎样在Linux中使用正则&#xff0c;可以参考此系列文章&#xff0c;直达链接如下&#xff1a; 在Linux中…

【Stm32-F407】Keil uVision5 下新建工程

①双击鼠标左键打开Keil uVision5&#xff0c;选择 Project 下的 New uVision Project &#xff1b; ②在期望的文件夹下创建一个工程&#xff0c;并按如下要求操作&#xff1b; ③添加文件类型&#xff0c;按如下要求操作 ④如有需要可添加相关启动文件在工程文件夹下并添加到…

RNN介绍及Pytorch源码解析

介绍一下RNN模型的结构以及源码&#xff0c;用作自己复习的材料。 RNN模型所对应的源码在&#xff1a;\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 RNN的模型图如下&#xff1a; 源码注释中写道&#xff0c;RNN的数学公式&#xff1a; 表示在时刻的隐藏状态…

渗透测试框架——Cobalt Strike

渗透测试框架——Cobalt Strike Cobalt Strike是一款非常成熟的渗透测试框架。Cobalt Strike在3.0版本之前是基于Metasploit框架工作的&#xff0c;可以使用Metasploit的漏洞库。从3.0版本开始&#xff0c;Cobalt Strike不再使用Metasploit的漏洞库&#xff0c;成为一个独立的…