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

news2024/12/26 19:33:37

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;"]

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

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

相关文章

【收获】成长之路

目录 一、前言二、计算机方面三、专业知识方面四、总结 一、前言 四年&#xff0c;对于一个人的成长来说&#xff0c;是一个相当重要的阶段。在这段时间里&#xff0c;我经历了许多挑战、收获了许多成就&#xff0c;也在不断地成长和改变。回首这四年的点点滴滴&#xff0c;我深…

mybatis多表映射-延迟加载,延迟加载的前提条件是:分步查询

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

牛客网(二叉树)

https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking 这个题目和leetcode比起来就是有一些不一样&#xff0c;需要我们自己来写接口函数&#xff0c;所以…

Linux系统编程(一):基本概念

参考引用 Unix和Linux操作系统有什么区别&#xff1f;一文带你彻底搞懂posix Linux系统编程&#xff08;文章链接汇总&#xff09; 1. Unix 和 Linux 1.1 Unix Unix 操作系统诞生于 1969 年&#xff0c;贝尔实验室发布了一个用 C 语言编写的名为「Unix」的操作系统&#xff0…

鸿蒙原生应用/元服务开发-Stage模型能力接口(二)

ohos.app.ability.AbilityConstant (AbilityConstant)一、说明 AbilityConstant提供Ability相关的枚举&#xff0c;包括设置初次启动原因、上次退出原因、迁移结果、窗口类型等。本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口…

stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

stm32学习总结&#xff1a;3、Proteus8STM32CubeMXMDK很有搞头 文章目录 stm32学习总结&#xff1a;3、Proteus8STM32CubeMXMDK很有搞头一、前言二、资料收集三、实际案例-点灯1、Proteus8安装2、Proteus创建stm32F013C6项目并添加外围LED电路3、STM32CubeMX配置F103C6引脚生成…

某信服 EDR 白程序DLL劫持

本文用到的白程序回复公众号20231211进行获取。 嗯… 记得去年HW的时候某信服给我装的EDR一直没卸载&#xff0c;不是不想卸载&#xff0c;是因为卸载要密码&#xff0c;所以就摆烂了。。。。 找到EDR这个目录&#xff0c;然后把目录复制到虚拟机中&#xff0c;然后一个一个e…

记录一下快速上手Springboot登录注册项目

本教程需要安装以下工具&#xff0c;如果不清楚怎么安装的可以看下我的这篇文章 链接: https://blog.csdn.net/qq_30627241/article/details/134804675 管理工具&#xff1a; maven IDE&#xff1a; IDEA 数据库&#xff1a; MySQL 测试工具&#xff1a; Postman 打开IDE…

【无线网络技术】——无线城域网(学习笔记)

&#x1f4d6; 前言&#xff1a;无线城域网&#xff08;WMAN&#xff09;是指在地域上覆盖城市及其郊区范围的分布节点之间传输信息的本地分配无线网络。能实现语音、数据、图像、多媒体、IP等多业务的接入服务。其覆盖范围的典型值为3~5km&#xff0c;点到点链路的覆盖可以高达…

大道至简?ETH研究团队提出简化版Transformer模型,综合效率明显提升

论文题目&#xff1a; Simplifying Transformer Blocks 论文链接&#xff1a;https://arxiv.org/abs/2311.01906 2023年&#xff0c;Transformer已经成为人工智能领域中最受欢迎的基础模型&#xff0c;如今火热的大型语言模型&#xff0c;多模态大模型均由不同类型的Transforme…

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列 1、队列&#xff1a;先进先出 队列是项的有序集合&#xff0c;其中&#xff0c;添加新项的一端称为队尾&#xff0c;移除项的另一端称为队首。一个元素在从队尾进入队列后&#xff0c;就会一直向队首移动&#xff0c;直到…

财务机器人(RPA)会影响会计人员从业吗?

财务机器人会对会计从业人员有影响。 不过是正面积极的影响。 它是财务人员工作的好助手好帮手。 具体展开聊聊财务RPA机器人是如何成为财务人员的好帮手。 财务机器人是在人工智能和自动化技术的基础上建立的、以软件机器人作为虚拟劳动力、依据预先设定的程序与现有用户系…

Axure的安装以及简单使用

目录 Axure简介 是什么 有什么用 Axure的优缺点 优点&#xff1a; 缺点&#xff1a; 安装 汉化 Axure的使用 工具栏 页面 ​编辑 添加子页面 ​编辑 Axure简介 是什么 Axure是一款著名的原型设计工具。它允许用户创建交互式线框图、流程图、原型和其他设计文档&…

ERROR: [BD 41-237] Bus Interface property FREQ_HZ does not match between

在自定义IP出现以上错误时可以通过双击模块clk属性 如果是灰色无法二次编辑时&#xff0c;在封装IP时&#xff0c;选择以下菜单

【笔记】硬件工程师入门基础课程

学习视频&#xff08;b站&#xff09;&#xff1a;硬件工程师入门基础元器件课程 基础元器件课程 p1 电阻1. 定义、特性及参数1.1 色环电阻 识别方法&#xff1a;1.2 伏安特性1.3 基本参数 2.电阻的功能2.1 分压2.2 限流2.3 浪涌保护 3. 如何选择电阻 p2 电容1. 电容的定义1.1电…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

Viewport Meta 标记:让网页适应各种设备的魔法符号

在我们用手机或平板电脑浏览网页时&#xff0c;你是否曾发现有些网页能够很好地适应屏幕&#xff0c;而有些却需要左右滑动才能完整显示内容&#xff1f;这就涉及到一个神奇的东西——Viewport Meta 标记。 最近本人在研究自适应的各自实现方法&#xff0c;比如media媒体查询、…

PR快闪模板|简约时尚快节奏开场视频PR模板剪辑素材

这是一款Premiere Pro快闪模板&#xff0c;简约时尚快节奏开场视频 pr模板剪辑素材&#xff0c;用于以独创的方式创建明亮的介绍、时尚的开场白或模特展示。 Premiere Pro CC21及以上&#xff0c;即使是初学者也可以轻松使用&#xff0c;包含视频教程。 来自PR模板网&#xff1…

Go json 差异比较 json-diff(RFC6902)

Go json 差异比较 json-diff(RFC 6902) 毕业设计中过程中为了比较矢量图的差异而依据 RFC 6902 编写的一个包&#xff0c;现已开源&#xff1a; Json-diff 使用 go get -u github.com/520MianXiangDuiXiang520/json-diff序列化与反序列化 与官方 json 包的序列化和反序列化不…

微服务学习|elasticsearch:数据聚合、自动补全、数据同步

数据聚合 聚合的分类 聚合 (aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组&#xff0c;例如一周为一组&#xff0c;或者一月为一组 度量(M…