镜像和容器
上图显示了镜像与容器之间的关系,从顶层设计层面。通常使用docker container run和docker service create命令从一个镜像中启动一个或多个容器。
一旦容器从镜像开始,它们就变成了相互依赖的关系,在所有从镜像开始的容器停止之前,镜像就不能被删除。试图删除镜像而不停止或销毁使用它的容器会导致错误。镜像通常相对较小
容器的目的是运行应用程序或服务,这意味着必须包含应用程序/服务操作所需的操作系统和应用程序文件。
然而,容器追求快速和小,这意味着在构建镜像时,通常需要切断不必要的部分,以保持较小的体积。
例如,Docker 镜像通常不包括在内 6 个不同的 Shell 让读者选择-通常 Docker 镜像中只有一个简化的Shell,甚至没有 Shell。
镜像中不包含核心-容器共享 Docker 主机的核心。因此,有时容器只包含必要的操作系统(通常只包含操作系统文件和文件系统对象)。
提示:Hyper-V 容器在特殊的轻量级容器中运行 VM 上,同时使用 VM 内部操作系统内核。
Docker 官方镜像 Alpine Linux 大约只有 4MB,可以说是 Docker 镜像小巧的典型例子。
然而,镜像更常见的状态是如此 Ubuntu 官方的 Docker 镜像一般,大约有 110MB。大部分无用的内容都被剪掉在这些镜像中。
Windows 镜像要比 Linux 镜像比较大,这个和 Windows OS 工作原理相关。例如,最新的未压缩 Microsoft .NET 镜像(microsoft/dotnet:latest)超过 1.7GB。Windows Server 2016 Nano Server 镜像(microsoft/nanoserver:latest)拉取解压后,其体积略大于 1GB。 过滤器
Docker 目前支持以下过滤器。 dangling:可以指定 true 或者 false,只返回悬虚镜像(true),或者非悬虚镜像(false)。 before:需要镜像名称或者 ID 作为参数,返回之前创建的所有镜像。 since:与 before 类似地,但返回的是指定镜像后创建的所有镜像。 label:根据标注(label)过滤镜像的名称或值。docker image ls命令输出中不显示标记内容。
可使用其他过滤方法 reference。
以下是使用 reference 过滤完成后,只显示标签 latest 的示例。
$ docker image ls --filter=reference="*:latest"REPOSITORY TAG IMAGE ID CREATED SIZEalpine latest 3fd9065eaf02 8 days ago 4.15MBtest latest 8426e7efb777 3 days ago 122MB 镜像仓库服务
Docker 镜像存储在镜像仓库服务中(Image Registry)当中。
Docker 可配置客户端的镜像仓库服务,默认使用 Docker Hub。
镜像仓库服务包括多个镜像仓库(Image Repository)。同样,一个镜像仓库可以包含多个镜像。
也许这听起来有点令人困惑,所以下图显示了它包含的内容 3 镜像仓库的镜像仓库服务,每个镜像仓库都包含一个或多个镜像。
官方和非官方镜像仓库
Docker Hub 也分为官方仓库(Official Repository)和非官方仓库(Unofficial Repository)。
顾名思义,官方仓库的镜像是由 Docker 公司审查。这意味着镜像将及时更新,由高质量的代码组成。这些代码是安全的,有完善的文档和最佳实践。
非官方仓库更像江湖侠客,镜像可能没有官方仓库的优势,但这并不意味着所有非官方仓库都不好!非官方仓库也有一些优秀的镜像。
在信任非官方仓库的镜像代码之前,我们需要谨慎。说实话,读者在使用任何从互联网上下载的软件之前都应该小心,甚至在使用官方仓库的镜像之前。
大多数流行的操作系统和应用程序 Docker Hub 官方仓库有相应的镜像。这些镜像很容易找到,基本上都在 Docker Hub 命名空间的顶层。 镜像 images
查看本地镜像语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS:选项
REPOSITORY:镜像名称
TAG:版本号选项
选项
作用
–all , -a
显示所有镜像(默认情况下不会显示中间镜像)
–digests
显示镜像摘要信息
–filter , -f
根据给定条件筛选镜像
–format
指定自定义打印格式
–no-trunc
显示完整的镜像ID
–quiet , -q
只显示镜像ID 定制打印格式
支持指定字段的自定义打印格式如下:
字段
描述
.ID
镜像 ID
.Repository
镜像名
.Tag
镜像tag
.Digest
镜像摘要
.CreatedSince
创建时间跨度
.CreatedAt
创建时间点
.Size
镜像磁盘的大小例子 docker根据镜像名和tag值查询 images python:3.9显示没有tag值的镜像docker images --filter="dangling=true删除docker,未打ta值额镜像 rmi -f $(docker images --filter="dangling=true" -q)显示镜像ID和镜像名docker images --format "{{.ID}}: {{.Repository}}" pull
用于从镜像仓库中提取或更新指定的镜像。当我们操作容器并指定它时 Docker 当镜像不在本地时,它首先从仓库里拉出来。大多数时候,当我们使用官员时, Docker 创建自己的定制镜像作为基本镜像 Docker 镜像时,镜像是从“hub.docker.com下载的公共仓库。这个命令有不同的标志,但有些只适用于更新版本。语法
docker pull [OPTIONS] NAME[:TAG|@DIGEST]OPTIONS:NAME选项:镜像名TAG:版本号 参数
选项
作用
–all-tags, -a
用于下载存储库中不同标签的所有镜像,docker pull 默认命令一次只拉一个镜像
–disable-content-trust
它会在拉出之前跳过镜像验证
–platform
用于设置平台,仅适用于目前使用的实验功能。如果您不熟悉镜像,例如它是如何工作或工作的,不建议下载未签名的镜像 Docker 镜像。
–quiet, -q:
用于静默拉取镜像(不冗长)。例子 拉没有任何标签的 ‘alpine’ 镜像,Docker 默认情况下,守护过程会拉带“latest“标签镜像,只有当有最新标签的镜像时,才会拉出镜像docker pull alpine拉带有特定标签的镜像,例如,我们将拉带有不同标签的相同“alpine”镜像,即“edge”docker pull alpine:通过摘要提取镜像dockeredge pull alpine@sha256:3e92a88546f6b15943678d323afdbf1d950368264e0317b45e469dfa81d53从不同的仓库或私人仓库拉出镜像docker pull localhost:5000/alpine拉一个包含所有可用标签的仓库docker pull --all-tags alpine拉取未签名并启用内容信任 Docker 镜像docker pull --disable-content-trust localhost:5000/alpine 拉取镜像docker,没有任何详细的输出 pull -q nginx:alpine build
构建镜像语法 docker build [OPTIONS] PATH | URL | -OPTIONS:PATH选项:路径URL:URL 选项
名称,简写
默认
说明
--build-arg
在构造过程中设置变量
--cache-from
应考虑作为缓存源的图像
--cgroup-parent
--cgroup-parent
父cgroupp可选容器
--compress
false
使用gzip压缩构建环境
--cpu-period
0
限制CPU CFS周期(完全公平的调度程序)
--cpu-quota
0
限制CPU CFS配额(完全公平的调度程序)
--cpu-shares, -c
0
CPU比例(相对权重)
--cpuset-cpus
CPU(0-3,0)允许执行
--cpuset-mems
允许执行的内存(0-3,0.1)
--disable-content-trust
true
跳过图像验证
--file, -f
Dockerfile的名字(默认为’PATH/Dockerfile‘)
--force-rm
false
总是删除中间容器
--isolation
容器隔离技术
--label
元数据设置图像
--memory, -m
内存限制
--memory-swap
交换限制等于内存加交换:-1‘表示启用无限交换
--network
default
在构建过程中设置RUN指令的组网模式
--no-cache
false
构建图像时不要使用缓存
--pull
false
总是试图拉一个更新版本的图像
--quiet, -q
false
抑制构建输出,成功打印图像ID
--rm
true
成功构建后移除中间容器
--security-opt
安全选项
--shm-size
/dev/shm默认值为:64MB
--squash
false
将新建的层压成新的层
--tag, -t
“名称与可选”name:tag格式标签
--ulimit
Ulimit配置 例子 使用当前目录的Dockerfile创建镜像。docker build -t luo/ubuntu:v1 . 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。docker build github.com/creack/docker-firefox search 语法
docker search [OPTIONS] TERM
OPTIONS:选项
TERM:名称(模糊搜索) 选项
命令选项
描述
–filter , -f
过滤应根据给定的条件进行
–format
定制打印格式
–limit
显示搜索结果,默认值25
–no-trunc
回显结果不截断,全部显示 定制打印格式
占位符
描述
.Name
镜像名称
.Description
镜像描述
.StarCount
收集的镜像数量
.IsOfficial
镜像是否为官方镜像,如果是现实,“OK”
.IsAutomated
如果显示“镜像是否自动构建”OK” 例子 docker通过指定镜像名搜索 search busybox搜索结果不截断显示docker search busybox --no-trunc设置搜索结果仅显示10个docker search busybox --limit=10搜索结果过滤star收集的数量大于或等于3个docker search busybox --filter stars=搜索结果仅列出自动构建的镜像docker search busybox --filter is-automated=true搜索结果只列出了官方镜像docker search busybox --filter is-official=通过多种条件过滤true搜索结果,以下是过滤自动构建的镜像docker,收集量大于或等于3 search busybox --filter is-automated=true --filter stars=三是搜索nginx镜像,只显示镜像名称和镜像收藏数量的docker search --format "{{.Name}}: {{.StarCount}}" nginx格式化显示镜像名称、镜像收藏数量、镜像是否自动构建、镜像是否官方docker search --format "table {{.Name}}\t\t{{.StarCount}}\t\t{{.IsAutomated}}\t\t{{.IsOfficial}}" nginx history
打印指定的 历史版本的Docker镜像信息。语法
docker history [OPTIONS] IMAGE
OPTIONS:选项
IMAGE:镜像名称 选项
参数
说明
-H
以可读格式打印镜像的大小和日期,默认为true
--no-trunc
显示完整的提交记录
-q
仅列出提交记录的ID例子 打印指定的 历史版本的Docker镜像信息。docker history luo/ubuntu:v1 容器 run
创建和运行新的容器语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS 是可选参数,中括号中的参数是可选IMAGE:nginxCOMMAND等具体镜像表示:ARG是执行镜像中的命令..:表示COMMAND命令的参数 选项
参数
说明
-a
可选择指定标准输入输出内容类型 STDIN/STDOUT/STDERR 三项
-d
在后台操作容器并返回容器ID
-i
容器通常以交互模式运行 -t 同时使用
-t
通常与容器重新分配一个伪输入终端 -i 同时使用
--name="nginx-lb"
为容器指定一个名称
--dns 8.8.8.8
指定容器使用的DNS服务器默认与宿主一致
--dns-search example.com
指定容器DNS搜索域名,默认与宿主一致
-h "mars"
指定容器的hostname
-e username="ritchie"
设置环境变量
--env-file=[]
从指定文件读入环境变量
--cpuset="0-2" or --cpuset="0,1,2"
绑定容器到指定CPU运行
-m
使用内存最大值的设置容器
--net="bridge"
支持指定容器的网络连接类型bridge、host、none和container四种类型
--link=[]
添加链接到另一个容器
--expose=[]
打开一个端口或一组端口 例子 使用镜像nginx:latest在后台模式下启动容器,并将容器的80端口映射到主机随机端口docker run --name mynginx -d nginx:latest使用镜像nginxx:latest在后台模式下启动容器,并将容器的80端口映射到主机的随机端口-d:在后台启动一个容器P:将容器的80端口映射到主机随机端口docker run -P -d nginx:latest将宿主机的路径映射到容器中,各参数的含义如下:-d: 使用镜像nginx:latest在后台模式下启动容器-P:将容器80端口映射到主机80端口-v:主机目录/data映射到容器/datadocker run -p 80:80 -v /data:/data -d nginx:latest使用镜像nginxx:latest以交互模式启动容器,执行/执行/执行在容器内bin/bash命令:-i:容器以交互模式运行-t:为容器重新分配伪输入终端/bin/bash:执行容器中的命令$ docker run -it nginx:latest /bin/bash
Docker命令行大全
https://www.yiibai.com/docker/image_build.html