Docker - 镜像、容器、仓库

原文地址,使用效果更佳!

Docker - 镜像、容器、仓库 | CoderMast编程桅杆Docker - 镜像、容器、仓库 提示 这个章节涉及到 Docker 最核心的知识,也是在使用过程中最常使用到的,需要重点学习。 什么是Docker镜像、容器、仓库? Docker镜像:镜像是一个只读的模板,其中包含了创建 Docker 容器的说明,可以用来创建 Docker 容器。镜像可以包含操作系统、应用程序、依赖库、配置文件等。 Docker容...icon-default.png?t=N7T8https://www.codermast.com/dev-tools/docker/docker-object.html

提示

这个章节涉及到 Docker 最核心的知识,也是在使用过程中最常使用到的,需要重点学习。

什么是Docker镜像、容器、仓库?

  • Docker镜像:镜像是一个只读的模板,其中包含了创建 Docker 容器的说明,可以用来创建 Docker 容器。镜像可以包含操作系统、应用程序、依赖库、配置文件等。

  • Docker容器:容器是代码的隔离环境。这意味着容器并不直接在操作系统上运行。容器是 Docker 镜像的一个运行实例,可以理解为一个轻量级的虚拟机,用面向对象的思想来看,其就是一个镜像的运行对象。容器包含了运行应用程序所需的所有组件,包括操作系统、应用程序、依赖库等。

  • Docker仓库:仓库是用来存储和管理 Docker 镜像的地方,类似于代码仓库。Docker 官方提供了 Docker Hub 仓库,可以在其中存储和分享 Docker 镜像。用户也可以自建私有仓库来存储和管理自己的 Docker 镜像。

镜像、容器、仓库之间的关系

 

Docker 镜像可以看做是一个静态模板,Docker 容器是对镜像的一个实例化,一个镜像可以实例化多个容器,这几个容器相互独立,互不影响。

Docker 仓库就是存放 Docker 镜像的地方,严格意义上来说可以分为本地仓库和远程仓库,远程仓库由 Docker 官方维护,包含了几乎所有的 Docker 镜像,Docker 本地仓库只有你拉取的镜像。

在使用 Docker 镜像创建对象之前,需要先拉取 Docker 镜像,这里的拉取通常是指从 Docker 官方仓库拉取。

故使用 Docker 的基本步骤可以清晰的总结为:

  1. 从仓库拉取 Docker 镜像

  2. 使用 Docker 镜像实例化一个 Docker 容器

  3. 运行 Docker 容器

Docker镜像

当运行容器时,使用的 Docker 镜像不在本地仓库中,Docker 就会从默认的 Docker 仓库中下载该镜像。一般是从 Docker 官方提供的 Docker Hub 仓库中下载。

下面来学习关于 Docker 镜像的相关操作。

镜像列表

docker images

 

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签, 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

查找镜像

注意

本小节以查找 Redis 镜像为例做演示说明,其他镜像的操作同理。

  1. 在 Docker Hub查找

使用 Docker Hub 中提供的查找功能:https://hub.docker.com/search?q=redis&type=imageopen in new window

这里就已经找到了 Redis 的镜像信息

 

可以查看 Redis 镜像的各种版本信息。

 

  1. 使用 Docker Search查找

docker search redis

 

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。
  1. 使用 Docker Desktop 查找

 

直接在 Docker Desktop 中搜索即可。

拉取镜像

拉取镜像即从 Docker 仓库中拉取 Docker 镜像,本质上就是从远程的仓库中下载镜像到本地。

这里仍以 Redis 为样例进行编写,其他镜像的拉取同理。

docker pull redis

 

这里默认拉取的是 Redis 的最新版本,如果要是想拉取指定版本时可以进行如下执行,如拉取 redis7.0

docker pull redis:7.0

 

删除镜像

这里我们演示删除之前下载的那个 Hello-World 镜像

docker rmi hello-world

 

这里如果使用了该镜像创建了容器,那么就会报错。

 

如果出现这种情况,就说明我们使用了该镜像创建了容器,那么就必须先删除使用该镜像的所有容器,才能够删除该镜像。

  • 先查看 Docker 容器

docker ps -a

 

  • 然后删除 Docker 容器

docker rm 8c0dde3e3fb4

 

使用的是 Docker 容器的 ID 删除。

  • 删除 Docker 镜像

docker rmi hello-world

 

提示

如果一个镜像创建了多个容器,那么在删除该镜像之前,必须删除所有使用该镜像的容器,才能够删除该镜像。

更新镜像

Dokcer 镜像的更新就是在目前运行的 Docker 容器上进行修改,然后将更新后的 Docker 容器的所有内容,导出为一个 Docker 镜像,随后就可以使用该镜像创建 Docker 容器。

  1. 先下载一个 Ubuntu20.04 镜像

docker pull ubuntu:20.04

 

  1. 创建一个该镜像的容器

docker run -t -i ubuntu:20.04

 

  1. 在该容器内运行 apt-get update 指令,更新 ubuntu 系统,更新后 exit 退出这个容器到我们本地的命令控制端。

apt-get update

 

  1. 提交容器副本

docker commit -m="update ubuntu20.04" -a="CoderMast" 13999fa6f4f6 codermast/ubuntu:latest

 

各个参数说明:

  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • 13999fa6f4f6:容器 ID

  • codermast/ubuntu:latest: 指定要创建的目标镜像名

  1. 查看镜像列表

docker images

 

这里可以看到已经创建成功了,并且大小和之前的不一样了。

  1. 使用该镜像创建一个容器

docker run -t -i codermast/ubuntu:latest

 

生成镜像

镜像标签

我们可以使用 docker tag 命令为镜像添加一个新的标签。

docker tag e650c5f208da codermast/ubuntu:v1
  • e650c5f208da:为镜像的 ID
  • codermast/ubuntu:v1:Tag 名

 

此时我们在创建 Docker 容器时,既可以使用 codermast/ubuntu:latest 也可以使用 codermast/ubuntu:v1

Tag 可以看做是给镜像起别名,其本质的镜像 ID 不变,具体底层就是同一个镜像的不同引用而已。

镜像导入和导出

  1. 镜像导出

docker save > codermast-ubuntu-latest.tar e650c5f208da
  • codermast-ubuntu-latest.tar:要导出的文件名
  • e650c5f208da:要导出的镜像 ID

 

  1. 镜像导入

在镜像导入之前,为了方便观察,先删除掉该镜像。

docker load < codermast-ubuntu-latest.tar
  • codermast-ubuntu-latest.tar:为要导入的文件名。

 

注意

  • 若是只想备份images,使用save、load即可
  • 若是在启动容器后,容器内容有变化,需要备份,则使用export、import

Docker容器

在上面的 Docker 镜像的相关操作中,我们或多或少的了解和学习了一些 Docker 容器的相关操作。

容器启动

docker run -it codermast/ubuntu:latest /bin/bash
  • -it 可以连写的,表示 -i -t
  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互
  • codermast/ubuntu:latest:镜像名称

 

容器查看

docker ps -a
  • -a 表示 all,即查看所有容器

 

容器再启动

我们看到,刚才 codermast/ubuntu:latest 的实例d3a11e669e88 已经停止了Exited (0) 4 seconds ago,我们重启这个实例

docker start d3a11e669e88

 

容器停止和重启

  • 容器停止
docker stop d3a11e669e88
  • 容器重启
docker restart d3a11e669e88

 

后台模式与进入

在使用 -d 参数创建容器时,容器启动后会进入后台,那么此时我们怎么进入容器呢?

  • 使用 `docker attach [容器ID]
docker attach d3a11e669e88

 

  • docker exec -i -t [容器ID] /bin/bash
docker exec -i -t d3a11e669e88 /bin/bash

 

注意

  • docker attach 在退出容器终端后,容器会停止运行。

  • docker exec 在退出容器终端后,不会导致容器的停止。

✅ 推荐大家使用 docker exec

容器导出和导入

  1. 容器的导出
docker export 246b23d5d5a5 > redis-latest-codermast.tar
  • 246b23d5d5a5:容器 ID
  • redis-latest-codermast.tar:导出文件名

 

  1. 容器的导入
docker import redis-latest-codermast.tar codermast/redis:latest
  • redis-latest-codermast.tar:配置文件名
  • codermast/redis:latest:导入的镜像名称

 

要注意的是,这里是对 Docker 容器进行导出,但是导出的结果是镜像的配置文件,通过该配置文件导入的也是 Docker 镜像。

强制删除容器

我们知道,当容器在运行的时候是无法直接删除的,需要先将容器先停止运行,随后才能删除该容器,那么能不能直接删除正在运行中的容器呢?

答案是可以的,我们只需要在其中加上 -f 的选项即可,代表 force 强制的意思。

docker rm -f b234f112186d
  • b234f112186d:为 正在运行 Docker 容器的 ID

 

清理停止的容器

在容器停止运行后,并不会自动被删除,需要手动清除。该指令一次性清除所有的停止状态的容器。

docker container prune

 

容器别名及操作

上述对容器的操作都是针对容器 ID,这个 ID 是随机的,为了方便起见,我们可以设置一个自定义的 name 来进行操作。仅需在指令中设置 name 选项即可。

docker run -d --name codermast-redis-001 redis:latest
  • codermast-redis-001:自定义的名称
  • redis:latest:镜像名称

 

容器错误日志

docker logs ...
  • 实时查看docker容器名为user-uat的最后10行日志

docker logs -f -t --tail 10 user-uat

  • 查看指定时间后的日志,只显示最后100行:

docker logs -f -t --since="2024-01-14" --tail=100 user-uat

  • 查看最近30分钟的日志:

docker logs --since 30m user-uat

  • 查看某时间之后的日志:

docker logs -t --since="2024-01-14T21:00:00" user-uat

  • 查看某时间段日志:

docker logs -t --since="2024-01-14T21:00:00" --until "2018-02-09T12:23:37" user-uat

  • 将错误日志写入文件:

docker logs -f -t --since="2024-01-14" user-uat | grep error >> logs_error.txt

Docker仓库

Docker 仓库是集中存放 Docker 镜像的地方。默认使用的仓库为 Docker Hub,也可以更改为自己的想使用的仓库。类似于 Github 的仓库,只不过 Github 管理的是代码,Docker Hub 管理的是 Docker 镜像。

这里以 Docker Hub 为例进行说明。

  1. 登录仓库
docker login
  1. 将准备好的镜像推送至仓库
docker push codermast/redis:latest
  • codermast/redis:latest:Docker 镜像名

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

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

相关文章

leetcode:438. 找到字符串中所有字母异位词

给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s "cbaebabacd", p "…

前端工程化01-复习jQuery当中的AJAX

4.1、基础概念 什么是服务器 一台存储网站内容、网站文件的电脑 什么是资源 网站中使用的文件&#xff08;html、css、图片、…&#xff09;这些东西就叫做资源数据也是服务器上的资源&#xff0c;而且是一个网站的灵魂 客户端 客户端应该指上网的设备但是在前端开发中&a…

Web后端-请求响应

黑马程序员JavaWeb开发教程 文章目录 一、请求1、简单参数2、实体参数3、数组集合参数&#xff08;1&#xff09;数组参数&#xff08;2&#xff09;集合参数 4、日期参数5、json参数&#xff08;1&#xff09;在Postman中怎么发起请求来传递JSON格式的请求参数&#xff08;2&a…

精通MongoDB聚合操作API:深入探索高级技巧与实践

MongoDB 聚合操作API提供了强大的数据处理能力&#xff0c;能够对数据进行筛选、变换、分组、统计等复杂操作。本文介绍了MongoDB的基本用法和高级用法&#xff0c;高级用法涵盖了setWindowFields、merge、facet、expr、accumulator窗口函数、结果合并、多面聚合、查询表达式在…

卷王问卷考试系统/SurveyKing调查系统源码

SurveyKing是一个功能强大的开源调查问卷和考试系统&#xff0c;它能够快速部署并适用于各个行业。 这个系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;提供多种创建问卷的方式和设置。 项 目 地 址 &#xff1a; runruncode.c…

C++相关概念和易错语法(7)(初始化列表、隐式类型转换、友元)

1.初始化列表 初始化列表是集成在构造函数里面的&#xff0c;对象在创建的时候一定会调用构造函数&#xff08;就算不显式定义&#xff0c;也会自动生成并调用&#xff09;。初始化列表就是这些对象的成员变量在创建的时候初始化的地方。 下面是使用的例子&#xff0c;可以先…

香港服务器_免备案服务器有哪些正规的?企业、建站方向

香港服务器&#xff0c;是最受欢迎的外贸、企业建站服务器&#xff0c;在个人建站领域&#xff0c;香港服务器、香港虚拟主机都是首选的网站服务器托管方案&#xff0c;不仅其具备免备案的特点&#xff0c;而且国内外地区访问速度都很快。那么&#xff0c;现今2024年个人和企业…

项目如何部署

我们平常写的项目通常只能在本机上运行&#xff0c;要想项目能被远程访问就不得不谈到项目部署的知识&#xff0c;接下来我通过实际操作的操作让大家来上线一个vuespringBoot项目。 1.在windows上将vue部署到nginx服务器上 介绍nginx Nginx是一款高性能的Web服务器和反向代理服…

C#语法知识之循环语句

5、循环语句 文章目录 1、while思考1 斐波那契数列思考2 判断一个数是否为质数思考3 找出100以内的质数 2、do...while3、for思考1 找水仙花数思考2 乘法表 1、while 1、作用 让代码重复去执行 2、语法相关 while(bool类型值){//当满足条件时&#xff0c;就会执行while语句…

【GIS教程】ArcGIS做日照分析(附练习数据下载)

我国对住宅日照标准的规定是:冬至日住宅底层日照不少于1小时或大寒日住宅层日照不少于2小时(通常以当地冬至日正午12时的太阳高度角作为依据)。因冬至日太阳高度角最低&#xff0c;照射范围最小&#xff0c;如果冬至日12&#xff1a;00建筑物底层能够接收到阳光&#xff0c;那么…

Python数据可视化库—Bokeh与Altair指南

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域&#xff0c;数据可视化是一种强大的工具&#xff0c;可以帮助我们…

Docker - HelloWorld

原文地址&#xff0c;使用效果更佳&#xff01; Docker - HelloWorld | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-helloworld.html 开始之前 在学习本小节之前&#xff0c;你必须确保你正确安装了 Docker&#xff0c;正确安装 Docker 是后续学习的…

墨子web3实时周报

蚂蚁集团Web3研发进展与布局 国内Web3赛道的领军企业——蚂蚁集团&#xff0c;凭借其在前沿科技领域的深耕不辍&#xff0c;已在Web3技术研发疆域缔造了卓越战绩。特别是在引领行业革新的关键时刻&#xff0c;集团于今年四月末震撼推出了颠覆性的Web3全套解决方案&#xff0c;…

java通过maven导入本地jar包的三种方式

一、引入lib下加载&#xff08;加载过后打包&#xff0c;以后再次使用不用再次导入&#xff09; 首先创建一个用于创建jar包的项目&#xff0c;并测试能否成功运行 讲项目打包 在需要引入的项目中创建lib目录 并把刚才打包的jar复制进去 通过dependency引入jar包 groupId、art…

读天才与算法:人脑与AI的数学思维笔记05_算法的幻觉

1. 自下而上 1.1. 代码在未来可以自主学习、适应并进行自我改进 1.2. 程序员通过编程教会计算机玩游戏&#xff0c;而计算机却会比教它的人玩得更好&#xff0c;这种输入寡而输出众的事情不大可能实现 1.3. 早在20世纪50年代&#xff0c;计算机科学家们就模拟该过程创造了感…

人工智能论文GPT-3(3):2020.5 Language Models are Few-Shot Learners;架构;训练数据集;开源

2.1 模型与架构 我们使用了与GPT-2相同的模型和架构&#xff0c;包括其中描述的改进初始化、预归一化和可逆分词技术&#xff0c;但有所不同的是&#xff0c;我们在Transformer的各层中使用了交替的密集和局部带状稀疏注意力模式&#xff0c;类似于Sparse Transformer 。为了研…

Flutter 的 showDialog 和 showCupertinoDialog 有什么区别?

我将我的 App 里用的 Flutter 升级到了 3.19&#xff0c;没想到&#xff0c;以前我用 showDialog 和 AlertDialog 组合创建的二次确认框&#xff0c;变得无敌难看了&#xff0c;大幅度增加了整个框的圆角和里面默认按钮的圆角。不得已&#xff0c;我必须修改一下&#xff0c;以…

算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结

目录 一、Leetcode189轮转数组题目描述解题思路方法:切片总结 二、Leetcode56合并区间题目描述解题思路方法:总结 三、Leetcode21合并两个有序链表题目描述解题思路方法:总结 四、Leetcode2两数相加题目描述解题思路方法:总结 sql总结: 一、Leetcode189轮转数组 题目描述 给定…

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

NotePad++联动ABAQUS

Abaqus 中脚本运行 1. 命令区kernel Command Line Interface &#xff08;KCLI&#xff09; execfile(C:\\temp\second develop\chapter2\pyTest1.py)2. CAE-Run Script File->Run Script 3. Abaqus command Abaqus cae noGUIscript.py(前后处理都可)Abaqus Python scr…