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

Docker学习——Dock镜像

什么是Docker镜像

Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。

  • 一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件) 可以把它称为一个 Apache 镜像。
  • 镜像是创建 Docker 容器的基础。
  • 通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试先从默
认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也可以通过配置,
使用自定义的镜像仓库。

获取镜像

镜像是运行容器的前提, 官方的 Docker Hub 网站已经提供了数十万个镜像供大家开放 下载。
命令:
可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命 令的格式为 docker [image] pull NAME [ :TAG]
其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本
信息) 。 通常情况下, 描述 个镜像需要包括 名称+标签 信息。

 例如, 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:

[root@openEuler-node1 ~]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
7c457f213c76: Pull complete 
Digest: sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Status: Downloaded newer image for ubuntu:18.04

如果没有写 名称+标签“ 信息中的标签,会默认添加一个latest标签,表示这个仓库中最新的镜像

[root@openEuler-node1 ~]# docker pull ubuntu
Using default tag: latest #自动添加的一个标签,获取最新的版本
latest: Pulling from library/ubuntu
bccd10f490ab: Pull complete 
Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
Status: Downloaded newer image for ubuntu:latest
如果从非官方 的仓库 下载,则 需要在仓库 名称前指定完整的仓库地址。例如从网易蜂巢
的镜像源来下载ubun七u:18.04镜像,可以使用如下命令,此时下载的镜像名称 为pull hub.c.163.com/public/centos:6.5
[root@openEuler-node1 ~]# docker pull  hub.c.163.com/public/centos:6.5
6.5: Pulling from public/centos
96057de2d572: Pull complete 
a3ed95caeb02: Pull complete 
8a1dcc3f76c2: Pull complete 
8fe56c90e86a: Pull complete 
43fc3558431f: Pull complete 
5881bc109689: Pull complete 
Digest: sha256:92fd18cda0cbf63bb4b5ffd0c073a9d689d5b202e3b491cbc74488fff1c37d11
Status: Downloaded newer image for hub.c.163.com/public/centos:6.5
pull 子命令支持的 选项主要包括:
-a, --all--ags=true|false: 是否获取仓库中的所有镜像,默认为否

查看镜像

images命令列出镜像

使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基
本信息。

  •  REPOSITORY:来自于哪个仓库
  • TAG:镜像的标签信息
  • IMAGE ID:镜像的ID(唯一标识镜像)

 images子命令主要支持如下选项:

-a, --all rue I false: 列出所有(包括临时文件)镜像文件,默认为否;
-f, --fi让er=[] : 过滤列出的镜像, 如dangling rue 只显示没有被使用的
镜像;也可指定带有特定标注的镜像等;
使用tag命令添加镜像标签
 docker tag ubuntu:latest myubuntu:latest
这些myubuntu:latest镜像的ID跟ubunt:latest是 完全一 致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。

 使用inspect命令查看详细信息

[root@openEuler-node1 ~]# docker inspect ubuntu:18.04 
上面代码返回的是 JSON 格式的消息,如果我们只要其中 项内容时,可以使
-f 来指定,例如,获取镜像的 Arch让ect ure
[root@openEuler-node1 ~]# docker inspect -f {{".Architecture"}} ubuntu:18.04
amd64

搜索镜像

Docker 镜像的 search 子命令
-f, --filer fill er: 过滤输出内容;
--format st ring: 格式化输出内容;
--limit   int :限制输出结果个数, 默认为 25 个;
--no-trunc: 不截断输出结果。
[root@openEuler-node1 ~]# docker search busybox
NAME                                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
busybox                             Busybox base image.                             3223                [OK]                
radial/busyboxplus                  Full-chain, Internet enabled, busybox made f…   56                                      [OK]
yauritux/busybox-curl               Busybox with CURL                               25                                      
arm32v7/busybox                     Busybox base image.                             10                                      
arm64v8/busybox                     Busybox base image.                             8                                       
odise/busybox-curl                                                                  4                                       [OK]
s390x/busybox                       Busybox base image.                             3  
.....    
可以看到返回了很多包含关键字的镜像, 其中包括镜像名字、 描述、 收藏数(表示该镜像
的受欢迎程度)、 是否官方创建、 是否自动创建等。默认的输出结果将按照星级评价进行排序。

 

 删除和清理镜像

删除就rm  -f参数是强制删除,可以基于ID或者标签删除

docker rmi busybox:latest
使用Docker 段时间后, 系统中可能会遗留一些临时的镜像文件, 以及 些没有被使
用的镜像, 可以通过docker image prune命令来进行清理。
  • -a, -all: 删除所有无用镜像, 不光是临时镜像;
  • -filter filter: 只清理符合给定过滤器的镜像;
  • -f, -force: 强制删除镜像, 而不进行提示确认。

创建镜像

1基于已有容器创建

该方法主要是使用 docker [container] commit 命令

演示:

首先, 启动一个镜像, 并在其中进行修改操作。 例如, 创建一个test文件, 之后退出, 代码如下:

[root@openEuler-node1 ~]# docker run -it ubuntu:18.04 bash
root@35b863d7caf6:/# touch test
root@35b863d7caf6:/# exit

此时容器与原镜像就不一致了,可以用commit来提交一个新的镜像

[root@openEuler-node1 ~]# docker commit -m "Add a new file" -a "FYS" 35b863d7caf6 test:0.1
sha256:e2c7a68ee5c90d3ae55b095ca7dc8ee4a9ca1a54e9722d6ef4b98c68d1c5e4cf
此时查看本地镜像列表, 会发现新创建的镜像已经存在了:
[root@openEuler-node1 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 e2c7a68ee5c9        23 seconds ago      63.2MB

2基于本地模板导入

例如,下载了 ubuntu-18.04 的模板压缩包,之后使用以下命令导人即可:
[root@openEuler-node1 ~]# cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:lB.04

3基于Dockefile创建

下面给出 Dockerfile 的一个简单示例,基于 debian:stretch-slim 镜像安装 Python 3
环境,构成一个新的 python:3 镜像:
[root@openEuler-node1 ~]# vim dockerfile
FROM debian:stretch-slim
LABEL version="1.0" maintainer "docker user <docker user@github>"
RUN apt-get update && \apt-get install-y python3 && \ apt-get clean && \rm rf /var/lib/apt/lists/*
[root@openEuler-node1 ~]# docker build -t python:3 .

FROM:   基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER: 镜像维护者的姓名和邮箱地址
RUN:    容器构建时需要运行的命令,如果在容器运行时需要运行其他命令,使用run指定
EXPOSE: 容器对外暴露的端口,mysql:3306、redis:6379
WORKDIR:创建容器后,进入容器使用pwd指令落脚点的目录,没有指定就是/,如centos是/,redis是/data
ENV:    用来构建镜像的过程中设置环境变量,"ENV 键 值"。 相当于成员变量
         如:ENV MY_PATH /usr/mytest    这个环境变量可以在后续的任何RUN指令中使用;也可以在其它指令中直接使用这些环境变量,      
ADD:    将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包。 ADD = COPY+解压缩
COPY:   类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置       
VOLUME: 容器数据卷,用来数据保存和持久化工作
CMD:    指定一个容器启动时需要运行的命令。DockerFile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
         也就是人工添加或文件中指定的CMD参数会把DockerFile里面的参数覆盖,只会有最后一个生效。

.其中 使用 -f 命令可以指定dockerfile的路径。
 

存出和载入镜像

1存出镜像

可以使用 docker [image] save 命令 该命令支持 -o output string 参数 导出镜像到指定的文件中

 

[root@openEuler-node1 ~]# docker save -o ubuntu_18.04.tar ubuntu:18.04 
[root@openEuler-node1 ~]# ll
总用量 64012
-rw-------. 1 root root      974  2月 19 16:15 anaconda-ks.cfg
-rw-r--r--  1 root root      205  3月 11 16:47 dockerfile
-rw-------  1 root root 65539072  3月 11 16:54 ubuntu_18.04.tar

 2载入镜像

可以使用 docker [image] load 将导出的 tar 文件再导人到本 镜像库。-i  input string 选项,从指定文件中读入镜像内容,与存出相反
[root@openEuler-node1 ~]# docker load < ubuntu_18.04.tar 
[root@openEuler-node1 ~]# docker load -i ubuntu_18.04.tar 

 上传镜像

可以使用 docker [image] push 命令上 传镜像到仓库,默认上传到 Dock er Hub 官方仓库(需要登录)
命令格式为 docker [image] push [:TAG] I [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG:]
[root@openEuler-node1 ~]# docker push user/test:latest
第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本 地~ docker
目录下

相关文章:

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像&#xff0c;可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境&#xff0c;里面仅安装了 Apache 应用程序&#xff08;或 用户需要的其他软件&#xff09; 可以把它称为一个 Apache 镜像。镜像是创建 Do…...

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件&#xff0c;它集成了CorelDRAW Standard 2024和其他高级图形处理工具&#xff0c;为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能&#xff0c;用户可以轻松创建和编辑矢量图形&#xff0c;…...

el-form表单中,对非表单内字段增加校验的方法

1、问题说明&#xff1a; 在开发表单的时候&#xff0c;可能会遇到el-form-item中绑定的值不在表单绑定的数据对象中。 此时用prop绑定该字段名是无效的&#xff0c;需要单独对这个字段进行校验。 在el-form-item中有一个属性 error 。用于表单域验证错误信息&#xff0c;设…...

【VTKExamples::Points】第四期 ExtractEnclosedPoints

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractEnclosedPoints,并解析接口vtkExtractEnclosedPoints,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我…...

bug--xxoobject has no attribute xxx

Python 创建类的实例后却不能调用写的方法&#xff0c;检查了半天原来是缩进的问题&#xff0c;def函数不应该和class并列 只能说这个英文空格太小了&#xff0c;看不出来。。。。...

7 BUILD.gn文件怎么写,Gn + Ninja编译一个Hello world程序的例子Demo

BUILD.gn文件怎么写&#xff0c;Gn Ninja编译一个Hello world程序的例子Demo 作者将狼才鲸创建日期2024-03-11 Ninja安装流程见&#xff1a;一个能直接运行的Ninja例子&#xff0c;build.ninja文件怎么写&#xff1f;Gn安装流程见&#xff1a;Ubuntu18.04下安装Gn软件 这是一…...

北京市行政村边界shp数据/北京市乡镇边界/北京市土地利用分类数据

北京是一座有着三千多年历史的古都&#xff0c;在不同的朝代有着不同的称谓&#xff0c;大致算起来有二十多个别称。北京地势西北高、东南低。西部、北部和东北部三面环山&#xff0c;东南部是一片缓缓向渤海倾斜的平原。境内流经的主要河流有&#xff1a;永定河、潮白河、北运…...

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化&#xff08;DP数组&#xff09;: 首先&#xff0c;创建一个二维数组dp&#xff0c;用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历&#xff0c;同时考虑每个可能的IP地址部分&#xff08;每部分由1到3个字符组…...

第一次Python小练习题目

1.打印某学校的校训&#xff0c;具体内容如下所示&#xff1a; ****************************** 勤奋 严谨 求实 创新 ****************************** 注意: 第一行和最后一行各有 30 个*号。 答案&#xff1a; school_strs "勤奋 严谨 求实 创新&q…...

[BUG] docker运行Java程序时配置代理-Dhttp.proxyHost后启动报错

[BUG] docker运行Java程序时配置代理-Dhttp.proxyHost后启动报错 bug现象描述 版本&#xff1a;2.0.4&#xff08;客户端和服务端都是&#xff09; 环境&#xff1a;私有云环境&#xff0c;只有少量跳板机器可以访问公网&#xff0c;其他机器均通过配置代理方式访问公网 bug现…...

Python网站的搭建和html基础

1.Python网站代码及讲解 一般我们搭建小型的网站就用flask库就行了。 &#xff08;1&#xff09;安装flask库 安装完python后&#xff0c;按住windows徽标键和r,弹出“运行”&#xff0c;在里面输入cmd。 回车打开&#xff0c;输入“pip install flask”。 &#xff08;2&am…...

SpringCloud(21)之SpringCloud Alibaba Nacos实战应用

一、Nacos安装 1.1 Nacos概述 Nacos是Alibaba微服务生态组件中的重要组件之一&#xff0c;主要用它实现应用的动态服务发现、配置管理、 服务管理。Nacos discovery alibaba/spring-cloud-alibaba Wiki GitHub Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简…...

Python 基础语法:基本数据类型(元组)

1 元组&#xff08;Tuples&#xff09;概述 1.1 元组的定义与特点 元组&#xff08;Tuples&#xff09;是Python中的一个内置数据类型&#xff0c;用于存储一系列有序的元素。元组中的元素可以是任何类型&#xff0c;包括数字、字符串、列表等&#xff0c;且元素之间用逗号…...

vuepress-theme-vdoing博客搭建教程

搭建流程 前言 这是笔者搭建个人博客所经历的流程&#xff0c;特附上笔记 笔者个人博客地址&#xff1a;沉梦听雨的编程指南 一、主题介绍 本博客使用的主题为&#xff1a;vuepress-theme-vdoing&#xff0c;相关介绍和使用方法可以参考该主题的官方文档 官方文档快速上手…...

ICC2:create terminal参考脚本

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 set list "" set i 0 ; set length xx set width xx foreach port $list { if {$i &#xff1d;&#xff1d; 0} { set startx 0 set starty 0 } else { set sta…...

并行计算CUDA DEMO

//并行计算CUDA DEMO #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <stdio.h> cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size); __global__ void addKernel(int *c, const int …...

【linux线程(一)】什么是线程?怎样操作线程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 什么是线…...

python-0002-linux安装pycharm

下载软件包 下载地址&#xff1a;https://download.csdn.net/download/qq_41833259/88944791 安装 # 解压 tar -zxvf 你的软件包 # 进入软件解压后的路径&#xff0c;如解压到了/home/soft/pycharm cd /home/soft/pycharm cd bin # 执行启动命令 sh pycharm.sh # 等待软件启…...

扭蛋机小程序,扭蛋与互联网结合下的商机

扭蛋机作为一种娱乐消费模式&#xff0c;受众群体不再局限于儿童&#xff0c;也吸引了众多的年轻消费者。扭蛋机具有较大的随机性&#xff0c;玩具商品随机掉落&#xff0c;在购买前消费者完全不知道扭蛋中的商品是什么&#xff0c;这种未知性带来的惊喜感是吸引众多消费者的主…...

pytorch CV入门3-预训练模型与迁移学习

专栏链接&#xff1a;https://blog.csdn.net/qq_33345365/category_12578430.html 初次编辑&#xff1a;2024/3/7&#xff1b;最后编辑&#xff1a;2024/3/8 参考网站-微软教程&#xff1a;https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorc…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...