Docker学习——Dock镜像

2024-03-12 03:44
文章标签 镜像 学习 docker dock

本文主要是介绍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镜像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800044

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个