docker容器镜像的制作、使用以及传递

目录

  • 制作容器镜像
    • 使用Dockerfile制作镜像
      • 准备所需文件
      • 构建镜像
      • 怎么不使用基础镜像来构建容器镜像
  • 使用容器镜像
  • 传递容器镜像

这篇文章讨论一下怎么使用docker制作容器镜像,容器镜像的使用,以及怎么传递容器镜像。

制作容器镜像

docker制作容器镜像推荐的方法就是使用Dockerfile,因为Dockerfile不仅可以方便的重复使用,而且还直观的记录了制作镜像的规则和过程,也方便查问题。

使用Dockerfile制作镜像

准备所需文件

看个简单的示例,比如有这么一个目录结构:
.
├── bin
│ └── main
├── Dockerfile
└── src
│ └── main.cpp

首先main就是用main.cpp生成的可执行程序。

然后看下Dockerfile文件内容:

FROM debian

COPY bin /demo/bin
WORKDIR /demo/bin
RUN chmod 777 ./main
RUN mkdir /demo/data

CMD ./main

解释一下Dockerfile文件中指令的含义:

  • FROM debian:指定基础镜像,之后的指令都是基于这个基础镜像。
  • COPY bin /demo/bin:将上下文目录中的bin目录复制到镜像的/demo/bin目录中。
  • WORKDIR /demo/bin:指定工作目录,之后的指令的当前目录就是这个目录,容器启动时默认当前目录也是这个目录。
  • RUN chmod 777 ./main:在构建镜像时(即docker build时)执行命令。
  • RUN mkdir /demo/data:在构建镜像时(即docker build时)执行命令。
  • CMD ./main:启动容器时(即docker run时)的默认命令,可以在docker run时使用参数覆盖。

其中

RUN chmod 777 ./main
RUN mkdir /demo/data

可以改成一条指令

RUN chmod 777 ./main
 && mkdir /demo/data

要不然镜像就会多一层。

构建镜像

文件准备好了,我们在这个目录中执行命令docker build -t demo:v1.0 -f ./Dockerfile .就可以构建出包含前面编译出来的main程序的容器镜像,这个命令中的-t参数表示指定生成的镜像的名字和标签,-f参数表示指定要使用的Dockerfile,后面那个.表示上下文目录为当前目录,就是要打包的目录,Dockerfile中的一些指令比如COPY就会以这个目录为基础,注意上下文目录中尽量不要放镜像内不需要的文件,会影响效率。

构建完成之后使用docker images就可以查看到构建出来的镜像了。

怎么不使用基础镜像来构建容器镜像

前面介绍的Dockerfile中有一条FROM debian指令,是指明基础镜像,意思就是使用一个已经制作好的镜像作为基础镜像。那如果不想使用基础镜像,而是完全自定义,是不是不写这条指令就行了,不是的,因为FROM是Dockerfile的必备指令。

这里想说明一下,很多人说FROM必须是Dockerfile的第一条指令,其实不是,FROM是Dockerfile的必备指令,但FROM并不必须是第一条指令,比如第一条可以是ARG:

ARG base
FROM $base

既然必须指定基础镜像,那怎么不使用基础镜像来构建容器镜像呢,有办法的。虽然FROM指令是必须的,但是Docker中存在一个特殊的基础镜像叫scratch,这个镜像是空的,所以就可以FROM scratch,这个效果也就相当于不使用基础镜像来构建容器镜像了。

但是这样会比较难,首先容器镜像其实可以简单的理解为是一个rootfs文件系统,所以如果使用这种方法构建镜像,由于基础镜像是个空的,就需要我们自己制作一个rootfs文件系统,然后在Dockerfile中使用指令将自己制作的rootfs文件系统放进容器镜像,这种方式可以制作特别轻量级的容器镜像,但是会比较复杂,这篇文章里就不具体展开了。

使用容器镜像

容器镜像制作完成就可以使用了,那怎么使用呢,这个因为场景很多而且复杂,这篇文章不介绍那么多,这里就简单介绍一个比较常用的场景,那就是使用docker run来使用容器镜像启动一个容器,比如使用命令docker run -it --rm --name demo demo:v1.0 /bin/bash以交互的模式启动容器,然后在这个容器中执行所需操作。

传递容器镜像

容器的一大特点(也是特别受欢迎的一点)就是可以保证环境的一致性,这里就要涉及到容器镜像的传递了。

传递镜像主要使用两组命令完成。

方案一:

第一组命令是docker save和docker load,这组命令针对容器镜像,主要用在传递原始镜像的场景。

方案是使用docker save将镜像保存为归档文件,然后将归档文件传递到需要的机器上面,然后使用docker load从归档文件中导入镜像。

命令示例:
docker save -o demo.tar demo:v1.0:将镜像保存为归档文件,-o参数指定保存为的文件,这里就表示保存为当前目录下的demo.tar文件。
docker save -o demo.tar demo1:v1.0 demo2:v1.0 demo2:v2.0:将多个镜像保存为一个归档文件。
docker load -i ./demo.tar:从归档文件中导入镜像,归档文件就是使用docker save生成的文件,-i参数指定输入文件,即从哪个归档文件导入镜像。

方案二:

第二组命令是docker export和docker import,这组命令针对容器,主要用在需要传递容器执行过程中的一些状态的场景。

方案是使用docker export将容器保存为归档文件,然后将归档文件传递到需要的机器上面,然后使用docker import从归档文件中导入镜像。

命令示例:
docker export -o demo.tar CONTAINER:将容器保存为归档文件,CONTAINER可以使用容器id指定,-o参数指定保存为的文件,这里就表示保存为当前目录下的demo.tar文件。
docker import demo.tar demo:v1:使用归档文件创建镜像,归档文件是使用docker export生成的。

区别:

使用docker save和docker load保存的数据会比较完整,会包括镜像历史,使用docker export和docker import不会保存镜像历史,因为是从容器导出为的容器镜像。

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

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

相关文章

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么?和App的关系? 元服务是是一种HarmonyOS轻量应用形态,用户无需安装即可使用,具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体,独立于应用,不依赖应用可独立…

uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)

效果图 全屏加载 页面加载使用 局部加载 列表加载里面使用 使用gif html <template><view><view class"" v-if"typeFullScreen"><view class"loading" v-if"show"><view class""><i…

QQ 小程序已发布,但无法被搜索的解决方案

前言 我的 QQ 小程序在 2024 年 8 月就已经审核通过&#xff0c;上架后却一直无法被搜索到。打开后&#xff0c;再在 QQ 上下拉查看 “最近使用”&#xff0c;发现他出现一下又马上消失。 上线是按正常流程走的&#xff0c;开发、备案、审核&#xff0c;没有任何违规&#xf…

Java中日志采集框架-JUL、Slf4j、Log4j、Logstash

1. 日志采集 日志采集是指在软件系统、网络设备、服务器或其他IT基础设施中自动收集日志文件和事件信息的过程。这些日志通常包含了时间戳、事件类型、源和目标信息、错误代码、用户操作记录等关键数据。日志采集的目的是为了监控系统运行状态、分析系统性能、审计用户行为、故…

CSS遮罩:mask

CSS属性 mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。 // 一般用位图图片做遮罩 mask: url(~/assets/images/mask.png); mask-size: 100% 100%;// 使用 SVG 图形中的形状来做遮罩 mask: url(~/assets/images/mask.svg#star);…

【python笔记01】python基础笔记汇总

文章目录 python概述计算机资源Why Pythonpython解释器解释器的种类python版本python解释器 开发工具PyCharmvscodecursor 程序的三种结构 python中的变量python中的输入输出python中的标准输入python中的格式化输出❗转义字符 运算符&#xff08;基本运算符不写&#xff09;短…

Postman之安装及汉化基本使用介绍

Postman之安装及汉化 1.安装及汉化postman2.基本使用介绍2.1.基本功能&#xff1a;2.2.编辑、查看、设置环境、全局、集合变量2.3.复制代码片段2.4.运行集合中的所有请求及引用外部文件进行参数化 1.安装及汉化postman 下载安装包 首先可以到官网下载安装包&#xff0c;需要注…

Excel如何把两列数据合并成一列,4种方法

Excel如何把两列数据合并成一列,4种方法 参考链接:https://baijiahao.baidu.com/s?id=1786337572531105925&wfr=spider&for=pc 在Excel中,有时候需要把两列或者多列数据合并到一列中,下面介绍4种常见方法,并且提示一些使用注意事项,总有一种方法符合你的要求:…

Android WMS概览

WMS&#xff08;WindowManagerService&#xff09;是 Android 系统的核心服务&#xff0c;负责管理应用和系统的窗口&#xff0c;包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染&a…

Python | Leetcode Python题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y x if m % 2 0 else x // 10…

十六.SpringCloudAlibaba极简入门-整合Grpc代替OpenFeign

前言 他来了他来了&#xff0c;停了快2个月了终于又开始更新文章啦&#xff0c;这次带来的绝对是干货&#xff01;&#xff01;&#xff01;。由于公司项目进行重构的时候考虑到&#xff0c;OpenFeign做为服务通信组件在高并发情况下有一定的性能瓶颈&#xff0c;所以将其替换…

【机器学习】机器学习中用到的高等数学知识-7.信息论 (Information Theory)

熵 (Entropy)&#xff1a;用于评估信息的随机性&#xff0c;常用于决策树和聚类算法。交叉熵 (Cross-Entropy)&#xff1a;用于衡量两个概率分布之间的差异&#xff0c;在分类问题中常用。 信息论作为处理信息量和信息传输的数学理论&#xff0c;在机器学习中具有广泛的应用。…

高亮变色显示文本中的关键字

效果 第一步&#xff1a;按如下所示代码创建一个用来高亮显示文本的工具类&#xff1a; public class KeywordUtil {/*** 单个关键字高亮变色* param color 变化的色值* param text 文字* param keyword 文字中的关键字* return*/public static SpannableString highLigh…

【图像处理识别】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 CNN-ImageProc-Robotics 机器人 更新时间&#xff1a;2024-07-29 访问地址: GitHub 描述&#xff1a; 通过 CNN 和图像处理进行机器人对象识别项目侧重于集成最先进的深度学习技术和…

VTK知识学习(10)- 渲染引擎

1、前言 vtkProp; vtkAbstractMapper; vtkProperty; vtkCamera; vtkLight; vtkRenderer; vtkRenderWindow; vtkRenderWindowInteractor; vtkTransform; vtkLookupTable;………… 这些类都是与数据显示或渲染相关的。 用计算机图形学的专业词汇来说&#xff0c;就是它…

网络基础(3)https和加密

http其它的报头 直接看图片&#xff1a; 上图中的第一个和第二个类型之前已经使用过了也就不多做说明了&#xff0c;第三个报头类型使用的很少了。第四个报头类型主要就使用在一些灰度更新的应用上&#xff0c;确定用户使用的软件的版本不让其访问该版本不能访问的功能。下一个…

高阶C语言之五:(数据)文件

目录 文件名 文件类型 文件指针 文件的打开和关闭 文件打开模式 文件操作函数&#xff08;顺序&#xff09; 0、“流” 1、字符输出函数fputc 2、字符输入函数fgetc 3、字符串输出函数fputs 4、 字符串输入函数fgets 5、格式化输入函数fscanf 6、格式化输出函数fpr…

C#获取视频第一帧_腾讯云媒体处理获取视频第一帧

一、 使用步骤&#xff1a; 第一步、腾讯云开启万象 第二步、安装Tencent.QCloud.Cos.Sdk 包 第三步、修改 腾讯云配置 图片存储目录配置 第四步、执行获取图片并保存 二、封装代码 using System.Text; using System.Threading.Tasks;using COSXML.Model.CI; using COSXML.A…

分词器的概念(通俗易懂版)

什么是分词器&#xff1f;简单点说就是将字符序列转化为数字序列&#xff0c;对应模型的输入。 通常情况下&#xff0c;Tokenizer有三种粒度&#xff1a;word/char/subword word: 按照词进行分词&#xff0c;如: Today is sunday. 则根据空格或标点进行分割[today, is, sunda…

Jenkins更换主题颜色+登录页面LOGO图片

默认主题和logo图片展示 默认主题黑色和白色。 默认LOGO图片 安装插件 Login ThemeMaterial Theme 系统管理–>插件管理–>Available plugins 搜不到Login Theme是因为我提前装好了 没有外网的可以参考这篇离线安装插件 验证插件并修改主题颜色 系统管理–>A…