设为首页 收藏本站
查看: 1396|回复: 0

[经验分享] docker好文收藏

[复制链接]

尚未签到

发表于 2017-12-6 12:28:15 | 显示全部楼层 |阅读模式
深入浅出Docker(一):Docker核心技术预览

2. 核心技术预览
  Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。我们从虚拟化方法的四个方面:隔离性、可配额/可度量、便携性、安全性来详细介绍Docker的技术细节。

2.1. 隔离性: Linux Namespace(ns)
  每个用户实例之间相互隔离, 互不影响。 一般的硬件虚拟化方法给出的方法是VM,而LXC给出的方法是container,更细一点讲就是kernel namespace。其中pid、net、ipc、mnt、uts、user等namespace将container的进程、网络、消息、文件系统、UTS("UNIX Time-sharing System")和用户空间隔离开。
  1) pid namespace
  不同用户的进程就是通过pid namespace隔离开的,且不同 namespace 中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace。同时由于允许嵌套,因此可以很方便的实现 Docker in Docker。
  2) net namespace
  有了 pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过net namespace实现的, 每个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个container的网络就能隔离开来。docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge: docker0连接在一起。
  3) ipc namespace
  container中进程交互还是采用linux常见的进程间交互方法(interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存。然而同 VM 不同的是,container 的进程间交互实际上还是host上具有相同pid namespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息 - 每个IPC资源有一个唯一的 32 位 ID。
  4) mnt namespace
  类似chroot,将一个进程放到一个特定的目录执行。mnt namespace允许不同namespace的进程看到的文件结构不同,这样每个 namespace 中的进程所看到的文件目录就被隔离开了。同chroot不同,每个namespace中的container在/proc/mounts的信息只包含所在namespace的mount point。
  5) uts namespace
  UTS("UNIX Time-sharing System") namespace允许每个container拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。
  6) user namespace
  每个container可以有不同的 user 和 group id, 也就是说可以在container内部用container内部的用户执行程序而非Host上的用户。

2.2 可配额/可度量 - Control Groups (cgroups)
  cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup目录下新建一个文件夹即可新建一个group,在此文件夹中新建task文件,并将pid写入该文件,即可实现对该进程的资源控制。groups可以限制blkio、cpu、cpuacct、cpuset、devices、freezer、memory、net_cls、ns九大子系统的资源,以下是每个子系统的详细说明:


  • blkio 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。
  • cpu 这个子系统使用调度程序为cgroup任务提供cpu的访问。
  • cpuacct 产生cgroup任务的cpu资源报告。
  • cpuset 如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。
  • devices 允许或拒绝cgroup任务对设备的访问。
  • freezer 暂停和恢复cgroup任务。
  • memory 设置每个cgroup的内存限制以及产生内存资源报告。
  • net_cls 标记每个网络包以供cgroup方便使用。
  • ns 名称空间子系统。
  以上九个子系统之间也存在着一定的关系.详情请参阅官方文档。

2.3 便携性: AUFS
  AUFS (AnotherUnionFS) 是一种 Union FS, 简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)的文件系统, 更进一步的理解, AUFS支持为每一个成员目录(类似Git Branch)设定readonly、readwrite 和 whiteout-able 权限, 同时 AUFS 里有一个类似分层的概念, 对 readonly 权限的 branch 可以逻辑上进行修改(增量地, 不影响 readonly 部分的)。通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个disk挂到同一个目录下, 另一个更常用的就是将一个 readonly 的 branch 和一个 writeable 的 branch 联合在一起,Live CD正是基于此方法可以允许在 OS image 不变的基础上允许用户在其上进行一些写操作。Docker 在 AUFS 上构建的 container image 也正是如此,接下来我们从启动 container 中的 linux 为例来介绍 docker 对AUFS特性的运用。
  典型的启动Linux运行需要两个FS: bootfs + rootfs:
DSC0000.png

  bootfs (boot file system) 主要包含 bootloader 和 kernel, bootloader主要是引导加载kernel, 当boot成功后 kernel 被加载到内存中后 bootfs就被umount了. rootfs (root file system) 包含的就是典型 Linux 系统中的 /dev, /proc,/bin, /etc 等标准目录和文件。
  对于不同的linux发行版, bootfs基本是一致的, 但rootfs会有差别, 因此不同的发行版可以公用bootfs 如下图:
DSC0001.png

  典型的Linux在启动后,首先将 rootfs 设置为 readonly, 进行一系列检查, 然后将其切换为 "readwrite" 供用户使用。在Docker中,初始化时也是将 rootfs 以readonly方式加载并检查,然而接下来利用 union mount 的方式将一个 readwrite 文件系统挂载在 readonly 的rootfs之上,并且允许再次将下层的 FS(file system) 设定为readonly 并且向上叠加, 这样一组readonly和一个writeable的结构构成一个container的运行时态, 每一个FS被称作一个FS层。如下图:
DSC0002.png

  得益于AUFS的特性, 每一个对readonly层文件/目录的修改都只会存在于上层的writeable层中。这样由于不存在竞争, 多个container可以共享readonly的FS层。 所以Docker将readonly的FS层称作 "image" - 对于container而言整个rootfs都是read-write的,但事实上所有的修改都写入最上层的writeable层中, image不保存用户状态,只用于模板、新建和复制使用。
DSC0003.png

  上层的image依赖下层的image,因此Docker中把下层的image称作父image,没有父image的image称作base image。因此想要从一个image启动一个container,Docker会先加载这个image和依赖的父images以及base image,用户的进程运行在writeable的layer中。所有parent image中的数据信息以及 ID、网络和lxc管理的资源限制等具体container的配置,构成一个Docker概念上的container。如下图:
DSC0004.png


2.4 安全性: AppArmor, SELinux, GRSEC
  安全永远是相对的,这里有三个方面可以考虑Docker的安全特性:


  • 由kernel namespaces和cgroups实现的Linux系统固有的安全标准;
  • Docker Deamon的安全接口;
  • Linux本身的安全加固解决方案,类如AppArmor, SELinux;
  由于安全属于非常具体的技术,这里不在赘述,请直接参阅Docker官方文档。

6. 参考文献:


  • https://tiewei.github.io/cloud/Docker-Getting-Start/
  • http://docs.docker.com/articles/
  • http://www.slideshare.net/shykes/docker-the-road-ahead
  • http://www.centurylinklabs.com/meet-docker-ceo-ben-golub/
  • http://lwn.net/Articles/531114/
  • http://en.wikipedia.org/wiki/Aufs
  • http://docs.docker.io/en/latest/terms/filesystem/
  • http://docs.docker.io/en/latest/terms/layer/
  • http://docs.docker.io/en/latest/terms/image/
  • http://docs.docker.io/en/latest/terms/container/
  • https://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc

深入浅出Docker(二):Docker命令行探秘

1. Docker命令行
  首先,Docker的命令清单可以通过运行docker ,或者 docker help 命令得到:
  $ sudo docker
DSC0005.png

  笔者通过结合功能和应用场景方面的考虑,把命令行划分为4个部分,方便我们快速概览Docker命令行的组成结构:


功能划分



命令



环境信息相关



  • info
  • version

系统运维相关



  • attach
  • build
  • commit
  • cp
  • diff
  • export
  • images
  • import / save / load
  • inspect
  • kill
  • port
  • pause / unpause
  • ps
  • rm
  • rmi
  • run
  • start / stop / restart
  • tag
  • top
  • wait

日志信息相关



  • events
  • history
  • logs

Docker Hub服务相关



  • login
  • pull / push
  • search

1.1 参数约定
  单个字符的参数可以放在一起组合配置,例如

docker run -t -i --name test busybox sh
  可以用这样的方式等同:

docker run -ti --name test busybox sh
1.2 Boolean
  Boolean参数形式如: -d=false。注意,当你声明这个Boolean参数时,比如 docker run -d=true,它将直接把启动的Container挂起放在后台运行。

1.3 字符串和数字
  参数如 --name=“” 定义一个字符串,它仅能被定义一次。同类型的如-c=0 定义一个数字,它也只能被定义一次。

1.4 后台进程
  Docker后台进程是一个常驻后台的系统进程,值得注意的是Docker使用同一个文件来支持客户端和后台进程,其中角色切换通过-d来实现。这个后台进程是用来管理容器的,使用Docker --help可以得到更详细的功能参数配置, 如下图:
DSC0006.png

  Docker后台进程参数清单如下表:


参数



解释


  --api-enable-cors=false

  开放远程API调用的 CORS 头信息。这个接口开关对想进行二次开发的上层应用提供了支持。

  -b, --bridge=""

  挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。

  --bip=""

  使用 CIDR 地址来设定网络桥的 IP。注意,此参数和 -b 不能一起使用。

  -D, --debug=false

  开启Debug模式。例如:docker -d -D

  -d, --daemon=false

  开启Daemon模式。

  --dns=[]

  强制容器使用DNS服务器。例如: docker -d --dns 8.8.8.8

  --dns-search=[]

  强制容器使用指定的DNS搜索域名。例如: docker -d --dns-search example.com

  -e, --exec-driver="native"

  强制容器使用指定的运行时驱动。例如:docker -d -e lxc

  -G, --group="docker"

  在后台运行模式下,赋予指定的Group到相应的unix socket上。注意,当此参数 --group 赋予空字符串时,将去除组信息。

  -g, --graph="/var/lib/docker"

  配置Docker运行时根目录

  -H, --host=[]

  在后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:
  $ docker -H tcp://0.0.0.0:2375 ps 或者
  $ export DOCKER_HOST="tcp://0.0.0.0:2375"
$ docker ps
  --icc=true
  启用内联容器的通信。
  --ip="0.0.0.0"
  容器绑定IP时使用的默认IP地址
  --ip-forward=true
  启动容器的 net.ipv4.ip_forward
  --iptables=true
  启动Docker容器自定义的iptable规则
  --mtu=0
  设置容器网络的MTU值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。
  -p, --pidfile="/var/run/docker.pid"
  后台进程PID文件路径。
  -r, --restart=true
  重启之前运行中的容器
  -s, --storage-driver=""
  强制容器运行时使用指定的存储驱动,例如,指定使用devicemapper, 可以这样:
  docker -d -s devicemapper
  --selinux-enabled=false
  启用selinux支持
  --storage-opt=[]
  配置存储驱动的参数
  --tls=false
  启动TLS认证开关
  --tlscacert="/Users/dxiao/.docker/ca.pem"
  通过CA认证过的的certificate文件路径
  --tlscert="/Users/dxiao/.docker/cert.pem"
  TLS的certificate文件路径
  --tlskey="/Users/dxiao/.docker/key.pem"
  TLS的key文件路径
  --tlsverify=false
  使用TLS并做后台进程与客户端通讯的验证
  -v, --version=false
  显示版本信息


  注意,其中带有[] 的启动参数可以指定多次,例如

$ docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash
2. Docker命令行探秘

2.1 环境信息相关
  info
  使用方法: docker info
  例子:

[fedora@docker-devel-cli docker]$ sudo docker -D info
Containers: 0
Images: 32
Storage Driver: devicemapper
Pool Name: docker-252:1-130159-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 1616.9 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 2.4 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.11.10-301.fc20.x86_64
Debug mode (server): false
Debug mode (client): true
Fds: 11
Goroutines: 14
EventsListeners: 0
Init SHA1: 2c5adb59737b8a01fa3fb968519a43fe140bc9c9
Init Path: /usr/libexec/docker/dockerinit
Sockets: [fd://]
  使用说明:
  这个命令在开发者报告Bug时会非常有用,结合docker vesion一起,可以随时使用这个命令把本地的配置信息提供出来,方便Docker的开发者快速定位问题。
  version
  使用方法: docker version
  使用说明:
  显示Docker的版本号,API版本号,Git commit, Docker客户端和后台进程的Go版本号。

2.2 系统运维相关
  attach
  使用方法: docker attach [OPTIONS] CONTAINER
  例子:

$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b)
$ sudo docker attach $ID
top - 17:21:49 up  5:53,  0 users,  load average: 0.63, 1.15, 0.78
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.7 sy,  0.0 ni, 97.7 id,  0.7 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   2051644 total,   723700 used,  1327944 free,    33032 buffers
KiB Swap:   0 total,   0 used,  0 free.   565836 cached Mem
PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
1 root      20   0   19748   1280   1008 R  0.0  0.1   0:00.04 top
$ sudo docker stop $ID
  使用说明:
  使用这个命令可以挂载正在后台运行的容器,在开发应用的过程中运用这个命令可以随时观察容器內进程的运行状况。开发者在开发应用的场景中,这个命令是一个非常有用的命令。
  build
  使用方法:docker build [OPTIONS] PATH | URL | -
  例子:

$ docker build .
Uploading context 18.829 MB
Uploading context
Step 0 : FROM busybox
---> 769b9341d937
Step 1 : CMD echo Hello world
---> Using cache
---> 99cc1ad10469
Successfully built 99cc1ad10469
  使用说明:
  这个命令是从源码构建新Image的命令。因为Image是分层的,最关键的Base Image是如何构建的是用户比较关心的,Docker官方文档给出了构建方法,请参考这里。
  commit
  使用方法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  例子:

$ sudo docker ps
ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
$ docker commit c3f279d17e0a  SvenDowideit/testimage:version3
f5283438590d
$ docker images | head
REPOSITORY                        TAG                 ID                  CREATED             VIRTUAL SIZE
SvenDowideit/testimage            version3            f5283438590d        16 seconds ago      335.7 MB
  使用说明:
  这个命令的用处在于把有修改的container提交成新的Image,然后导出此Imange分发给其他场景中调试使用。Docker官方的建议是,当你在调试完Image的问题后,应该写一个新的Dockerfile文件来维护此Image。commit命令仅是一个临时创建Imange的辅助命令。
  cp
  使用方法: cp CONTAINER:PATH HOSTPATH
  使用说明:
  使用cp可以把容器內的文件复制到Host主机上。这个命令在开发者开发应用的场景下,会需要把运行程序产生的结果复制出来的需求,在这个情况下就可以使用这个cp命令。
  diff
  使用方法:docker diff CONTAINER
  例子:

$ sudo docker diff 7bb0e258aefe
C /dev
A /dev/kmsg
C /etc
A /etc/mtab
A /go
A /go/src
A /go/src/github.com
A /go/src/github.com/dotcloud
....
  使用说明:
  diff会列出3种容器内文件状态变化(A - Add, D - Delete, C - Change )的列表清单。构建Image的过程中需要的调试指令。
  export
  使用方法:docker export CONTAINER
  例子:

$ sudo docker export red_panda > latest.tar
  使用说明:
  把容器系统文件打包并导出来,方便分发给其他场景使用。
  images
  使用方法:docker images [OPTIONS] [NAME]
  例子:

$ sudo docker images | head
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committest latest b6fa739cedf5 19 hours ago 1.089 GB
<none> <none> 78a85c484f71 19 hours ago 1.089 GB
$ docker latest 30557a29d5ab 20 hours ago 1.089 GB
<none> <none> 0124422dd9f9 20 hours ago 1.089 GB
<none> <none> 18ad6fad3402 22 hours ago 1.082 GB
<none> <none> f9f1e26352f0 23 hours ago 1.089 GB
tryout latest 2629d1fa0b81 23 hours ago 131.5 MB
<none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
  使用说明:
  Docker Image是多层结构的,默认只显示最顶层的Image。不显示的中间层默认是为了增加可复用性、减少磁盘使用空间,加快build构建的速度的功能,一般用户不需要关心这个细节。
  import / save / load
  使用方法:

docker import URL|- [REPOSITORY[:TAG]]
docker save IMAGE
docker load
  使用说明:
  这一组命令是系统运维里非常关键的命令。加载(两种方法: import, load),导出(一种方法: save)容器系统文件。
  inspect
  使用方法:

docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
  例子:

$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $INSTANCE_ID
  使用说明:
  查看容器运行时详细信息的命令。了解一个Image或者Container的完整构建信息就可以通过这个命令实现。
  kill
  使用方法:

docker kill [OPTIONS] CONTAINER [CONTAINER...]
  使用说明:
  杀掉容器的进程。
  port
  使用方法:

docker port CONTAINER PRIVATE_PORT
  使用说明:
  打印出Host主机端口与容器暴露出的端口的NAT映射关系
  pause / unpause
  使用方法:

docker pause CONTAINER
  使用说明:
  使用cgroup的freezer顺序暂停、恢复容器里的所有进程。详细freezer的特性,请参考官方文档。
  ps
  使用方法:

docker ps [OPTIONS]
  例子:

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                CREATED              STATUS              PORTS               NAMES
4c01db0b339c        ubuntu:12.04                 bash                   17 seconds ago       Up 16 seconds                           webapp
d7886598dbe2        crosbymichael/redis:latest   /redis-server --dir    33 minutes ago       Up 33 minutes       6379/tcp            redis,webapp/db
  使用说明:
  docker ps打印出正在运行的容器,docker ps -a打印出所有运行过的容器。
  rm
  使用方法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]
  例子:

$ sudo docker rm /redis
/redis
  使用说明:
  删除指定的容器。
  rmi
  使用方法:

docker rmi IMAGE [IMAGE...]
  例子:

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
$ sudo docker rmi fd484f19954f
Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories
2013/12/11 05:47:16 Error: failed to remove one or more images
$ sudo docker rmi test1
Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
$ sudo docker rmi test2
Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB)
$ sudo docker rmi test
Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
  使用说明:
  指定删除Image文件。
  run
  使用方法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  例子:

$ sudo docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
  使用说明:
  这个命令是核心命令,可以配置的参数多达28个参数。详细的解释可以通过docker run --help列出。官方文档中提到的 Issue 2702:"lxc-start: Permission denied - failed to mount" could indicate a permissions problem with AppArmor. 在最新版本的Dcoker中已经解决。
  start / stop / restart
  使用方法:

docker start CONTAINER [CONTAINER...]
  使用说明:
  这组命令可以开启(两个:start, restart),停止(一个:stop)一个容器。
  tag
  使用方法:

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  使用说明:
  组合使用用户名,Image名字,标签名来组织管理Image。
  top
  使用方法:

docker top CONTAINER [ps OPTIONS]
  使用说明:
  显示容器內运行的进程。
  wait
  使用方法:

docker wait CONTAINER [CONTAINER...]
  使用说明:
  阻塞对指定容器的其他调用方法,直到容器停止后退出阻塞。

2.3 日志信息相关
  events
  使用方法:

docker events [OPTIONS]
  使用说明:
  打印容器实时的系统事件。
  history
  使用方法:

docker history [OPTIONS] IMAGE
  例子:

$ docker history docker
IMAGE CREATED CREATED BY SIZE
3e23a5875458790b7a806f95f7ec0d0b2a5c1659bfc899c89f939f6d5b8f7094 8 days ago
/bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B
8578938dd17054dce7993d21de79e96a037400e8d28e15e7290fea4f65128a36 8 days ago
/bin/sh -c dpkg-reconfigure locales && locale-gen C.UTF-8 &&
/usr/sbin/update-locale LANG=C.UTF-8 1.245 MB
be51b77efb42f67a5e96437b3e102f81e0a1399038f77bf28cea0ed23a65cf60 8 days ago /bin/sh
-c apt-get update && apt-get install -y git libxml2-dev python build-essential
make gcc python-dev locales python-pip 338.3 MB
4b137612be55ca69776c7f30c2d2dd0aa2e7d72059820abf3e25b629f887a084 6 weeks ago
/bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB
750d58736b4b6cc0f9a9abe8f258cef269e3e9dceced1146503522be9f985ada 6 weeks ago
/bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com>
- mkimage-debootstrap.sh -t jessie.tar.xz jessie http://http.debian.net/debian 0 B
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 9 months ago 0 B
  使用说明:
  打印指定Image中每一层Image命令行的历史记录。
  logs
  使用方法:

docker logs CONTAINER
  使用说明:
  批量打印出容器中进程的运行日志。

2.4 Dcoker Hub服务相关
  login
  使用方法:

docker login [OPTIONS] [SERVER]
  使用说明:
  登录Hub服务。
  pull / push
  使用方法:

docker push NAME[:TAG]
  使用说明:
  通过此命令分享Image到Hub服务或者自服务的Registry服务。
  search
  使用方法:

docker search TERM
  使用说明:
  通过关键字搜索分享的Image。

3. 总结
  通过以上Docker命令行的详细解释,可以强化对Docker命令的全面理解。考虑到Docker命令行的发展变化非常快,读者可以参考官方的命令行解释文档更新相应的命令行解释。另外,通过以上Docker命令行的分析,可以知道Docker命令行架构设计的特点在于客户端和服务端的运行文件是同一个文件,内部实现代码应该是重用的设计。笔者希望开发者在开发类似的命令行应用时参考这样的设计,减少前后台容错的复杂度。

参考文献
[1] https://docs.docker.com/reference/commandline/cli/

[2] https://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

[3] https://en.wikipedia.org/wiki/CIDR_notation#CIDR_notation


深入浅出Docker(三):Docker开源之路

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421281-1-1.html 上篇帖子: zabbix docker 下篇帖子: 创建 overlay 网络
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表