1. 程式人生 > >Docker 介紹以及其相關術語

Docker 介紹以及其相關術語

### 什麼是Docker > Docker 是一個開源引擎,可以輕鬆的為任何應用建立一個輕量級,可移植的的容器,開發者在筆記本上編譯通過的容器可以批量在生產環境部署,包括虛擬機器、bare metal、OpenStack 叢集和其他的基礎應用平臺。 ### Docker應用場景 - web應用自動化打包和釋出; - 自動化測試和持續整合、釋出; - 在服務型環境中部署和調整資料庫或其他的後臺應用 - 從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境

### 準備 Docker 系統優兩個程式:docker服務端和docker客戶端。其中docker服務端是一個服務程序,管理者所有的容器,docker客戶端則扮演著docker服務端的遠端控制器,可以用來控制docker服務端的程序,大部分情況下,docker服務端和客戶端執行在一臺機器上。 #### 搜尋可用的docker映象

使用docker最簡單的方式莫過於從現有的容器映象開始。Docker官方網站專門有一個頁面來儲存所有可用的映象,

網址是:[docker連結](http://index.docker.io)。 可以通過瀏覽這個網頁來查詢你想要使用的映象,或者使用命令列的工具來檢索。

|docker| 常用命令| |------|-------| |docker search 映象名字| 查詢映象 |docker pull   映象名字| 下載docker(映象都是按照使用者名稱/映象名的方式來儲存的) |docker run 映象名字 命令| 在docker中執行命令 |docker images | 檢視當前映象列表| |docker ps | 檢視當前執行的容器 |docker ps -a| 列出當前系統所有的容器|

#### 儲存對容器的修改

當你對某一個容器做了修改之後(通過在容器中執行某一個命令),可以把對容器的修改儲存下來,這樣下次可以從儲存後的最新狀態執行該容器。docker中儲存狀態的過程稱之為committing,它儲存的新舊狀態之間的區別,從而產生一個新的版本。

首先使用docker ps -l命令獲得安裝完ping命令之後容器的id。然後把這個映象儲存為learn/ping。

提示:

1. 執行docker commit,可以檢視該命令的引數列表。

2. 你需要指定要提交儲存容器的ID。(譯者按:通過docker ps -l 命令獲得)

3. 無需拷貝完整的id,通常來講最開始的三至四個字母即可區分。(譯者按:非常類似git裡面的版本號)

docker commit 698 learn/ping

####執行新的映象

ok,到現在為止,你已經建立了一個完整的、自成體系的docker環境,並且安裝了ping命令在裡面。它可以在任何支援docker環境的系統中執行啦!(譯者按:是不是很神奇呢?)讓我們來體驗一下吧!

目標:

在新的映象中執行ping www.google.com命令。

提示:

一定要使用新的映象名learn/ping來執行ping命令。(譯者按:最開始下載的learn/tutorial映象中是沒有ping命令的)

正確的命令: $docker run lean/ping ping www.google.com

####檢查執行中的映象

使用docker ps命令可以檢視所有正在執行中的容器列表,使用docker inspect命令我們可以檢視更詳細的關於某一個容器的資訊。

目標:

查詢某一個執行中容器的id,然後使用docker inspect命令檢視容器的資訊。

提示:

可以使用映象id的前面部分,不需要完整的id。

正確的命令:

$ docker inspect efe

####釋出docker映象

現在我們已經驗證了新映象可以正常工作,下一步我們可以將其釋出到官方的索引網站。還記得我們最開始下載的learn/tutorial映象吧,我們也可以把我們自己編譯的映象釋出到索引頁面,一方面可以自己重用,另一方面也可以分享給其他人使用。

目標:

把learn/ping映象釋出到docker的index網站。

提示:

1. docker images命令可以列出所有安裝過的映象。

2. docker push命令可以將某一個映象釋出到官方網站。

3. 你只能將映象釋出到自己的空間下面。這個模擬器登入的是learn帳號。

預期的命令: $ docker push learn/ping

## Docker 命令幫助 $ sudo docker   # docker 命令幫助 ```bash Commands:     attach    Attach to a running container                 # 當前 shell 下 attach 連線指定執行映象     build     Build an image from a Dockerfile              # 通過 Dockerfile 定製映象     commit    Create a new image from a container's changes # 提交當前容器為新的映象     cp        Copy files/folders from the containers filesystem to the host path               # 從容器中拷貝指定檔案或者目錄到宿主機中     create    Create a new container                        # 建立一個新的容器,同 run,但不啟動容器     diff      Inspect changes on a container's filesystem   # 檢視 docker 容器變化     events    Get real time events from the server          # 從 docker 服務獲取容器實時事件     exec      Run a command in an existing container        # 在已存在的容器上執行命令     export    Stream the contents of a container as a tar archive                  # 匯出容器的內容流作為一個 tar 歸檔檔案[對應 import ]     history   Show the history of an image                  # 展示一個映象形成歷史     images    List images                                   # 列出系統當前映象     import    Create a new filesystem image from the contents of a tarball                 # 從tar包中的內容建立一個新的檔案系統映像[對應 export]     info      Display system-wide information               # 顯示系統相關資訊     inspect   Return low-level information on a container   # 檢視容器詳細資訊     kill      Kill a running container                      # kill 指定 docker 容器     load      Load an image from a tar archive              # 從一個 tar 包中載入一個映象[對應 save]     login     Register or Login to the docker registry server                  # 註冊或者登陸一個 docker 源伺服器     logout    Log out from a Docker registry server         # 從當前 Docker registry 退出     logs      Fetch the logs of a container                 # 輸出當前容器日誌資訊     port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT               # 檢視對映埠對應的容器內部源埠     pause     Pause all processes within a container        # 暫停容器     ps        List containers                               # 列出容器列表     pull      Pull an image or a repository from the docker registry server               # 從docker映象源伺服器拉取指定映象或者庫映象     push      Push an image or a repository to the docker registry server               # 推送指定映象或者庫映象至docker源伺服器     restart   Restart a running container                   # 重啟執行的容器     rm        Remove one or more containers                 # 移除一個或者多個容器     rmi       Remove one or more images                                # 移除一個或多個映象[無容器使用該映象才可刪除,否則需刪除相關容器才可繼續或 -f 強制刪除]     run       Run a command in a new container               # 建立一個新的容器並執行一個命令     save      Save an image to a tar archive                # 儲存一個映象為一個 tar 包[對應 load]     search    Search for an image on the Docker Hub         # 在 docker hub 中搜索映象     start     Start a stopped containers                    # 啟動容器     stop      Stop a running containers                     # 停止容器     tag       Tag an image into a repository                # 給源中映象打標籤     top       Lookup the running processes of a container   # 檢視容器中執行的程序資訊     unpause   Unpause a paused container                    # 取消暫停容器     version   Show the docker version information           # 檢視 docker 版本號     wait      Block until a container stops, then print its exit code                  # 擷取容器停止時的退出狀態值 Run 'docker COMMAND --help' for more information on a command.

```

<code>docker option</code>

```bash Usage of docker:   --api-enable-cors=false                Enable CORS headers in the remote API                      # 遠端 API 中開啟 CORS 頭   -b, --bridge=""                        Attach containers to a pre-existing network bridge         # 橋接網路                                            use 'none' to disable container networking   --bip=""                               Use this CIDR notation address for the network bridge's IP, not compatible with -b                                          # 和 -b 選項不相容,具體沒有測試過   -d, --daemon=false                     Enable daemon mode                                         # daemon 模式   -D, --debug=false                      Enable debug mode                                          # debug 模式   --dns=[]                               Force docker to use specific DNS servers                   # 強制 docker 使用指定 dns 伺服器   --dns-search=[]                        Force Docker to use specific DNS search domains            # 強制 docker 使用指定 dns 搜尋域   -e, --exec-driver="native"             Force the docker runtime to use a specific exec driver     # 強制 docker 執行時使用指定執行驅動器   --fixed-cidr=""                        IPv4 subnet for fixed IPs (ex: 10.20.0.0/16)                                            this subnet must be nested in the bridge subnet (which is defined by -b or --bip)   -G, --group="docker"                   Group to assign the unix socket specified by -H when running in daemon mode                                            use '' (the empty string) to disable setting of a group   -g, --graph="/var/lib/docker"          Path to use as the root of the docker runtime              # 容器執行的根目錄路徑   -H, --host=[]                          The socket(s) to bind to in daemon mode                    # daemon 模式下 docker 指定繫結方式[tcp or 本地 socket]                                            specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd.   --icc=true                             Enable inter-container communication                       # 跨容器通訊   --insecure-registry=[]                 Enable insecure communication with specified registries (no certificate verification for HTTPS and enable HTTP fallback) (e.g., localhost:5000 or 10.20.0.0/16)   --ip="0.0.0.0"                         Default IP address to use when binding container ports     # 指定監聽地址,預設所有 ip   --ip-forward=true                      Enable net.ipv4.ip_forward                                 # 開啟轉發   --ip-masq=true                         Enable IP masquerading for bridge's IP range   --iptables=true                        Enable Docker's addition of iptables rules                 # 新增對應 iptables 規則   --mtu=0                                Set the containers network MTU                             # 設定網路 mtu                                            if no value is provided: default to the default route MTU or 1500 if no default route is available   -p, --pidfile="/var/run/docker.pid"    Path to use for daemon PID file                            # 指定 pid 檔案位置   --registry-mirror=[]                   Specify a preferred Docker registry mirror                     -s, --storage-driver=""                Force the docker runtime to use a specific storage driver  # 強制 docker 執行時使用指定儲存驅動   --selinux-enabled=false                Enable selinux support                                     # 開啟 selinux 支援   --storage-opt=[]                       Set storage driver options                                 # 設定儲存驅動選項   --tls=false                            Use TLS; implied by tls-verify flags                       # 開啟 tls   --tlscacert="/root/.docker/ca.pem"     Trust only remotes providing a certificate signed by the CA given here   --tlscert="/root/.docker/cert.pem"     Path to TLS certificate file                               # tls 證書檔案位置   --tlskey="/root/.docker/key.pem"       Path to TLS key file                                       # tls key 檔案位置   --tlsverify=false                      Use TLS and verify the remote (daemon: verify client, client: verify daemon) # 使用 tls 並確認遠端控制主機   -v, --version=false                    Print version information and quit                         # 輸出 docker 版本資訊 ```

<code>docker search</code>

```bash $ sudo docker search --help

Usage: docker search TERM

Search the Docker Hub for images # 從 Docker Hub 搜尋映象 --automated=false Only show automated builds   --no-trunc=false Don't truncate output   -s, --stars=0 Only displays with at least xxx stars ``` 例如:

```bash $ sudo docker search -s 100 ubuntu # 查詢 star 數至少為 100 的映象,找出只有官方映象 start 數超過 100,預設不加 s 選項找出所有相關 ubuntu 映象 NAME      DESCRIPTION                  STARS     OFFICIAL   AUTOMATED ubuntu    Official Ubuntu base image 425 [OK] ```  <code>docker info</code>

```bash $ sudo docker info Containers: 1 # 容器個數 Images: 22 # 映象個數 Storage Driver: devicemapper # 儲存驅動 Pool Name: docker-8:17-3221225728-pool  Pool Blocksize: 65.54 kB  Data file: /data/docker/devicemapper/devicemapper/data  Metadata file: /data/docker/devicemapper/devicemapper/metadata  Data Space Used: 1.83 GB  Data Space Total: 107.4 GB  Metadata Space Used: 2.191 MB  Metadata Space Total: 2.147 GB  Library Version: 1.02.84-RHEL7 (2014-03-26) Execution Driver: native-0.2 # 儲存驅動 Kernel Version: 3.10.0-123.el7.x86_64 Operating System: CentOS Linux 7 (Core) ``` <code> docker pull && docker push</code>

```bash $ sudo docker pull --help # pull 拉取映象 Usage: docker pull [OPTIONS] NAME[:TAG] Pull an image or a repository from the registry -a, --all-tags=false Download all tagged images in the repository $ sudo docker push # push 推送指定映象 Usage: docker push NAME[:TAG] Push an image or a repository to the registry ``` **例如:** ```bash $ sudo docker pull ubuntu # 下載官方 ubuntu docker 映象,預設下載所有 ubuntu 官方庫映象 $ sudo docker pull ubuntu:14.04 # 下載指定版本 ubuntu 官方映象 ``` ```bash $ sudo docker push 192.168.0.100:5000/ubuntu  # 推送映象庫到私有源[可註冊 docker 官方賬戶,推送到官方自有賬戶] $ sudo docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定映象到私有源 ``` <code>docker images:列出當前系統映象</code>

```bash $ sudo docker images --help

Usage: docker images [OPTIONS] [NAME] List images

  -a, --all=false Show all images (by default filter out the intermediate image layers)   # -a 顯示當前系統的所有映象,包括過渡層映象,預設 docker images 顯示最終映象,不包括過渡層映象 -f, --filter=[] Provide filter values (i.e. 'dangling=true') --no-trunc=false Don't truncate output   -q, --quiet=false Only show numeric IDs ``` 例如:

```bash $ sudo docker images # 顯示當前系統映象,不包括過渡層映象 $ sudo docker images -a # 顯示當前系統所有映象,包括過渡層映象 $ sudo docker images ubuntu # 顯示當前系統 docker ubuntu 庫中的所有映象 REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE ubuntu                     12.04               ebe4be4dd427 4 weeks ago         210.6 MB ubuntu                     14.04               e54ca5efa2e9 4 weeks ago         276.5 MB ubuntu                     14.04-ssh           6334d3ac099a 7 weeks ago         383.2 MB

``` <code>docker rmi: 刪除一個或者多個映象</code>

```bash $ sudo docker rmi --help

Usage: docker rmi IMAGE [IMAGE...] Remove one or more images

  -f, --force=false Force removal of the image    # 強制移除映象不管是否有容器使用該映象   --no-prune=false Do not delete untagged parents    # 不要刪除未標記的父映象 ``` [參考連結](http://www.docker.org.cn/dockerppt/106.html)