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/ ,注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置: <!--百度AI--> <dependency> <groupId>com.baidu.…...
贴代码框架PasteForm特性介绍之outer,outers,object,objects,outerdisplay
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...
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:图像超分辨率的秘密武器
在深度学习的计算机视觉任务中,提升图像分辨率和压缩特征图是重要需求。Pixel Shuffle和Pixel Unshuffle是在超分辨率、图像生成等任务中常用的操作,能够通过转换空间维度和通道维度来优化图像特征表示。本篇文章将深入介绍这两种操作的原理,…...
AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台
AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大,也被企业广泛采用,然后也存着在诸如学习曲线陡峭,上手难度大&#x…...
golang操作mysql基础驱动github.com/go-sql-driver/mysql使用
golang中类似java操作mysql的jdbc一样,github.com/go-sql-driver/mysql也为go提供了基础接口,在开发中往往需要写更多的代码来满足自己的定制需求,java在驱动基础上有了扩展,orm框架诞生,mybatis、jpa等都是好用的扩展…...
正则表达式完全指南,总结全面通俗易懂
目录 元字符 连接符 限定符 定位符 修饰符(标记) 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …...
运维面试题.云计算面试题之三ELK
1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...
C# DataTable使用Linq查询详解
前奏- C# 对DataTable进行查询 C# 可以对 DataTable 进行查询。在 .NET 框架中,DataTable 类提供了几种方法来查询数据,包括 Select 方法和 AsEnumerable 扩展方法(在 System.Data.DataSetExtensions 命名空间中)。 使用 Select…...
【企业级分布式系统】ELK优化
文章目录 Elasticsearch作为日志存储时的优化优化ES索引设置优化线程池配置锁定内存,不让JVM使用Swap减少分片数、副本数 Elasticsearch作为日志存储时的优化 linux内核优化、JVM优化、ES配置优化、架构优化(filebeat/fluentd代替logstash、加入kafka做…...
51单片机基础05 定时器
目录 一、为什么要定时器 二、定时器中断 1、定时器中断参数 2、定时器中断程序 3、定时器计数 一、为什么要定时器 前文提到,比如进行流水灯等操作,都是直接写了delay_ms这类操作。 但是在51单片机中,其一般就是靠双for进行的循环时延&…...
tdengine学习笔记实战-jdbc连接tdengine数据库
先上代码,里面有两种获取连接的方式,一个单例,一个连接池 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 的版本是有适配的,具体可以看官网:nodejs 和 npm 的版本是有适配的 若是版本不兼容,修改node或者npm的版本即可,建议使用nvm版本管理工具,切换方便; 2、清除缓…...
【vue】项目迭代部署后 自动清除浏览器缓存
前言: vue项目打包部署上线后,因浏览器缓存问题,导致用户访问的依旧是上个迭代批次的旧资源,需要用户手动清除缓存才能更新至最新版本,影响用户体验。 解决方法: html根文件添加以下标签 <meta http-eq…...
Leetcode(滑动窗口习题思路总结,持续更新。。。)
讲解题目:长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target ,找出该数组中满足其和 ≥ target 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例: 输入: target 7, nums [2,3,1,2,4,3] 输出: 2 解…...
【UNIAPP】uniapp版图片压缩工具
二次封装的uniapp版本图片压缩、上传工具,支持全端(H5、小程序、APP) 新建文件:file-util.js class FileUtil {/*** [文件上传]* param {[object]} fileObj [图片地址]* param {[object]} formData [参数]* param {[str…...
PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)
AI时代到来,各行各业都在追求细分领域垂直类深度学习模型,今天给大家介绍一个PaddlePaddle旗下,基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址:https://github.com/PaddlePaddle/PaddleX/blob/relea…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
