docker好文收藏

深刻淺出Docker(一):Docker核心技術預覽

2. 核心技術預覽

Docker核心是一個操做系統級虛擬化方法, 理解起來可能並不像VM那樣直觀。咱們從虛擬化方法的四個方面:隔離性、可配額/可度量、便攜性、安全性來詳細介紹Docker的技術細節。python

2.1. 隔離性: Linux Namespace(ns)

每一個用戶實例之間相互隔離, 互不影響。 通常的硬件虛擬化方法給出的方法是VM,而LXC給出的方法是container,更細一點講就是kernel namespace。其中pid、net、ipc、mnt、uts、user等namespace將container的進程、網絡、消息、文件系統、UTS("UNIX Time-sharing System")和用戶空間隔離開。linux

1) pid namespacegit

不一樣用戶的進程就是經過pid namespace隔離開的,且不一樣 namespace 中能夠有相同pid。全部的LXC進程在docker中的父進程爲docker進程,每一個lxc進程具備不一樣的namespace。同時因爲容許嵌套,所以能夠很方便的實現 Docker in Docker。github

2) net namespaceweb

有了 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鏈接在一塊兒。redis

3) ipc namespacedocker

container中進程交互仍是採用linux常見的進程間交互方法(interprocess communication - IPC), 包括常見的信號量、消息隊列和共享內存。然而同 VM 不一樣的是,container 的進程間交互實際上仍是host上具備相同pid namespace中的進程間交互,所以須要在IPC資源申請時加入namespace信息 - 每一個IPC資源有一個惟一的 32 位 ID。bootstrap

4) mnt namespaceubuntu

相似chroot,將一個進程放到一個特定的目錄執行。mnt namespace容許不一樣namespace的進程看到的文件結構不一樣,這樣每一個 namespace 中的進程所看到的文件目錄就被隔離開了。同chroot不一樣,每一個namespace中的container在/proc/mounts的信息只包含所在namespace的mount point。api

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九大子系統的資源,如下是每一個子系統的詳細說明:

  1. blkio 這個子系統設置限制每一個塊設備的輸入輸出控制。例如:磁盤,光盤以及usb等等。
  2. cpu 這個子系統使用調度程序爲cgroup任務提供cpu的訪問。
  3. cpuacct 產生cgroup任務的cpu資源報告。
  4. cpuset 若是是多核心的cpu,這個子系統會爲cgroup任務分配單獨的cpu和內存。
  5. devices 容許或拒絕cgroup任務對設備的訪問。
  6. freezer 暫停和恢復cgroup任務。
  7. memory 設置每一個cgroup的內存限制以及產生內存資源報告。
  8. net_cls 標記每一個網絡包以供cgroup方便使用。
  9. 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:

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 以下圖:

典型的Linux在啓動後,首先將 rootfs 設置爲 readonly, 進行一系列檢查, 而後將其切換爲 "readwrite" 供用戶使用。在Docker中,初始化時也是將 rootfs 以readonly方式加載並檢查,然而接下來利用 union mount 的方式將一個 readwrite 文件系統掛載在 readonly 的rootfs之上,而且容許再次將下層的 FS(file system) 設定爲readonly 而且向上疊加, 這樣一組readonly和一個writeable的結構構成一個container的運行時態, 每個FS被稱做一個FS層。以下圖:

得益於AUFS的特性, 每個對readonly層文件/目錄的修改都只會存在於上層的writeable層中。這樣因爲不存在競爭, 多個container能夠共享readonly的FS層。 因此Docker將readonly的FS層稱做 "image" - 對於container而言整個rootfs都是read-write的,但事實上全部的修改都寫入最上層的writeable層中, image不保存用戶狀態,只用於模板、新建和複製使用。

上層的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。以下圖:

2.4 安全性: AppArmor, SELinux, GRSEC

安全永遠是相對的,這裏有三個方面能夠考慮Docker的安全特性:

  1. 由kernel namespaces和cgroups實現的Linux系統固有的安全標準;
  2. Docker Deamon的安全接口;
  3. Linux自己的安全加固解決方案,類如AppArmor, SELinux;

因爲安全屬於很是具體的技術,這裏不在贅述,請直接參閱Docker官方文檔

6. 參考文獻:

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

 

深刻淺出Docker(二):Docker命令行探祕

 

1. Docker命令行

首先,Docker的命令清單能夠經過運行docker ,或者 docker help 命令獲得:

$ sudo docker

筆者經過結合功能和應用場景方面的考慮,把命令行劃分爲4個部分,方便咱們快速概覽Docker命令行的組成結構:

 

功能劃分

命令

環境信息相關

  1. info
  2. version

系統運維相關

  1. attach
  2. build
  3. commit
  4. cp
  5. diff
  6. export
  7. images
  8. import / save / load
  9. inspect
  10. kill
  11. port
  12. pause / unpause
  13. ps
  14. rm
  15. rmi
  16. run
  17. start / stop / restart
  18. tag
  19. top
  20. wait

日誌信息相關

  1. events
  2. history
  3. logs

Docker Hub服務相關

  1. login
  2. pull / push
  3. 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能夠獲得更詳細的功能參數配置, 以下圖:

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開源之路

相關文章
相關標籤/搜索