草庐IT

【云原生 | Docker篇】Docker镜像(image)与服务

Binaire-沐辰 2023-04-22 原文

文章目录

🪐Docker镜像操作

镜像是Docker的三大组件之一。
Docker运行容器前需要本地存在对应的镜像,如果本地不存在,Docker会从镜像仓库下载。
下面主要从以下几个方面来了解docker镜像:

  • 从仓库获取镜像
  • 管理本地仓库的镜像

Docker命令使用

获取命令行帮助信息直接在命令行内输入docker命令后敲回车

📌查找镜像

我们可以从 Docker Hub网站来搜索镜像,Docker Hub网址为: https://hub.docker.com/

我们也可以使用docker search命令来搜索镜像。比如我们需要一个tomcat的镜像来作为我们的web服务。我们可以通过docker search命令搜索tomcat来寻找适合我们的镜像。


举个栗子

docker search tomcat

  • NAME: 镜像名称;
  • DESCRIPTION: 镜像描述;
  • OFFICIAL: 是否 Docker 官方发布;
  • STARS: 点赞数;
  • AUTOMATED: 自动构建。

📌镜像列表

想要查看已经下载的镜像,可以使用docker images ls命令

[root@localhost ~]# docker images   # docker images ls

其中列表包含了仓库名版本号(标签)、镜像ID创建时间以及镜像大小

镜像ID则是镜像的唯一标识,一个镜像可以对应多个标签。因此,如果两个镜像拥有相同的ID,说明它们对应的是同一个镜像。

镜像体积

  • 如果仔细观察,会注意到,这里标识的所占用空间和在Docker Hub上看到的镜像大小不同。这是因为Docker Hub中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 DockerHub所显示的大小是网络传输中更关心的流量大小。而docker image ls 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。
  • 另外一个需要注意的问题是,docker image ls列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于Docker镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于Docker使用Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。

📌获取镜像

之前提到过,Docker Hub上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。

从 Docker镜像仓库获取镜像的命令是docker pull其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/] 镜像名称[:版本号]
具体的选项可以通过docker pull --help命令看到,这里我们说一下镜像名称的格式。
- Docker 镜像仓库地址:―地址的格式一般是〈<域名/IP>[:端口号]。默认地址是 Docker Hub。
-仓库名:这里的仓库名是两段式名称,即<用户名>/<软件名>。
对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。

举个栗子

我们需要一个tomcat的镜像来作为我们的web服务,就可以通过 docker pull 获取镜像。

# docker pull tomcat:版本号
docker pull tomcat   # 不指定版本号,默认获取latest版本

📌删除镜像

删除本地镜像的命令是docker rmi 其命令格式为:

docker rmi [选项] <镜像1> [<镜像2>...]

用镜像ID、镜像名、摘要删除镜像
其中,镜像ID可以是部分镜像ID、完整镜像ID、镜像名或者镜像摘要

如果要删除本地的镜像,可以使用 docker rmi 命令

docker rmi 镜像ID # 删除本地指定镜像

删除镜像之前必须确认该镜像没有被任何容器使用

删除所有镜像

# 查看本地所有镜像的 IMAGE ID
docker images -q  
# 根据镜像ID删除所有镜像
docker rmi `docker images -q`

📌保存镜像

备份本地仓库的镜像
1、用 save 命令将本地镜像保存到当前目录下

docker save -o 导出的路径及名称 镜像名称
# 举个栗子
docker save -o tomcat.tar 镜像名称

2、将本地目录下的镜像备份文件导入到本地的docker仓库

# 命令1:
docker load -i tomcat.tar
# 命令2:
docker load < tomcat.tar

具体操作步骤如下:

  1. 首先保存镜像,然后删除该镜像。

  1. 然后将刚才的备份文件导入本地docker仓库,之后就可以继续使用 tomcat 了!


修改镜像名称

docker tag 镜像id 新镜像名称:版本号
# 举个栗子
docker tag fe helloworld:1

🪐Docker服条相关命令

  • 启动docker服务:
systemctl start docker
  • 停止docker服务:
systemctl stop docker
  • 重启docker服务:
systemctl restart docker
  • 查看docker服务状态:
systemctl status docker
  • 设置开机启动docker服务:
systemctl enable docker

有关【云原生 | Docker篇】Docker镜像(image)与服务的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  9. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

  10. ruby - Dropbox 类似 git 的服务——没有 rsync 和 inotify - 2

    关于如何使用git设置类似Dropbox的服务,您有什么建议吗?您认为git是解决此问题的合适工具吗?我在考虑使用git+rush解决方案,你觉得怎么样? 最佳答案 检查这个开源项目:https://github.com/hbons/SparkleShare来自项目的自述文件:Howdoesitwork?SparkleSharecreatesaspecialfolderonyourcomputer.Youcanaddremotelyhostedfolders(or"projects")tothisfolder.Theseprojec

随机推荐