Docker学习——Dock镜像

news/2025/2/16 0:02:21/

什么是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.ppmy.cn/news/1380168.html

相关文章

Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

目录 TP框架-开发-配置架构&路由&MVC模型 TP框架-安全-不安全写法&版本过滤绕过 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技…

Vue3全家桶 - Pinia - 【1】(安装与使用 + Store + State + Getters + Actions)

Pinia pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或跨页面共享状态&#xff1b; 一、 安装与使用 pinia 安装语法&#xff1a;yarn add pinia npm install pinia创建一个 pinia &#xff08;根存储&#xff09;并将其传递给应用程序&#xff1a; 目标文件&am…

抽样算法——【数据科学与工程算法基础】

一、前言 这是课程的第二章节——抽样算法&#xff0c;主要分为三类。 详情可参考&#xff1a; 数据科学的算法基础——学习记录跳转中心 二、正篇 1.系统抽样 课本只介绍了最简单的——等距抽样。 直线等距抽样&#xff08;Nn*k&#xff09;&#xff1a;即总体个数可以被抽…

C++面试题和笔试题(三)

目录 一、在C中&#xff0c;局部变量、静态局部变量、全局 变量、静态全局变量各自的作用域和生命周期是怎样的&#xff1f; 二、描述const 关键字在指针和引用上的使用方式及意义&#xff0c;如const int *p与int const *p有何区别&#xff0c;又如何int*const p和const int*…

怎么把多首歌曲合并一首?轻松几步教你合并音乐!

音乐合并播放&#xff0c;听起来像是一个简单的操作&#xff0c;但实际上涉及到的技术和步骤却不少。音乐的合并不仅仅是将两首或多首曲目简单地串联在一起&#xff0c;更需要考虑到音乐的节奏、旋律、和声等要素&#xff0c;以及合并后的整体效果。在数字音乐日益普及的今天&a…

嵌入式学习第二十七天!(TCP并发模型)

TCP并发模型&#xff1a; 1. TCP多线程模型&#xff1a; 缺点&#xff1a;创建线程会带来资源开销&#xff0c;能够实现的并发量比较有限。 2. IO模型&#xff1a; 1. 阻塞IO&#xff1a; 没有数据到来时&#xff0c;可以让任务挂起&#xff0c;节省CPU资源开销&#xff0c;提…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

智慧公厕的意义:高效智能的公共厕所运营、服务、协作管理

现代城市的发展离不开智慧技术的引领&#xff0c;而智慧公厕作为城市基础设施的重要组成部分&#xff0c;正在逐渐展现其巨大的意义和价值。通过采用智能管理系统&#xff0c;智慧公厕实现了更高效的管理、更贴心的服务和更协同的业务流程。本文以智慧公厕源头实力厂家广州中期…