基础概念
Docker 引擎主要的组件构成为:
- Docker client
- Docker daemon
- containerd
- runc
它们的关系如下:
Docker daemon 实现了 Docker 引擎的 API,默认情况下,Docker client 与 Docker daemon 之间的通信有本地的 IPC/UNIX socket 完成(/var/run/docker.sock
)。
Cheat Sheet
Image
列出本地镜像
可以使用--filter
来过滤docker image ls
返回的镜像列表:
- dangling:
true/false
,是否为悬虚镜像。
- before:
<image name or id>
,返回在其之前被创建的全部镜像
- since:
<image name or id>
,返回在其之后被创建的全部镜像
- label:标注(label)的名称或值。标注在Dockerfile通过 LABEL 指定,但是
docker image ls
不显示。
- reference:用正则表达式对镜像名称和标签过滤
Example:
使用--format
可以对输出内容镜像格式化输出:
如果只是想要IMAGE ID
的话,可以直接用-q
,这个和删除命令结合可以快速删除所有镜像:
拉取镜像
- 如果没有指定标签,则默认为 latest
- latest 不保证这是仓库中最新的镜像。
- 从非官方仓库中拉取镜像需要在仓库名称加上 Docker Hub的用户名或组织名,如
docker image pull wuxiaobai24/demo:v2
- 如果希望在第三方镜像仓库服务获取镜像,则需要在仓库名称前面加上第三方镜像仓库服务的 DNS 名称,如
docker image pull grc.io/wuxiaobai24/demo:v2
我们可以用docker search
来对 Docker Hug 进行搜索:
- 搜索时可以使用过滤器:
- is-official:true/false,是否为官方镜像
- is-automated/false,是否为自动创建的镜像
- 搜索结果默认返回 25 个结果,可以用
--limit
来指定个数
删除镜像
- 一个
Docker
镜像是由多个镜像层组成的,如果一个在删除某个镜像时,其中某个镜像层还被本地某个镜像引用的话,那么该镜像层不会被删除。
- 如果某个镜像存在正在运行的容器的话,删除操作不会被允许
- 可以用
docker image prune
来移除所有悬挂镜像。
- 悬虚镜像:没有标签的镜像,
<none>:<none>
。通常是因为构建了一个新的镜像并为该镜像打了一个已经存在的标签。这时候旧镜像就会变成悬虚镜像。
构造镜像
Container
启动容器
在容器中可以用 Ctrl-PQ 来退出容器(同时保持容器继续运行)
在退出容器后可以用下面的命令来attach
到已运行的容器:
列出镜像
停止/删除容器
Others
查看 Docker 相关信息:
将用户加入到本地 Docker 组中
这样可以将sudo docker ...
省略成docker ...
。
查看 Image 信息