Dockerfile及新型容器镜像构建技术

news2024/12/26 11:20:17

文章目录

  • 一、容器镜像分类
    • 1、操作系统类
    • 2、应用类
  • 二、容器镜像获取方法
    • 1、在dockerhub直接下载
    • 2、把操作系统中文件系统打包为容器镜像
    • 3、把正在运行的容器打包为容器镜像,即docker commit
    • 4、通过dockerfile实现容器镜像的自定义以及生成
  • 三、dockerfile
    • 1、dockerfile介绍
    • 2、dockerfile指令
      • 构建类指令
      • 设置类指令
    • 3、dockerfile基本组成
    • 4、dockerfile生成容器镜像过程
    • 5、dockerfile生成容器镜像案例
      • dockerfile生成容器镜像步骤
    • 6、使用Dockerfile生成Nginx容器镜像
    • 7、Dockerfile生成容器镜像优化的方法
      • a、减少镜像分层
      • b、清理无用数据

一、容器镜像分类

1、操作系统类

centos
ubuntu
自行制作

2、应用类

tomcat
nginx
mysql
redis

二、容器镜像获取方法

1、在dockerhub直接下载

docker pull centos:latest

2、把操作系统中文件系统打包为容器镜像

3、把正在运行的容器打包为容器镜像,即docker commit

[root@mylinux1 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                   CREATED        STATUS         PORTS                                                                                                                             NAMES

ca081c0529d1   mysql:5.5          "docker-entrypoint.s…"   28 hours ago   Up 2 minutes   0.0.0.0:8888->3306/tcp, :::8888->3306/tcp                                                                                         my_mysql

[root@mylinux1 ~]# docker commit ca081c0529d1 mysql:v1.0
[root@mylinux1 ~]# docker images
REPOSITORY                TAG               IMAGE ID       CREATED          SIZE
mysql                     v1.0              d404d78aa797   3 years ago      205MB
[root@mylinux1 ~]# docker run --name new_mysql -d mysql:v1.0
2fd23f7e01889fbdc74e02305c910a8d8d2ddb48f00241b83469c671d82e586f
[root@mylinux1 ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS         PORTS                                                                                                                             NAMES
2fd23f7e0188   mysql:v1.0               "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   3306/tcp                                                                                                                          new_mysql

ca081c0529d1   mysql:5.5                "docker-entrypoint.s…"   28 hours ago    Up 4 minutes   0.0.0.0:8888->3306/tcp, :::8888->3306/tcp                                                                                         my_mysql

4、通过dockerfile实现容器镜像的自定义以及生成

三、dockerfile

1、dockerfile介绍

Dockerfile是一种能够被Docker程序解释的剧本。Dockerfile由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器镜像中指定自己额外的需求时,只需在Dockerfile上添加或修改指令,然后通过docker build生成我们自定义的容器镜像(image)。

在这里插入图片描述

2、dockerfile指令

构建类指令

用于构建image
其指定的操作不会在运行image的容器上执行(FROM、MAINTAINER、RUN、ENV、ADD、COPY)

设置类指令

用于设置image属性
其指定的操作将在运行image的容器中执行(CMD、ENTRYPOINT、USER、EXPORT、VOLUME、WORKDIR、ONBUILD)

在这里插入图片描述
FROM指令用于指定其构建新镜像所使用的基础镜像
FROM指令必须是Dockerfile文佳中的首条命令
FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库的
格式:FROM <image>:<tag>
例如:FROM centos:latest

RUN指令用于构建镜像中执行命令,有以下两种格式

在这里插入图片描述

注意:按优化的角度来讲:当有多条要执行的命令,不要使用多条RUN,尽量使用&&符号与\符号连接成一行。因为多条RUN命令会让镜像建立多层
(总之就是会变得臃肿了)。
在这里插入图片描述

CMD:不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令
在这里插入图片描述
每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。

EXPORT:用于指定容器在运行时监听的端口
在这里插入图片描述

ENV:用于指定一个环境变量
在这里插入图片描述
ADD:用于把宿主机上的文件拷贝到镜像中

在这里插入图片描述

COPY:与ADD指令类似,但是COPY的源文件只能时本地文件
在这里插入图片描述
ENTRYPOINT:与CMD非常类似
在这里插入图片描述

VOLUME:用于把宿主机里的目录与容器里的目录映射
只指定挂载点,docker宿主机映射的目录为自动生成的

在这里插入图片描述
在这里插入图片描述

3、dockerfile基本组成

基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令

4、dockerfile生成容器镜像过程

在这里插入图片描述

5、dockerfile生成容器镜像案例

dockerfile生成容器镜像步骤

第一步:创建一个文件夹(目录)
第二步:在文件夹(目录)中创建Dockerfile(固定)文件并编写,以及其他文件
第三步:使用docker build命令构建镜像
第四步:使用构建的镜像启动容器

6、使用Dockerfile生成Nginx容器镜像

[root@mylinux1 dockerfile_nginx]# ls
Dockerfile  index.html
[root@mylinux1 dockerfile_nginx]# cat index.html 
nginx is running
[root@mylinux1 dockerfile_nginx]# vim Dockerfile 
FROM centos:centos7

MAINTAINER "1181068365@qq.com"

RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html/

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD /usr/sbin/nginx

生成镜像

[root@mylinux1 dockerfile_nginx]# docker build -t centos7-nginx:v1.0 .
[+] Building 69.6s (11/11) FINISHED                                                              
 => [internal] load build definition from Dockerfile                                        0.0s
 => => transferring dockerfile: 405B                                                        0.0s
 => [internal] load .dockerignore                                                           0.0s
 => => transferring context: 2B                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:centos7                          25.6s
 => CACHED [1/6] FROM docker.io/library/centos:centos7@sha256:be65f488b7764ad3638f236b7b51  0.0s
 => [internal] load build context                                                           0.0s
 => => transferring context: 114B                                                           0.0s
 => [2/6] RUN yum -y install wget                                                          15.9s
 => [3/6] RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.rep  1.5s
 => [4/6] RUN yum -y install nginx                                                         24.3s 
 => [5/6] ADD index.html /usr/share/nginx/html/                                             0.1s 
 => [6/6] RUN echo "daemon off;" >> /etc/nginx/nginx.conf                                   1.2s 
 => exporting to image                                                                      0.8s 
 => => exporting layers                                                                     0.8s 
 => => writing image sha256:337b3bac42dda5f878cb671f3306f7753a0693bbddb74388663c943d51ca20  0.0s 
 => => naming to docker.io/library/centos7-nginx:v1.0                                       0.0s 

[root@mylinux1 dockerfile_nginx]# docker images | grep "centos7-nginx"
centos7-nginx             v1.0                             337b3bac42dd   11 minutes ago   657MB

运行容器

[root@mylinux1 dockerfile_nginx]# docker run -d centos7-nginx:v1.0
62b15bc281b433f213f019d7ae9f1ef0ceb2f2d6ee98972d58029f28c548b0ab

查看运行的容器

[root@mylinux1 dockerfile_nginx]# docker ps
CONTAINER ID   IMAGE                                                 COMMAND                   CREATED          STATUS          PORTS                                                                                                                             NAMES
62b15bc281b4   centos7-nginx:v1.0                                    "/bin/sh -c /usr/sbi…"   10 minutes ago   Up 10 minutes   80/tcp                                                                                                                            distracted_knuth
[root@mylinux1 dockerfile_nginx]# docker inspect "62b" | address
-bash: address: 未找到命令
[root@mylinux1 dockerfile_nginx]# docker inspect "62b" | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.5",
                    "IPAddress": "172.17.0.5",
[root@mylinux1 dockerfile_nginx]# curl http://172.17.0.5
nginx is running

7、Dockerfile生成容器镜像优化的方法

a、减少镜像分层

Dockerfile中包含多种指令,如果涉及到部署最多使用的算是RUN命令了,使用RUN命令时,不建议每次安装都使用一条单独的RUN命令,可
以把能够合并安装指令合并为一条,这样就可以减少镜像分层。

在这里插入图片描述
优化内容如下
在这里插入图片描述

b、清理无用数据

一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减小
镜像大小。
把生成容器镜像过程中部署的应用软件包做删除处理

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

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

相关文章

数据库管理系统PostgreSQL部署安装完整教程

PostgreSQL是一个开源的关系型数据库管理系统&#xff0c;它支持大量的数据类型和复杂的查询语言&#xff0c;可以用于各种应用程序。它是一个高性能的数据库&#xff0c;可以处理大量的数据&#xff0c;并且具有良好的可扩展性和可靠性。 目录 一.Linux系统安装PostgresSQL&a…

机器学习——线性模型之Softmax回归

问&#xff1a;Softmax回归模型是一种典型处理多分类任务的非线性分类模型 答&#xff1a;错误。Softmax回归是线性分类模型。实际上是逻辑回归的拓展&#xff0c;它将逻辑回归的二分类推广到了多分类&#xff0c;用逻辑回归的方法解决多分类问题。 线性模型——Softmax回归 …

Linux之基础IO

文章目录一.关于文件的共识二.复习C语言的文件操作1.打开文件2.向文件中写入数据3.向文件中追加数据三.有关文件的系统调用1.open&#xff08;文件打开&#xff09;2.write&#xff08;向文件写入&#xff09;3.read(读文件)四.文件描述符1.进程如何找到自己的文件2.为什么文件…

leetcode刷题(3)

各位朋友们大家好&#xff0c;今天是我leedcode刷题系列的第三篇&#xff0c;废话不多说&#xff0c;直接进入主题。 文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表 leetcod…

KDSL-82轻型升流器

一、产品概述 KDSL-82 1000A大电流发生器是一种作为检验用的电流源&#xff0c;大电流试验器采用ARM芯片控制输出工艺和大容量的环形变压器&#xff0c;并且配有液晶屏显示的表计&#xff0c;同时显示一、二次电流、变比和秒表接点(或电位)的动作时间。外配铝合金机箱&#xff…

OceanMind海睿思受邀参加中小企业数字化转型发展论坛

近日&#xff0c;由江苏省企业信息化协会主办的中小企业数字化转型发展论坛于南京圆满结束。论坛重点邀请了南京市中小企业制造标杆、专精特新“小巨人”企业等相关信息化负责人和IT工作者共同探讨中小企业数字化转型的发展路径。 OceanMind海睿思作为南京地区大数据领域优秀代…

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲&#xff0c;总结了一些自然语言模型相关的重要技术&#xff0c;以及各个主流公司的研究方向和进展&#xff0c;和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

FPGA基于XDMA实现PCIE X4的HDMI视频采集 提供工程源码和QT上位机程序和技术支持

目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PCI …

自动化测试用什么框架?Pytest框架 vs Unittest框架,企业使用分析......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 安装方式不同 unit…

JavaWeb开发 —— 分层解耦

目录 一、三层架构 二、分层解耦 三、IOC & DI 入门 四、IOC控制反转详解 五、DI依赖注入详解 一、三层架构 在 JavaWeb开发 —— 请求响应 最后案例中我们编写的程序代码都是写在 Controller 当中。 而在我们实际软件设计和开发中&#xff0c;会尽量让每一个接口、类…

c++学习之类与对象2

目录 1.explicit关键字 类的对象数组 动态对象的创建与初始化 1.动态创建的概述 2.c语言方式创建动态对象 c对象的动态申请 1.new创建动态对象 2.delete释放动态对象 动态对象数组 静态成员 静态成员变量 静态成员函数 1.explicit关键字 explicit关键字 修饰构造函数…

查询淘宝商品详情页面数据(商品详情数据,商品销量数据,商品sku数据,商品视频数据,商品优惠券数据)接口代码封装教程

业务场景&#xff1a;作为全球最大的 B2C 电子商务平台之一&#xff0c;淘宝天猫平台提供了丰富的商品资源&#xff0c;吸引了大量的全球买家和卖家。为了方便开发者接入淘宝天猫平台&#xff0c;淘宝天猫平台提供了丰富的 API 接口&#xff0c;其中历史价格接口是非常重要的一…

策略设计模式(Strategy Pattern)[论点:概念、组成角色、相关图示、示例代码、适用场景]

文章目录概念组成角色相关图示示例代码适用场景概念 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以相互替换。策略模式使得算法可以独立于使用它的客户端变化…

4.12~4.13学习总结

File 相对路径和绝对路径的区别&#xff1a; 相对路径不带盘符&#xff0c;绝对路径带盘符 小知识点&#xff1a;1KB1024字节&#xff0c;1MB1024KB,1GB1024MB; File对象就表示一个路径&#xff0c;可也是文件的路径&#xff0c;也可以是文件夹的路径 这个路径可以是存在的也可…

API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL丢失怎么解决?

API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL是Windows系统中的一个非常重要的动态链接库文件&#xff0c;该文件的全称为“Application Programming Interface Microsoft Windows C Runtime Link Library”。这个DLL文件中包含多个函数库&#xff0c;可将这些函数库链接到应用程序中。在…

AC7811-FOC无感控制代码详解

目录 矢量控制原理 矢量控制框图 电流采样方式 电流在整个控制过程中的传递 采样关键点 三电阻 双电阻 单电阻 三者对比 坐标变换 dq轴电流的PI控制 启动方式 启动波形 脉冲注入 高频注入 Startup 预定位到指定角度 PulseInject_api hfi_api Speed loop s…

已解决:ModuleNotFoundError: No module named ‘flask._compat‘

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域新星创作者。😜🎉 支持我:点赞👍+收藏⭐️+留言📝📣 系列专栏:flask框架从入门到实战🍁💬格言:要成为光,因为有怕黑的人!🔥 相信很多人在flask项目中都遇到了这个报错:ModuleNotFoundError: No …

MyBatis动态SQL的使用

为什么需要使用动态sql? 在实际项目的开发中&#xff0c;开发人员在使用JDBC或其他持久层框架进行开发时&#xff0c;经常需要根据不同的条件拼接SQL语句&#xff0c;拼接SQL语句时还要确保不能遗漏必要的空格、标点符号等&#xff0c;这种编程方式给开发人员带来了非常大的不…

初探JdbcTemplate操作

文章目录一、创建数据库二、创建用户三、打开Spring项目四、添加数据库相关依赖五、创建用户实体类六、创建用户数据访问接口七、创建用户数据访问接口实现类八、创建用户服务类九、创建数据库配置属性文件十、创建Spring配置文件十一、创建用户服务测试类1、测试按编号查询用户…

Java 管道 (学习代码)

目录 上代码&#xff1a; 输出&#xff1a; 执行流程可以总结如下&#xff1a; 上代码&#xff1a; package cn.net.cdsz.ccb.test;import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter;public class test {static class ReaderThread imp…