Docker学习——Dock镜像

news2024/11/16 4:24:14

什么是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
目录下

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

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

相关文章

Windows环境部署Hadoop-3.3.2和Spark3.3.2

目录 一、Windows环境部署Hadoop-3.3.2 1.CMD管理员解压Hadoop压缩包 2.配置系统环境变量 3.下载hadoop winutils文件 4.修改D:\server\hadoop-3.3.2\etc\hadoop目录下的配置文件 (1)core-site.xml (2)hdfs-site.xml (3)mapred-site.xml (4)yarn-site.xml (5)workers…

Extended Feature Pyramid Network for SmallObject Detection

摘要 各种尺度的特征耦合会削弱小对象的性能&#xff0c;本文中&#xff0c;我们提出了具有超高分辨率金字塔的扩展特征金字塔网络&#xff08;EFPN &#xff09;&#xff0c;专门用于小目标检测。具体来说&#xff0c;我们设计了一个新模块&#xff0c;称为特征纹理转移&#…

智能测径仪的精度主要依赖什么

关键字&#xff1a;智能测径仪镜头洁净度&#xff0c;智能测径仪系统自检&#xff0c;测径仪智能降温&#xff0c;智能测径仪远程升级&#xff0c;智能测径仪算法改进&#xff0c; 智能测径仪的精度保证主要依赖于以下几个方面&#xff1a; 智能监测镜头的洁净度&#xff1a;智…

二,几何相交---4,BO算法---(2)比较和排序

在某一时刻xt&#xff0c;扫描线从左到右时&#xff0c;一部分线段会与扫描线相交&#xff0c;此时此刻&#xff0c;线段可以分成高低顺序&#xff0c; 那么对于给定两条线段&#xff0c;是如何变化的呢&#xff1f;有两个端点&#xff0c;左端点和右端点&#xff0c; 三种情况…

dubbo 总结

1.dubbon 基本使用 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">&l…

计算机网络-第5章 运输层(2)

5.6 TCP可靠传输实现 以字节为单位的滑动窗口。 发送窗口已满&#xff0c;停止发送。 发送和接收的数据都来自缓存。 超时重传时间RTO选择&#xff1a;自适应算法&#xff0c; 选择确认SACK&#xff1a;只传送缺少的数据。大多数实现还是重传所有未被确认的数据块。 5.7 TCP的…

sheng的学习笔记- AI-类别不平衡问题

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 什么是类别不平衡问题 类别不平衡&#xff08;class-imbalance&#xff09;&#xff0c;也叫数据倾斜&#xff0c;数据不平衡&#xff0c;就是指分类任务中不同类别的训练样例数目差别很大的情况。 例如有998个反例&#xf…

C 嵌入式系统设计模式 24:安全性和可靠性介绍

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式安全性和可靠性模式之一…

ERP实施顾问面试题目

02什么是BOM和ECN&#xff1f;它们的完整英文拼写是什么&#xff1f;什么是替代料&#xff1f;&#xff08;10分&#xff09; BOM物料清单是英文Bill of Material的简写&#xff1b;ECN工程变更通知单是英文Engineering Change Notice的简写&#xff1b;替代料&#xff1a;由于…

vscode中解决驱动编写的时候static int __init chrdev_init()报错的问题

目录 错误出错原因解决方法 错误 在入口函数上&#xff0c;出现 expected a ; 这样的提示 出错原因 缺少了 __KERNEL __ 宏定义 解决方法 补上__KERNEL__宏定义 具体做法&#xff1a;在vscode中按下ctrlshiftp &#xff0c;输入&#xff1a;C/C:Edit Configurations&#xff0…

JMM(Java Memory Model)内存模型

Java内存模型&#xff0c;规范了计算机内存与java虚拟机之间的协调工作&#xff0c;即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程对变量的…

Exception异常处理

1. 两种异常处理机制 1.1 使用 throw 关键字手动抛出异常 使用throw关键字抛出异常&#xff0c;代码会的显得简单明了 如下图所示 1.2 使用 try-catch 捕获异常 使用try-catch进行捕获异常&#xff0c;往往会使代码变得更加笼统&#xff0c;层层包裹 如下图所示 2. 自定义…

大数据 - Spark系列《十三》- spark集群部署模式

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

【pycharm使用ssh连接服务器】

2、pycharm使用ssh连接服务器 1、具体流程2、一些需要注意的小问题2.1 更改代码地址2.2 本地代码上传到服务器2.3 在服务器的环境中上新安装库&#xff0c;但是pycharm检测不到 1、具体流程 打开pycharm – File – Setting 输入服务器的IP地址&#xff0c;端口号、登录账号名…

qt如何配置ros环境

在Qt5.7的版本可以使用bash -i -c来启动qt&#xff0c;让Qt自己识别系统环境&#xff0c;不知道为什么Qt在之后的版本&#xff0c;这样使用都失效了。因为它会默认把CMAKE_PREFIX_PATH修改掉。 网上还有安装ros插件版本的qt creator&#xff0c;感觉失去了一些灵活性。 自己测试…

连接端口和连接端口转换OrCAD补丁

来介绍此功能之前先复习一下一些OrCAD的基础知识。 说到连通两个器件&#xff0c;有什么办法呢&#xff1f;最直接的就是用线连通。比如下面这两个器件需要连通&#xff0c;我们可以直接用线Place wire连接。 但是如果这两个器件由于某些原因&#xff0c;他们之间相隔很远&…

Milvus的相似度指标

官网&#xff1a;https://milvus.io/docs/metric.md版本: v2.3.x 在 Milvus 中&#xff0c;相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。下表展示了这些广泛使用的相似性指标如何与各种输入数据形式和 Milvus 索引相匹配。 一、浮…

大语言模型:Large Language Models Are Human-Level Prompt Engineers概述

研究内容 如何通过prompt&#xff0c;在不进行微调大语言模型的前提下&#xff0c;增加大语言模型的表现 研究动机 prompt非常有用&#xff0c;但是人工设置的非常不自然&#xff1b;因此提出了要自动使用大语言模型自己选择prompt&#xff1b;取得了很好的效果。 作者主要…

java异常概述及自定义处理

前言 学到异常了&#xff0c;本来以为处理异常只是避免bug&#xff0c;结果发现还可以为了编程需要自定义异常。打好基础&#xff0c;daydayup! 异常 什么是异常 异常就是代表程序出现的问题 异常的体系 异常体系指的是java开发人员为了方便程序员使用所开发的异常类&#xff…

一文彻底搞懂MySQL建表规范

文章目录 1. 表设计规范2. 索引规范3. SQL语句规范4. 散表规范 1. 表设计规范 库名、表名、字段名使用小写字母&#xff0c;使用“_”分割&#xff0c;不超过12个字符。使用InnoDB存储引擎。存储精确浮点数使用DECIMAL替代FLOAT和DOUBLE。使用UNSIGNED存储非负数值&#xff0c…