Docker创建镜像的方式---Dockerfile

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

Docker创建镜像的方式

1、 基于已有镜像创建:根据官方提供的镜像源,创建镜像。然后拉起容器。是一个白板智能提供基础的功能,扩展性的功能需要在容器内自定义

2、 基于模板创建:根据官方提供的模板

docker import ubuntu-14.04-x86-minimal.tar.gz -- ubuntu:14
#导入本地docker镜像

3、 dockerfile

基于Dockerfile

dockerfile:联合文件系统(UnionFS),是docker镜像的基础。

镜像通过分层来进行集成。

dockerfile的特性:一次同时加载多个文件系统,但是从外部来看就是一个文件系统

docker镜像实际上就是由一层一层的文件系统组成。

这种层级的文件系统就是UnionFS。每一层都是layers,每一层都包含文件系统的一部分。这些层次叠加在一起,最终形成就是rootfs

1、 bootfs:宿主机地引导文件系统,启动操作系统的文件,启动容器需要的最基本的文件。包含宿主机的bootloader和kernel。

2、 rootfs:镜像的操作系统。会给镜像自动创建一个操作系统。

3、 RUN、ADD:创建容器时的命令

4、 形成container容器

容器基于镜像实例,运行起来之后,容器变成可读可写层。

在dockerfile当中每创建一个指定都是一个镜像层

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

镜像层是不可变的,你在某一层当中添加一个新的命令。但是在下一层删除了指令。镜像中基于这个命令创建的文件还是会存在。但是在容器中看不见。

dockerfile的核心,用户个性化定制docker的镜像。

dockerfile的结构

1、 基础镜像

2、 维护者信息

3、 镜像的操作指令

4、 容器启动时执行的命令

nginx:定义好了容器执行的命令

/bin/bash:覆盖了容器内的标准输出

dockerfile的语法

在dockerfile中所有的语法命令都是大写

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

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

RUN:在基础镜像上执行的命令。每个run就是一层,分层越多,镜像越大。

ENTRYPOINT:设置容器运行时的默认命令(容器内部运行的主程序)(和CMD任选其一

CMD:指定容器运行时的默认命令(docker run /bin/bash后面加了其他命令那么cmd的命令将会被覆盖)(和ENTRYPOINT任选其一

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

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

ADD:复制、解压。解压不支持.zip和.rar。只支持.tar.gz tar.bz2 支持url地址解压和复制(解压)

COPY:复制文件。不能解压。只能复制本地文件。文件需要和dockerfile在一个目录。(官方推荐复制使用COPY)

VOLUME:创建一个容器内的挂载点。既可以为宿主机挂载,也可以实现容器与容器之间挂载。

USER:设置运行镜像时使用的用户或者UID(可以不加)

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

ONBUILD:这个镜像可以被其他镜像引用。需要这个命令

ARG:传参。用于创建容器时,传递参数。ENV用于容器运行时设置环境变量。

Dockerfile创建镜像

所有的Dockerfile都叫Dockerfile

FROM centos:7

MAINTAINER "this is my docker <zyg>"

ENTRYPOINT ["echo","hello"]

CMD ["world"]

docker build -t centos7:test .
#.:使用当前dockerfile文件

ENTRYPOINT和CMD的区别

1、 cmd可以把参数传递给ENTRYPOINT

2、 多个ENTRYPOINT和多个CMD只会运行最后一个(一个dockerfile当中只会有一个ENTRYPOINT和一个CMD)

3、 ENTRYPOINT的指令不会被覆盖,CMD的指令如果在docker run后面加上输出,会被覆盖。

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

RUN命令的优化

主要是减少镜像的层数,把多个RUN命令写在一块。

1、 &&符号:

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

前一个命令执行成功才会执行下一个命令

2、 ;符号:了解即可

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

3、 ||符号:逻辑或。了解即可

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

如果前一个命令执行失败才会执行后面的操作

4、 \符号:可以理解为换行

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

提高可读性

COPY和ADD的区别

COPY和ADD都可以把本地文件复制到镜像中,但是官方推荐如果是复制使用COPY

区别:

ADD可以解压。如果是一个压缩文件,ADD在复制之后会自动解压(tar.gz tar.gz2)支持URL路径下载源文件。支持下载,但是不能解压了。通过URL拷贝的文件无法自动解压

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

基于centos7构建apach的Dcokerfile(编译安装)

mkdir apache
cd /opt/apache
#创建基础镜像
FROM centos:7
MAINTAINER "this is my apache <zyg>"
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 build -t apache:centos .

docker run -itd --name http1 -p 1314:80 apache:centos
#根据创建好的镜像创建一个容器名为http1
通过指定的端口在外部浏览器测试一下
20.0.0.41:1314

基于镜像进行二次构建

vim Dockerfile
#创建基础镜像
FROM centos:7 AS first
MAINTAINER "this is my apache <zyg>"
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
#二层构建:了解即可
FROM centos:7
COPY --from=first /usr/local/httpd /usr/local/httpd
RUN yum -y install make pcre pcre-devel expat-devel perl
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

docker build -t apache1:centos .

基于centos7构建nginx的Dcokerfile(编译安装)

#创建基础镜像
FROM centos:7
MAINTAINER "this is my nginx <zyg>"
ADD nginx-1.22.0.tar.gz /opt
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel &&\
useradd -M -s /sbin/nologin nginx &&\
cd /opt/nginx-1.22.0 &&\
./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 &&\
make -j 4 && make install &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin
RUN mkdir -p /usr/local/nginx/run
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

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

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

相关文章

Redis实现延迟队列

目录 一、什么是延时队列 二、延时队列的应用 三、举例说明 我的设计思想: 一、什么是延时队列 延时队列相比于普通队列最大的区别就体现在其延时的属性上&#xff0c;普通队列的元素是先进先出&#xff0c;按入队顺序进行处理&#xff0c;而延时队列中的元素在入队时会指定…

魔众文库系统v5.7.0版本文件顺序选择,短信注册支持设置密码,前端界面升级

文件顺序选择&#xff0c;短信注册支持设置密码&#xff0c;前端界面升级 [新功能] 富文本支持文档一键导入&#xff0c;支持Word文档&#xff08;docx&#xff09;、Markdown文档&#xff08;md&#xff09; [新功能] 财务中心→全部订单新增"业务订单ID"筛选条件…

10天玩转Python第7天:python 面向对象 全面详解与代码示例

今日内容 封装(定义类的过程) 案例(存放家具) 继承 多态 封装的补充 私有和公有权限属性的分类(实例属性, 类属性)方法的分类(实例方法, 类方法, 静态方法) 封装案例 # 定义家具类 class HouseItem: """家具类""" def __init__(self, name, a…

linux应用层编程问题--沙雕问题

1.调用沁恒 USB读取接口 读不到数据 static bool CH37XASyncReadData(int iIndex, uint32_t epindex, void *oBuffer, uint32_t *ioLength) {struct _bulkUp {uint32_t len;uint8_t epindex;uint8_t data[0];} __attribute__((packed));struct _bulkUp *bulkUp;int retval;bul…

zookeeper基础内容

文章目录 Zookeeper基础概述数据结构Zookeeper节点操作zookeeper节点操作命令数据模型 znode 结构 zookeeper java客户端ZooKeeper原生APICuratorzkClient对比总结 Zookeeper基础 概述 zookeeper&#xff08;分布式协调服务&#xff09; 本质&#xff1a;小型的文件存储系统监…

Android13适配所有文件管理权限

Android13适配所有文件管理权限 前言&#xff1a; 很早之前在Android11上面就适配过所有文件管理权限&#xff0c;这次是海外版升级到Android13&#xff0c;由于选择相册用的是第三方库&#xff0c;组内的同事没有上架Google的经验直接就提交代码&#xff0c;虽然功能没有问题…

3.qml 3D-Node类学习

Node类是在View3D 中的对象基础组件&#xff0c;用于表示3D空间中的对象&#xff0c;类似于Qt Quick 2D场景中的Item&#xff0c;介绍如下所示&#xff1a; 如上图可以看到&#xff0c;Node类的子类非常多&#xff0c;比如Model类(显示3D模型)、ParticleSystem3D粒子系统类、Li…

Guardrails for Amazon Bedrock 基于具体使用案例与负责任 AI 政策实现定制式安全保障(预览版)

作为负责任的人工智能&#xff08;AI&#xff09;战略的一部分&#xff0c;您现在可以使用 Guardrails for Amazon Bedrock&#xff08;预览版&#xff09;&#xff0c;实施专为您的用例和负责任的人工智能政策而定制的保障措施&#xff0c;以此促进用户与生成式人工智能应用程…

C#爬虫1688以图搜图API接口功能的实现

背景 在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下 网址 &#xff1a;https://www.1688.com/ 这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。 实现思路 1、找到图片上传接口 post请求&#xff0c;for…

R、python读取空间转录组的8种方式

“ 空间转录组测序主要包括5个步骤&#xff0c;我们着重下游分析部分&#xff1a;空转数据分析和可视化。本篇主分享如何使用python和R读取空转数据&#xff0c;主要使用scanpy stlearn seurat包” 引言 在正式开始之前&#xff0c;我们先看看cellranger流程跑完之后&#xff0…

杰卡德的故事

三个男人分别是杰卡德距离 杰卡德相似系数和杰卡德系数 杰卡德相似系数和杰卡德距离是互为相反数的。 杰卡德系数和杰卡德距离是不是一回事 感觉是一回事

【论文阅读】Uncertainty-aware Self-training for Text Classification with Few Label

论文下载 GitHub bib: INPROCEEDINGS{mukherjee-awadallah-2020-ust,title "Uncertainty-aware Self-training for Few-shot Text Classification",author "Subhabrata Mukherjee and Ahmed Hassan Awadallah",booktitle "NeurIPS",yea…

mybatis高级扩展-插件和分页插件PageHelper

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

OpenHarmony应用开发——创建第一个OpenHarmonry工程

一、前言 本文主要介绍DevEco Studio的相关配置&#xff0c;以及创建第一个OpenHarmony应用程序。 二、详细步骤 打开DevEco Studio. 进入Settings. 随后SDK选择OpenHarmony&#xff0c;并完成下述API的选择与下载. 等待下载完成后&#xff0c;创建第一个Project. 此处选择Emp…

在React中实现好看的动画Framer Motion(案例:跨DOM元素平滑过渡)

前言 介绍 Framer Motion 是一个适用于 React 网页开发的动画库&#xff0c;它可以让开发者轻松地在他们的项目中添加复杂和高性能的动画效果。该库提供了一整套针对 React 组件的动画、过渡和手势处理功能&#xff0c;使得通过声明式的 API 来创建动画变得简单直观。 接下来…

ChatGPT4 Excel 高级组合函数用法index+match完成实际需求

在Excel 函数用法中有一对组合函数使用是非常多的,那就是Index+match组合函数。 接下来我们用一个实际的需求让ChatGPT来帮我们实现一下。 我们给ChatGPT4发送一个prompt:有一个表格A2至A14为业务员B列至H列为1月至7月的销售额,请根据J2单元格的业务员与K2单元格的月份查找出…

DevOps搭建(二)-阿里云镜像仓库的使用详解

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

使用令牌桶和漏桶实现请求限流逻辑

实现请求限流 令牌桶算法原理实现案例案例目的:实例demo运行结果: 漏桶算法原理:实现案例:案例目的:案例代码运行结果: 令牌桶算法和漏桶算法是两种常用的限流算法&#xff0c;用于控制系统对请求或数据的访问速率。下面分别详细解释这两种算法的原理. 令牌桶算法 原理 令牌桶…

前端传递参数,后端如何接收

目录 简单参数 传递方式 获取方式一 获取方式二 相关注解 实体参数 数组集合参数 传递方式 相关注解 获取方式一 获取方式二 日期参数 传递方式 相关注解 获取方式 json参数 传递方式 相关注解 获取方式 路径参数 传递方式 相关注解 获取方式 传递多个…

DHCP最全讲解!(原理+配置)

一、概述 随着网络规模的不断扩大&#xff0c;网络复杂度不断提升&#xff0c;网络中的终端设备例如主机、手机、平板等&#xff0c;位置经常变化。终端设备访问网络时需要配置IP地址、网关地址、DNS服务器地址等。采用手工方式为终端配置这些参数非常低效且不够灵活。IETF于19…