【Docker】镜像的创建、管理与发布

镜像的获取

镜像可以从以下方式获得:

  • 从远程镜像仓库拉取,可以是公有仓库,也可以是私有仓库
  • 从Dockerfile构建
  • 从文件导入(离线)
  • 从容器提交

1653292048113.png

镜像的基本操作

跟镜像相关的命令如下:

$ docker image --helpUsage:  docker image COMMANDManage imagesCommands:build       Build an image from a Dockerfilehistory     Show the history of an imageimport      Import the contents from a tarball to create a filesystem imageinspect     Display detailed information on one or more imagesload        Load an image from a tar archive or STDINls          List imagesprune       Remove unused imagespull        Pull an image or a repository from a registrypush        Push an image or a repository to a registryrm          Remove one or more imagessave        Save one or more images to a tar archive (streamed to STDOUT by default)tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGERun 'docker image COMMAND --help' for more information on a command.

docker image build

docker image build命令用于从Docker文件构建镜像。

一个简单的构建redis镜像的dockerfile如下:

from centosmaintainer morris131<morris131@163.com>env WORK_DIR /usr/localworkdir $WORK_DIRrun yum install -y wget gcc gcc-c++ automake autoconf libtool makerun wget https://download.redis.io/releases/redis-6.2.5.tar.gzrun tar xzf redis-6.2.5.tar.gz && cd redis-6.2.5 && makeexpose 6379env REDIS_HOME $WORK_DIR/redis-6.2.5env PATH $PATH:$REDIS_HOME/srcentrypoint ["redis-server"]

使用docker image build构建镜像:

$ docker image build -f redis.dockerfile -t redis:v6.2 .
Sending build context to Docker daemon  326.3MB
Step 1/11 : from centos---> 5d0da3dc9764
Step 2/11 : maintainer morris131<morris131@163.com>---> Using cache---> 5cda723c8e72
Step 3/11 : env WORK_DIR /usr/local---> Using cache---> c533d0edc8eb
Step 4/11 : workdir $WORK_DIR---> Using cache---> cb590797901e
Step 5/11 : run yum install -y wget gcc gcc-c++ automake autoconf libtool make---> Using cache---> 3ad6eccd91bc
Step 6/11 : run wget https://download.redis.io/releases/redis-6.2.5.tar.gz---> Using cache---> 009fdc775e47
Step 7/11 : run tar xzf redis-6.2.5.tar.gz && cd redis-6.2.5 && make---> Using cache---> 55980a8ed7d4
Step 8/11 : expose 6379---> Using cache---> a0031636b6a8
Step 9/11 : env REDIS_HOME $WORK_DIR/redis-6.2.5---> Using cache---> 9fe2c6f4f2ea
Step 10/11 : env PATH $PATH:$REDIS_HOME/src---> Using cache---> a41d5925a64f
Step 11/11 : entrypoint ["redis-server"]---> Using cache---> dfa712f480f7
Successfully built dfa712f480f7
Successfully tagged redis:v6.2

选项说明:

  • --file, -f:Dockerfile的名称(默认为’PATH/Dockerfile’)
  • --tag, -t:名称和可选的“name:tag”格式的标签
  • path:指定构建镜像时的相对目录,当前目录用.代替,例如dockerfile经常会COPY一些文件,如果这些文件指定的是相对路径,那么这个相对路径是基于path指定的目录。

docker image history

docker image history显示镜像的历史记录,应该是镜像的分层结构。

$ docker image history redis:v6.2
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
dfa712f480f7   20 months ago   /bin/sh -c #(nop)  ENTRYPOINT ["redis-server…   0B
a41d5925a64f   20 months ago   /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B
9fe2c6f4f2ea   20 months ago   /bin/sh -c #(nop)  ENV REDIS_HOME=/usr/local…   0B
a0031636b6a8   20 months ago   /bin/sh -c #(nop)  EXPOSE 6379                  0B
55980a8ed7d4   20 months ago   /bin/sh -c tar xzf redis-6.2.5.tar.gz && cd …   160MB
009fdc775e47   20 months ago   /bin/sh -c wget https://download.redis.io/re…   2.47MB
3ad6eccd91bc   20 months ago   /bin/sh -c yum install -y wget gcc gcc-c++ a…   270MB
cb590797901e   20 months ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B
c533d0edc8eb   20 months ago   /bin/sh -c #(nop)  ENV WORK_DIR=/usr/local      0B
5cda723c8e72   20 months ago   /bin/sh -c #(nop)  MAINTAINER morris131<morr…   0B
5d0da3dc9764   23 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      23 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      23 months ago   /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB

docker image import

docker image import将导出的压缩容器文件导入为镜像。与docker container export配合使用。

$ docker image import nginx.tar.gz nginx:v2.0
sha256:9b1c17b86c32c5a4fa2e811612dc2242ebb1725ff73391cd38c143d22f09ad87

docker image inspect

docker image inspect显示一个或多个镜像的详细信息。

$ docker image inspect redis:v6.2

docker image save

docker image save将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT)。

$ docker image save -o nginx-v1.0.tar nginx:v1.0

docker image load

docker image load从tar存档或STDIN加载镜像。

$ docker image load -i nginx-v1.0.tar
Loaded image: nginx:v1.0

docker image ls

docker image ls列出镜像。

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        v1.0      0b36bf0f81dd   2 days ago      141MB
nginx        latest    f652ca386ed1   21 months ago   141MB

docker image prune

docker image prune清理镜像。

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

后文会详细介绍docker image prunedocker image rm的区别。

docker image rm

docker image rm根据镜像名称或者镜像ID删除一个或多个镜像。

$ docker image rm 0b36bf0f81dd
Untagged: nginx:v1.0
Deleted: sha256:0b36bf0f81dda62c4ced29e84d0b44a7c812bb643b2c1d898df0b8897f58c964

docker image pull

docker image pull默认从官方的远程镜像仓库Docker Hub拉取镜像,如果不指定版本,会默认拉取最新版本,也可以指定远程镜像仓库的地址。

$ docker image pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

指定版本拉取:

$ docker pull nginx:1.20.0

这里使用的是阿里云的镜像服务:https://cr.console.aliyun.com/

需要先登陆阿里云的镜像仓库:

$ docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /home/morris/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

指定镜像仓库拉取:

$ docker pull registry.cn-hangzhou.aliyuncs.com/morris131/mysql:5.7.35

docker image tag

docker image tag为本地镜像打上标签。

$ docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/morris131/nginx:1.20.0

打上标签后,IMAGE ID不变,这样就无法根据IMAGE ID进行删除镜像,因为一个IMAGE ID指向了多个镜像,可以根据REPOSITORY:TAG进行删除。

docker image push

docker image push将本地镜像推送到远程的镜像仓库。

$ docker push registry.cn-hangzhou.aliyuncs.com/morris131/nginx:1.20.0

镜像下载的加速

由于docker镜像访问很慢,所以使用阿里的镜像加速器。

参考:阿里官方教材

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

$ mkdir -p /etc/docker$ vi /etc/docker/daemon.json
{"registry-mirrors": ["https://imjw08kj.mirror.aliyuncs.com"]
}$ systemctl daemon-reload$ systemctl restart docker

镜像的清理和删除

镜像的删除:删除某个镜像时,需要指定镜像的ID或者仓库+标签。

镜像的清理:主要用于资源的释放,不需要指定镜像的ID或者仓库+标签,可以清理中间的镜像层、缓存等系统存储空间。

未使用镜像

未使用镜像表示尚未在容器中分配或使用它。使用docker ps -a命令列出所有已退出以及当前正在运行的容器。在这个列表中的镜像都是“使用过的镜像”,而不在这个列表的镜像就是未使用镜像。

虚悬镜像(Dangling Image)

虚悬镜像 (Dangling Image) 指的是仓库名(镜像名)和标签TAG为<none>的镜像。

可以通过下面的命令来查看:

$ docker image ls -f dangling=true
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        <none>    7ab27dbbfbdf   2 years ago   133MB

可以使用docker image prune来清理虚悬镜像镜像。

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nginx@sha256:ea4560b87ff03479670d15df426f7d02e30cb6340dcd3004cdfc048d6a1d54b4
deleted: sha256:7ab27dbbfbdf4031f0603a4b597cc43031ff883b54f9329f0309c80952dda6f5
deleted: sha256:5b2a9404d052ae4205f6139190fd4b0921ddeff17bf2aaf4ee97f79e1a8242fe
deleted: sha256:03ebf76f0cbf5fd32ca010bb589c2139ce7e44c050fe3de2d77addf4cfd25866
deleted: sha256:0191669d087dce47072254a93fe55cbedd687f27d3798e2260f846e8f8f5729a
deleted: sha256:17651c6a0ba04d31da14ac6a86d8fb3f600883f9e155558e8aad0b94aa6540a2
deleted: sha256:5a673ff4c07a1b606f2ad1fc53697c99c45b0675734ca945e3bb2bd80f43feb8
deleted: sha256:02c055ef67f5904019f43a41ea5f099996d8e7633749b6e606c400526b2c4b33Total reclaimed space: 133.1MB

批量清除镜像

  • docker image prune:可以清除虚悬镜像。
  • docker image prune -a:可以清除虚悬镜像和未使用镜像。

关于scratch镜像

Scratch是一个空的Docker镜像。

hello.c

#include <stdio.h>
int main()
{printf("hello docker\n");
}

编译成一个二进制文件:

$ gcc --static -o hello hello.c
$ ./hello
hello docker

通过scratch来构建一个基础镜像。

hello.dockerfile

FROM scratch
ADD hello /
CMD ["/hello"]

构建后查看镜像的大小为872KB:

$ docker build -t hello -f hello.dockerfile .
Sending build context to Docker daemon  875.5kB
Step 1/3 : FROM scratch--->
Step 2/3 : ADD hello /---> a0c817454691
Step 3/3 : CMD ["/hello"]---> Running in ae204eb2c697
Removing intermediate container ae204eb2c697---> 114a8fd42e2f
Successfully built 114a8fd42e2f
Successfully tagged hello:latest$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
hello        latest    114a8fd42e2f   17 hours ago   872kB

查看hello执行文件的大小为872KB,发现镜像的大小和hello执行文件的大小是一样的,这样可以证明Scratch是一个空的Docker镜像。

$ ll --si
total 889k
drwxrwxr-x 2 morris morris 4.1k Sep  4 16:53 ./
drwxrwxr-x 3 morris morris 4.1k Sep  4 16:53 ../
-rwxrwxr-x 1 morris morris 872k Sep  4 16:53 hello*
-rw-rw-r-- 1 morris morris   64 Sep  4 16:52 hello.c
-rw-rw-r-- 1 morris morris   40 Sep  4 16:51 hello.dockerfile

另外可以通过docker history查看镜像只有hello执行文件这一层有size,正好是镜像的大小。

$ docker history hello
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
114a8fd42e2f   17 hours ago   /bin/sh -c #(nop)  CMD ["/hello"]               0B
a0c817454691   17 hours ago   /bin/sh -c #(nop) ADD file:198e5a2b23e222ef7…   872kB

使用hello镜像创建一个容器运行:

$ docker container run --name hello hello
hello docker

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新型人工智能技术让机器人的识别能力大幅提升

原创 | 文 BFT机器人 在德克萨斯大学达拉斯分校的智能机器人和视觉实验室里&#xff0c;一个机器人在桌子上移动一包黄油玩具。通过达拉斯分校计算机科学家团队开发的新系统&#xff0c;机器人每推动一次&#xff0c;就能学会识别物体。 新系统允许机器人多次推动物体&#xf…

基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器&#xff0c;液晶1602显示&#xff0c;MPX4115检测压力&#xff0c;按键设置报警&#xff0c;LED报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /***************************************…

Informatica使用工作流程及案例1

操作流程 ①定义源 ②定义目标 ③创建映射 ④定义任务 ⑤创建工作流 ⑥工作流调度监控 ⑦查验数据 连接D,并定义源、连接源 D:定义目标 通过源定义目标 D:定义好的目标表的表结构生成到目标数据库EDW层 D:创建映射 W&#xff1a;定义任务 W&#xff1a;执行工作流…

通俗讲解傅里叶变换

参考:六一礼物:给孩子解释什么是傅里叶变换 牛!不看任何数学公式来讲解傅里叶变换 如何直观形象、生动有趣地给文科学生介绍傅里叶变换? - 知乎 从基说起…… 从数学的角度,提供一个形象有趣的解释。理解傅里叶变换的钥匙是理解基♂,它能让你重新认识世界。 1. 什么是…

如何使用Docker部署debezium来监控 MySQL 数据库

目录 一、什么是Docker 二、什么是debezium 三、什么是MySQL 四、如何使用Docker部署debezium来监控 MySQL 数据库 一、什么是Docker Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流…

​重生奇迹MU弓箭手PK路线​

定位远程物理输出的弓箭手职业&#xff0c;是很多女性玩家都比较喜欢的&#xff0c;操作难度非常低&#xff0c;其持续输出以及远距离攻击特性&#xff0c;都让她表现非常不错。 一般重生奇迹弓箭手在日常副本时都是选择堆输出&#xff0c;然后就是恢复能力。但是pk完全不一样…

SpringBoot集成Swagger的使用

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。 Swagger能够在线自动生成 RESTFul接口的文档&#xff0c;同时具备测试接口的功能。 简单…

系统架构设计师-嵌入式系统

目录 一、嵌入式系统概述 1、基本概念 2、嵌入式系统软件组成架构 二、嵌入式软件开发 三、嵌入式硬件 1、嵌入式微处理器 2、人工智能芯片 3、嵌入式微处理器体系结构 4、总线 四、嵌入式操作系统 1、嵌入式实时操作系统 2、操作系统内核架构 3、鸿蒙操作系统 五、嵌入式…

OpenCV(十二):图像透视变换

目录 1.透视变换介绍 2.计算透视变换矩阵getPerspectiveTransform(&#xff09; 3.透视变换函数warpPerspective() 4.demo 1.透视变换介绍 透视变换是一种将原始图像映射到目标图像平面上的投影变换&#xff0c;又称为四点变换。 透视变换矩阵的一般形式如下所示&#xff…

【微服务部署】四、Jenkins一键打包部署NodeJS(Vue)前端项目步骤详解

本文介绍使用Jenkins一键将NodeJS&#xff08;Vue&#xff09;前端项目打包并上传到生产环境服务器&#xff0c;这里使用的是直接打包静态页面&#xff0c;发送到远程服务器Nginx配置目录的方式&#xff0c;首先确保服务器环境配置好&#xff0c;安装Nginx&#xff0c;运行目录…

Linux学习之MySQL连接查询

接上一篇 连接查询 连接查询也中多表查询&#xff0c;常用于查询来自于多张表的数据&#xff0c;通过不同的连接方式把多张表组成一张新的临时表&#xff0c;再对临时表做数据处理。 #表基础信息&#xff0c;内容可从上一篇博客中查看 mysql> desc departments; ---------…

每日刷题-2

目录 一、选择题 二、编程题 1、倒置字符串 2、排序子序列 3、字符串中找出连续最长的数字串 4、数组中出现次数超过一半的数字 一、选择题 1、 题目解析&#xff1a; 二维数组初始化的一般形式是&#xff1a; 数据类型 数组名[常量表达式1][常量表达式2] {初始化数据}; 其…

DataGridView选中的单元格求和

DataGridView单元格求和功能的基本思路是先得到选中的单元格&#xff0c; 1&#xff0c;在内存中定义两张表&#xff0c;一张存放列名&#xff0c;一张存放列名和数个。这样这两张表就开成了一对多的父子关系。 2&#xff0c;在将两张定及他们的父子关系添加到DataSet对象中 4…

vue使用wangEditor

vue版本2.0&#xff1b;editor5.1.23版本&#xff1b;editor-for-vue&#xff1a;1.0.2版本 api文档入口 效果图 点击查看如何封装 安装步骤入口 npm install wangeditor/editor --savenpm install wangeditor/editor-for-vue --save代码&#xff08;未封装过的&#xff09;…

大佬带飞,代码分享不会用?玩转Git,跟上大佬节奏!

一、安装 Git 客户端 这里为大家提供了windows版的Git客户端以及安装图文详解文档。百度网盘&#xff1a; https://pan.baidu.com/s/1CDu0Ke199pt3Ysv-QtWObA 提取码&#xff1a;8888 如果过期了请留言联系我。 二、注册码云账号 打开码云网站&#xff1a;https://gitee.co…

保留网络[02/3]:大型语言模型转换器的继任者”

一、说明 在这项工作中&#xff0c;我们提出保留网络&#xff08;RETNET&#xff09;作为基础架构大型语言模型的结构&#xff0c;同时实现训练并行&#xff0c; 推理成本低&#xff0c;性能好。我们从理论上推导出这种联系 复发与关注之间。然后我们提出保留机制 序列建模&…

【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate

目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 &#xff08;1&#xff09;查询基本语法&#xff1…

outlook等客户端报错:-ERR Login fail. Please using weixin token to login

使用outlook配置腾讯邮箱后&#xff0c;无法收取邮件&#xff0c;点击接收/发送所有文件夹&#xff0c; 提示报错&#xff1a; 任务“testqq.com - 正在接收”报告了错误(0x800CCC92):“电子邮件服务器拒绝您登录。请在“帐户设置”中验证此帐户的用户名及密码。 响应服务器:…

注册登录首选,趣味滑块验证码

前言 注册登录账户时&#xff0c;保障账户安全是首要任务&#xff01;使用趣味滑块验证码&#xff0c;既能有效防御恶意攻击&#xff0c;又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全&#xff01; HTML代码 <script src"https://cdn6.kgcaptcha.co…

Linux下 Socket服务器和客户端文件互传

目录 1.项目描述 2.函数准备 2.1 gets函数 2.2 popen函数、fread函数 2.3 access 函数 2.4 exit 函数 2.5 strtok 函数 2.6 chdir函数 3.项目代码 3.1服务器代码 3.2客户端代码 4.问题总结 1.项目描述 基于Soket聊天服务器&#xff0c;实现服务器和客户端的文件传输。…