前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门——镜像

Docker 入门——镜像

原创
作者头像
奇零才子
修改2023-11-02 17:34:54
4120
修改2023-11-02 17:34:54
举报
文章被收录于专栏:Linux运维之路Linux运维之路

DockDocker 入门——镜像er 是一种流行的开源平台,可以让开发者和运维人员轻松地创建、部署和运行应用程序。Docker 的核心概念之一就是镜像,它是一个包含了应用程序代码、依赖库、配置文件和运行环境的可执行文件。使用 Docker 镜像,我们可以在任何支持 Docker 的机器上快速地启动一个容器,而不需要担心环境差异和兼容性问题。

上一篇讲解了docker的安装部署,在这篇中,我们将介绍 Docker 镜像的特性、基本概念和操作方法,包括如何创建、查看、拉取、推送和删除镜像。

1、Docker 镜像的特性有:

  • 可移植:Docker 镜像可以在不同的平台和环境中运行,无需修改。
  • 可复用:Docker 镜像可以被多个容器(container)共享,无需重复下载或安装。
  • 可分层:Docker 镜像是由多个层(layer)组成的,每一层都是一个只读的文件系统,可以被缓存和复用。当创建或更新一个镜像时,只需修改最上层,而不影响其他层。

  • 可版本化:Docker 镜像可以被打上标签(tag),以便于管理和追踪不同的版本。

2、docker镜像的操作方法

创建镜像 有两种主要的方法可以创建 Docker 镜像:使用Dockerfile或者从现有的容器中提交。

  • 使用 Dockerfile 创建镜像 Dockerfile 是一个文本文件,其中包含了一系列的指令,用来描述如何构建一个镜像。例如,下面是一个简单的 Dockerfile,它基于 ubuntu 镜像,安装了 curl 工具,并设置了工作目录为 /app: FROM ubuntu RUN apt-get update && apt-get install -y curl WORKDIR /app 我们可以使用 docker build 命令来根据 Dockerfile 创建镜像,指定一个标签(tag)来命名镜像: docker build -t my-image:latest . 这里的 . 表示当前目录,也就是 Dockerfile 所在的目录。我们也可以指定一个 URL 或者一个 git 仓库作为构建上下文(context),Docker 会从中获取 Dockerfile 和其他文件。
  • 从现有的容器中提交镜像 另一种创建镜像的方法是从一个已经运行或者停止的容器中提交(commit)出一个新的镜像。这种方法可以用来保存容器的当前状态,或者对现有的镜像进行修改。例如,我们可以先启动一个 ubuntu 容器,并在其中执行一些命令: docker run -it ubuntu bash root@container-id:/# apt-get update && apt-get install -y curl root@container-id:/# mkdir /app root@container-id:/# exit 然后,我们可以使用 docker commit 命令来从这个容器中创建一个新的镜像,并指定一个标签: docker commit container-id my-image:latest

查看镜像 我们可以使用 docker images 命令来查看本地机器上已经存在的镜像列表,它会显示每个镜像的仓库名(repository)、标签(tag)、ID、大小和创建时间等信息:

代码语言:javascript
复制
[root@localhost learn_docker]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
nginx                    latest    bc649bab30d1   10 days ago    187MB
ubuntu                   latest    e4c58958181a   2 weeks ago    77.8MB
sheepgreen/liferestart   latest    9b1a5d218680   6 months ago   368MB
centos                   latest    5d0da3dc9764   2 years ago    231MB

我们也可以使用 docker image inspect 命令来查看某个镜像的详细信息,它会返回一个 JSON 格式的数据,包含了镜像的元数据、层(layer)、环境变量、端口映射等信息:

代码语言:javascript
复制
[root@localhost learn_docker]# docker image inspect my-image:latest
[
    {
        "Id": "sha256:790e0c39e09be81d9504a557dec20b798b9dfefd98d76a50efb45bba92bd3617",
        "RepoTags": [
            "my-image:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2023-10-22T05:44:58.754295499-07:00",
        "Container": "",
        "ContainerConfig": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "DockerVersion": "",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "",
            "Volumes": null,
            "WorkingDir": "/app",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "22.04"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 77823876,
        "VirtualSize": 77823876,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/22hqwpd0mcsd779vryudnwz58/diff:/var/lib/docker/overlay2/38417850e4fdf05552c4c4c921bc5ed6192a26941e31f87b84a12da40c09c280/diff",
                "MergedDir": "/var/lib/docker/overlay2/v3dv81b9wyey58b1chg6fzubf/merged",
                "UpperDir": "/var/lib/docker/overlay2/v3dv81b9wyey58b1chg6fzubf/diff",
                "WorkDir": "/var/lib/docker/overlay2/v3dv81b9wyey58b1chg6fzubf/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:256d88da41857db513b95b50ba9a9b28491b58c954e25477d5dad8abb465430b",
                "sha256:68ad0e7b06e50fb604ce15cfe5dc33380d40195f3d4a8b9cb34c10a7d7bbeee4",
                "sha256:fef60240b1321ce90dc96f5652aa97eb61d42cf956ce9fd3cea36dee00ba4efa"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-10-22T05:44:58.777160604-07:00"
        }
    }
]

拉取和推送镜像 除了本地创建镜像,我们还可以从远程的镜像仓库(registry)中拉取(pull)或者推送(push)镜像。镜像仓库是一个存储和分发镜像的服务,可以是公开的或者私有的。最常用的公开镜像仓库是 Docker Hub,它提供了数以万计的免费和付费的镜像,供用户下载和使用。

  • 拉取镜像 我们可以使用 docker pull 命令来从远程镜像仓库中拉取镜像到本地机器上,指定镜像的仓库名和标签: docker pull ubuntu:latest 如果不指定标签,默认会拉取最新版本(latest)的镜像。我们也可以指定一个完整的镜像名,包括仓库地址、用户名、仓库名和标签: docker pull registry.hub.docker.com/library/ubuntu:latest 这里的 registry.hub.docker.com 是 Docker Hub 的地址,library 是官方提供的镜像,ubuntu 是仓库名,latest 是标签。如果要拉取非官方或者私有的镜像,需要指定相应的用户名和密码: docker login registry.hub.docker.com -u <username> -p <password> docker pull <registry.hub.docker.com>/username/my-image:latest
  • 推送镜像 我们也可以使用 docker push 命令来将本地的镜像推送到远程的镜像仓库中,指定镜像的仓库名和标签: docker push my-image:latest 如果要推送到非本地或者非默认的镜像仓库,需要先登录到相应的仓库,并指定完整的镜像名: docker login <registry.hub.docker.com> -u <username> -p <password> docker tag my-image:latest <registry.hub.docker.com>/<username>/my-image:latest docker push <registry.hub.docker.com>/<username>/my-image:latest

删除镜像 我们可以使用 docker rmi 命令来删除本地机器上不再需要的镜像,指定镜像的仓库名、标签或者 ID:

代码语言:javascript
复制
docker rmi my-image:latest 
docker rmi a1b2c3d4e5f6

如果要删除所有未被使用的镜像,可以使用 -a 参数:

代码语言:javascript
复制
docker rmi -a 
代码语言:javascript
复制
删除镜像 我们可以使用 `docker rmi` 命令来删除本地机器上不再需要的镜像,指定镜像的仓库名、标签或者 ID:

```bash
docker rmi my-image:latest 
docker rmi a1b2c3d4e5f6

如果要删除所有未被使用的镜像,可以使用 -a 参数:

代码语言:javascript
复制
docker rmi -a 

总结 在本文中,我们介绍了 Docker 镜像的基本概念和操作方法,包括如何创建、查看、拉取、推送和删除镜像。Docker 镜像是一种轻量级、可移植、可复用的应用程序打包方式,它可以大大简化应用程序的开发、部署和运行过程。希望本文能够对您有所帮助,欢迎您在评论区留下您的反馈和建议。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

邀请人:江湖有缘

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Docker 镜像的特性有:
  • 2、docker镜像的操作方法
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com