Docker镜像和使用和管理

Docker镜像可以理解为一个只读模板,其中包含运行容器所需的代码、运行时、库和依赖项。它可以被用来创建一个或多个Docker容器,确保在任何环境中运行时都有相同的依赖和配置。Docker镜像是由多个分层(layers)构成的,每一层都是在前一层之上的更改。这些层是不可变的,每一层都是只读的,并且只在需要更改时创建新的层。这样做的好处是可以大大减少存储空间和加速构建过程。

从仓库下载Docker镜像

我们可以在DockerHub搜索别人已经封装好的镜像。获取镜像的命令:

docker pull [选项] [仓库地址]<仓库名>:<标签>
  • 仓库地址:默认值是DockerHub公共仓库,手动指定私有仓库一般是IP或域名:端口号的形式
  • 仓库名:仓库名是两段式的,即用户名/软件名,对于DockerHub,如果不给出用户名,默认是library,指官方镜像

这里我们下载一个Ubuntu14.04的镜像。

docker pull ubuntu:14.04

从图中我们可以看到Docker镜像的分层拉取过程。此外,如果你希望拉取一个非本地平台的镜像,可以使用--platform参数,比如:docker pull --platform linux/arm64 ubuntu:14.04,该命令特别指明拉取arm64架构CPU下使用的镜像。

列出镜像

使用以下命令可以列出当前本机上存在的镜像。

docker images

这里我们可以看到刚才下载的Ubuntu镜像:

使用Docker镜像

运行容器需要使用run命令,即创建并执行容器。

docker run有许多参数,针对不同的适用场景,具体可以参考文档,下面列举一些常见用法。

启动运行交互式终端

这里我们以运行Ubuntu镜像为例。

docker run -it --rm ubuntu:14.04 bash
  • -it:启动交互式终端,it实际上是两个参数,不过一般都是结合使用
  • --rm:容器退出后立即将其删除
  • ubuntu:14.04:运行的镜像名字
  • bash:放在镜像名后的是命令,这里我们指定启动bash程序

执行该命令后,我们可以看到终端进入了镜像内部并启动了Bash。

启动服务程序

这里我们以Redis为例。

docker run -d -p 6379:6379 redis:latest
  • -d:指定容器在后台运行
  • -p:指定容器到主机的端口映射,格式为<宿主机端口>:<容器端口>6379:6379即容器内部使用6379端口,并映射到主机的6379端口

删除镜像

执行以下命令可以删除本机上存在的镜像。

docker rmi <镜像>

删除镜像时,我们可以通过镜像名字指定,也可以通过镜像ID指定。有实例化容器的镜像不能被删除,必须先删除容器(命令为docker rm),才能删除镜像。

为镜像打Tag

为镜像打Tag可以理解为给镜像复制一份(当然并没有真的在磁盘上复制文件)并指定一个新的坐标,基于这个新的Tag我们可以将镜像推送到指定的位置。

docker tag <镜像ID> [仓库地址]<仓库名>:<标签>

下面是一个例子,假如f6022158f52d是Nginx在DockerHub发布的官方镜像,我们需要将其上传到我们的私服harbor.gacfox.com上面,我们执行以下命令给镜像打了新的Tag然后使用docker push命令推送即可。

docker tag f6022158f52d harbor.gacfox.com/public/nginx:1.20.1 && docker push harbor.gacfox.com/public/nginx:1.20.1

推送镜像

推送镜像很简单,我们使用docker push命令加上镜像名字即可。

docker push [仓库地址]<仓库名>:<标签>

对于私服我们可能还需要登录认证,此时终端会提示输入用户名和密码,我们按要求输入即可。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap