当前位置: 首页 > news >正文

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

目录

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

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

制作容器镜像

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

使用Dockerfile制作镜像

准备所需文件

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

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

然后看下Dockerfile文件内容:

FROM debianCOPY bin /demo/bin
WORKDIR /demo/bin
RUN chmod 777 ./main
RUN mkdir /demo/dataCMD ./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不会保存镜像历史,因为是从容器导出为的容器镜像。

相关文章:

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

目录 制作容器镜像使用Dockerfile制作镜像准备所需文件构建镜像怎么不使用基础镜像来构建容器镜像 使用容器镜像传递容器镜像 这篇文章讨论一下怎么使用docker制作容器镜像,容器镜像的使用,以及怎么传递容器镜像。 制作容器镜像 docker制作容器镜像推荐…...

一种由于吸入硅酸盐粉尘而引起的肺部疾病:pneumonoultramicroscopicsilicovolcanoconiosis

有人说,pneumonoultramicroscopicsilicovolcanoconiosis是英语中最长的单词,这是一个医学词汇,意思是指:一种由于吸入硅酸盐粉尘而引起的肺部疾病。 pneumonoultramicroscopicsilicovolcanoconiosis [ˈnju:mənəuˌʌltrəˌmai…...

百度AI人脸检测与对比

1.注册账号 打开网站 https://ai.baidu.com/ &#xff0c;注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置&#xff1a; <!--百度AI--> <dependency> <groupId>com.baidu.…...

贴代码框架PasteForm特性介绍之outer,outers,object,objects,outerdisplay

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…...

sql数据库-权限控制-DCL

目录 常用权限类别 查询用户权限 举例 授予用户权限 删除权限 常用权限类别 权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表 查询用户权限 show grants for 用户名…...

【计组笔记】目录

【计组笔记】机器数表示及运算https://blog.csdn.net/Resurgence03/article/details/142673325?sharetypeblog&shareId142673325&sharereferAPP&sharesourceresurgence03&sharefromlink 【计组笔记】指令系统https://blog.csdn.net/Resurgence03/article/det…...

深度学习中的Pixel Shuffle和Pixel Unshuffle:图像超分辨率的秘密武器

在深度学习的计算机视觉任务中&#xff0c;提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作&#xff0c;能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理&#xff0c;…...

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#x…...

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样&#xff0c;github.com/go-sql-driver/mysql也为go提供了基础接口&#xff0c;在开发中往往需要写更多的代码来满足自己的定制需求&#xff0c;java在驱动基础上有了扩展&#xff0c;orm框架诞生&#xff0c;mybatis、jpa等都是好用的扩展…...

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符&#xff08;标记&#xff09; 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …...

运维面试题.云计算面试题之三ELK

1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...

C# DataTable使用Linq查询详解

前奏- C# 对DataTable进行查询 C# 可以对 DataTable 进行查询。在 .NET 框架中&#xff0c;DataTable 类提供了几种方法来查询数据&#xff0c;包括 Select 方法和 AsEnumerable 扩展方法&#xff08;在 System.Data.DataSetExtensions 命名空间中&#xff09;。 使用 Select…...

【企业级分布式系统】ELK优化

文章目录 Elasticsearch作为日志存储时的优化优化ES索引设置优化线程池配置锁定内存&#xff0c;不让JVM使用Swap减少分片数、副本数 Elasticsearch作为日志存储时的优化 linux内核优化、JVM优化、ES配置优化、架构优化&#xff08;filebeat/fluentd代替logstash、加入kafka做…...

51单片机基础05 定时器

目录 一、为什么要定时器 二、定时器中断 1、定时器中断参数 2、定时器中断程序 3、定时器计数 一、为什么要定时器 前文提到&#xff0c;比如进行流水灯等操作&#xff0c;都是直接写了delay_ms这类操作。 但是在51单片机中&#xff0c;其一般就是靠双for进行的循环时延&…...

tdengine学习笔记实战-jdbc连接tdengine数据库

先上代码&#xff0c;里面有两种获取连接的方式&#xff0c;一个单例&#xff0c;一个连接池 package com.tdengine.utils;import com.alibaba.druid.pool.DruidDataSource;import java.sql.*; import java.util.Properties;public class TDConnectUtils {// 单例对象private …...

vue3项目执行npm install下载依赖报错问题排查方法

1、检查当前node与npm的版本 nodejs 和 npm 的版本是有适配的&#xff0c;具体可以看官网&#xff1a;nodejs 和 npm 的版本是有适配的 若是版本不兼容&#xff0c;修改node或者npm的版本即可&#xff0c;建议使用nvm版本管理工具&#xff0c;切换方便&#xff1b; 2、清除缓…...

【vue】项目迭代部署后 自动清除浏览器缓存

前言&#xff1a; vue项目打包部署上线后&#xff0c;因浏览器缓存问题&#xff0c;导致用户访问的依旧是上个迭代批次的旧资源&#xff0c;需要用户手动清除缓存才能更新至最新版本&#xff0c;影响用户体验。 解决方法&#xff1a; html根文件添加以下标签 <meta http-eq…...

Leetcode(滑动窗口习题思路总结,持续更新。。。)

讲解题目&#xff1a;长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target &#xff0c;找出该数组中满足其和 ≥ target 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。示例: 输入: target 7, nums [2,3,1,2,4,3] 输出: 2 解…...

【UNIAPP】uniapp版图片压缩工具

二次封装的uniapp版本图片压缩、上传工具&#xff0c;支持全端&#xff08;H5、小程序、APP&#xff09; 新建文件&#xff1a;file-util.js class FileUtil {/*** [文件上传]* param {[object]} fileObj [图片地址]* param {[object]} formData [参数]* param {[str…...

PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)

AI时代到来&#xff0c;各行各业都在追求细分领域垂直类深度学习模型&#xff0c;今天给大家介绍一个PaddlePaddle旗下&#xff0c;基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/relea…...

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…...

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…...

第三十七章 如何清理docker 日志

如何清理docker 日志 目标 掌握docker 日志设置掌握docker日志的清理办法背景 在现代软件开发和部署环境中,Docker 容器技术因其轻量级、可移植性和高效资源利用的特点,已成为许多企业和开发团队的首选。Docker 容器在运行过程中会产生大量的日志信息,这些日志对于监控容器…...

二刷代码随想录第七天

454. 四数相加 II 先用map记录前两个数的和num1 num2的值出现了多少次再在后两个数组里找0 - (num1 num2),找到后就累加map中的次数 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3…...

1.tree of thought (使用LangChain解决4x4数独问题)

本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标&#xff1a; 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...

网络基础(4)IP协议

经过之前的学习对传输协议的学习&#xff0c;对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构&#xff0c;现在已经学习到了应用层和传输层: 在之前的学习中&#xff0c;通信的双方都只考虑了双方的传输层的东西&#xff0…...

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…...

echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子

问&#xff1a; 用echarts实现&#xff1a;默认显示两柱子折线&#xff0c;点击“税率”按钮&#xff0c;显示税率柱子&#xff0c;之前的两柱子折线消失 回答&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...

视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做

在数字时代&#xff0c;视频与音频的分离与重组已成为日常需求之一。无论是出于制作背景音乐、保存讲座内容&#xff0c;还是编辑播客素材&#xff0c;提取视频中的音频并将其保存为单独文件都显得尤为重要。视频里的音频怎么提取出来成单独文件&#xff1f;本文将详细介绍几种…...

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏&#xff1f; Excel宏是一种自动化工具&#xff0c;它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样&#xff0c;用户可以在需要时执行这些操作&#xff0c;以自动化Excel任务。 2、宏的优点 我们可以利用宏来…...

营销型门户网站/什么是搜索引擎优化的核心

大致介绍Angular2中数据绑定的方式默认是以单向方式&#xff0c;数据绑定的方式可以分为&#xff1a;1、属性绑定和插值表达式 组件类-> 模板2、事件绑定&#xff1a;模板 -> 组件类3、双向绑定&#xff1a; 模板 组件类事件绑定事件绑定是把模板中的事件绑定到组件类中的…...

免费做网站怎么做网站/宁波网站优化公司价格

首先打开idea 搜索&#xff1a;RunDashboard 添加配置&#xff1a; <option name"configurationTypes"><set><option value"SpringBootApplicationConfigurationType" /></set></option>...

河南省建设网站/百度投诉中心24人工客服

一会修改转载于:https://www.cnblogs.com/yedaodao/archive/2013/02/20/2919272.html...

wap网站的好处/网站设计师

目录 从登录接口获取到token,保存在sessionstory中 请求拦截器&#xff0c;保存到config 封装其他请求 请求拦截器的作用 请求等待中的页面效果 拦截器引入&#xff0c;变为插件的形式 使用插件 从登录接口获取到token,保存在sessionstory中 请求拦截器中 如果存在token&…...

网站logo优化/小程序推广50个方法

JLabel的使用&#xff1a; 类层次结构图&#xff1a; java.lang.Object--java.awt.Component--java.awt.Container--javax.swing.JComponent--javax.swing.JLabel 在以前的许多范例&#xff0c;我们已经使用过JLabel这个组件&#xff0c;相信大家对此组件应该不会感到陌生…...

教育培训网站建设ppt/网络公司的推广

1、两路由器之间单线连接&#xff0c;转发接口与下一跳网关都可使用。2、如果目标网络不为一&#xff0c;只能使用下一跳网关。3、两个路由器之间是广域网连接的&#xff0c;最好使用转发接口。转载于:https://blog.51cto.com/962214122/1626643...