Docker 容器使用
一、Docker 客戶端
docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。
root@iZ235mi4a64Z:~# docker Usage: docker COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: config Manage Docker configs container Manage containers image Manage images ...
可以通過命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
例如要查看 docker stats 指令的具體使用方法:
root@iZ235mi4a64Z:~# docker stats --help Usage: docker stats [OPTIONS] [CONTAINER...] Display a live stream of container(s) resource usage statistics Options: -a, --all Show all containers (default shows just running) --format string Pretty-print images using a Go template --no-stream Disable streaming stats and only pull the first result --no-trunc Do not truncate output
二、運行一個web應用
前面我們運行的容器並沒有一些什么特別的用處。接下來讓我們嘗試使用 docker 構建一個 web 應用程序。我們將在docker容器中運行一個 Python Flask 應用來運行一個web應用。
第一次使用,本地是沒有鏡像的,所有要下載遠程倉庫鏡像

參數說明:
-
-d:讓容器在后台運行。
-
-P:將容器內部使用的網絡端口映射到我們使用的主機上。
root@iZ235mi4a64Z:~# docker run -d -P training/webapp python app.py Unable to find image 'training/webapp:latest' locally latest: Pulling from training/webapp e190868d63f8: Pull complete 909cd34c6fd7: Pull complete 0b9bfabab7c1: Pull complete a3ed95caeb02: Pull complete 10bbbc0fc0ff: Pull complete fca59b508e9f: Pull complete e7ae2541b15b: Pull complete 9dd97ef58ce9: Pull complete a4c1b0cb7af7: Pull complete Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d Status: Downloaded newer image for training/webapp:latest d83ffc50991fabc9aedee521be91329048bf0f17b4ca3f90cf20b63209cfbdd2 root@iZ235mi4a64Z:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d83ffc50991f training/webapp "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:32768->5000/tcp adoring_jackson
下載好后會默認啟動該容器
三、查看 WEB 應用容器
使用 docker ps 來查看我們正在運行的容器
root@iZ235mi4a64Z:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d83ffc50991f training/webapp "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:32768->5000/tcp adoring_jackson
Docker 開放了 5000 端口(默認 Python Flask 端口)映射到主機端口 32768 上。 這時我們可以通過瀏覽器訪問WEB應用

我們也可以指定 -p 標識來綁定指定端口
root@iZ235mi4a64Z:~# docker run -d -p 5000:5000 training/webapp python app.py ebdeda041b1e97850337c8a514dd7163db740a8eb82e8b7270402095a6368fa2 root@iZ235mi4a64Z:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebdeda041b1e training/webapp "python app.py" 5 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp condescending_austin d83ffc50991f training/webapp "python app.py" 16 minutes ago Up 16 minutes 0.0.0.0:32768->5000/tcp adoring_jackson root@iZ235mi4a64Z:~# curl http://127.0.0.1:5000
Hello world!
容器內部的 5000 端口映射到我們本地主機的 5000 端口上
四、網絡端口的快捷方式
通過docker ps 命令可以查看到容器的端口映射,docker還提供了另一個快捷方式:docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某個確定端口映射到宿主機的端口號。
上面創建的web應用容器ID為:d83ffc50991f 名字為:adoring_jackson
可以使用docker port 7a38a1ad55c6 或docker port determined_swanson來查看容器端口的映射情況
root@iZ235mi4a64Z:~# docker port d83ffc50991f 5000/tcp -> 0.0.0.0:32768
root@iZ235mi4a64Z:~# docker port adoring_jackson 5000/tcp -> 0.0.0.0:32768
五、查看WEB應用程序日志
docker logs [ID或者名字] 可以查看容器內部的標准輸出。
root@iZ235mi4a64Z:~# docker logs -f d83ffc50991f * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.0.1 - - [05/Dec/2017 02:00:32] "GET / HTTP/1.1" 200 -
192.168.0.1 - - [05/Dec/2017 02:01:55] "GET / HTTP/1.1" 200 -
192.168.0.1 - - [05/Dec/2017 02:02:11] "GET / HTTP/1.1" 200 -
192.168.0.1 - - [05/Dec/2017 02:02:18] "GET / HTTP/1.1" 200 -
192.168.0.1 - - [05/Dec/2017 02:02:23] "GET / HTTP/1.1" 200 -
-f:讓 dokcer logs 像使用 tail -f 一樣來輸出容器內部的標准輸出。
從上面,可以看到應用程序使用的是 5000 端口並且能夠查看到應用程序的訪問日志。
六、查看WEB應用程序容器的進程
可以使用 docker top 來查看容器內部運行的進程
root@iZ235mi4a64Z:~# docker top 1c0efc43c0e5 UID PID PPID C STIME TTY TIME CMD root 25066 25050 0 10:19 ? 00:00:00 python app.py
七、檢查WEB應用程序
使用 docker inspect 來查看Docker的底層信息。它會返回一個 JSON 文件記錄着 Docker 容器的配置和狀態信息。
root@iZ235mi4a64Z:~# docker inspect 1c0efc43c0e5 [ { "Id": "1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764", "Created": "2017-12-05T02:19:12.557365261Z", "Path": "python", "Args": [ "app.py" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 25066, "ExitCode": 0, "Error": "", "StartedAt": "2017-12-05T02:19:12.913440347Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557", "ResolvConfPath": "/var/lib/docker/containers/1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764/resolv.conf", ...
八、停止、重啟WEB應用容器
root@iZ235mi4a64Z:~# docker stop relaxed_jones relaxed_jones root@iZ235mi4a64Z:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@iZ235mi4a64Z:~# docker start relaxed_jones relaxed_jones root@iZ235mi4a64Z:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c0efc43c0e5 training/webapp "python app.py" 6 minutes ago Up 2 seconds 0.0.0.0:32770->5000/tcp relaxed_jones
docker ps -l 查詢最后一次創建的容器:
root@iZ235mi4a64Z:~# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c0efc43c0e5 training/webapp "python app.py" 6 minutes ago Up 47 seconds 0.0.0.0:32770->5000/tcp relaxed_jones
九、移除WEB應用容器
使用 docker rm 命令來刪除不需要的容器,刪除容器時,容器必須是停止狀態,否則會報如下錯誤
root@iZ235mi4a64Z:~# docker rm relaxed_jones Error response from daemon: You cannot remove a running container 1c0efc43c0e5207b6eaa63270834562a5193820436ba80de3fdd8dfa1b77c764. Stop the container before attempting removal or force remove
先停止后刪除
root@iZ235mi4a64Z:~# docker stop relaxed_jones relaxed_jones root@iZ235mi4a64Z:~# docker rm relaxed_jones relaxed_jones
