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、大小和创建时间等信息:
[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)、环境变量、端口映射等信息:
[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:
docker rmi my-image:latest
docker rmi a1b2c3d4e5f6
如果要删除所有未被使用的镜像,可以使用 -a
参数:
docker rmi -a
代码语言:javascript复制删除镜像 我们可以使用 `docker rmi` 命令来删除本地机器上不再需要的镜像,指定镜像的仓库名、标签或者 ID:
```bash
docker rmi my-image:latest
docker rmi a1b2c3d4e5f6
如果要删除所有未被使用的镜像,可以使用 -a
参数:
docker rmi -a
总结 在本文中,我们介绍了 Docker 镜像的基本概念和操作方法,包括如何创建、查看、拉取、推送和删除镜像。Docker 镜像是一种轻量级、可移植、可复用的应用程序打包方式,它可以大大简化应用程序的开发、部署和运行过程。希望本文能够对您有所帮助,欢迎您在评论区留下您的反馈和建议。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
邀请人:江湖有缘