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)