当前位置:首页 > 图灵资讯 > 技术篇> docker

docker

发布时间:2023-04-25 11:02:16

  镜像和容器

  上图显示了镜像与容器之间的关系,从顶层设计层面。通常使用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_docker

官方和非官方镜像仓库

  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

上一篇 想要性能提升?看看这篇文章告诉你性能场景的数据该怎么做!
下一篇 Java内部类

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题