Docker User Guide
文章目錄
- Docker User Guide:
- 1. 簡單啟用docker
- 2. 交互式啟用docker
- 3. 容器常用命令
- 4. 以后臺進程模式運行
- 5. docker的命令格式:docker + flags + command + arguments
- 6. 一般程序運行的簡單例子
- 7. 網(wǎng)絡(luò)端口快捷方式
- 8.查看WEB應(yīng)用程序日志
- 9.查看WEB應(yīng)用程序容器的進程
- 10.檢查WEB應(yīng)用程序
- 11. 停止WEB應(yīng)用容器
- 12. 重啟WEB應(yīng)用容器
- 13. 移除WEB應(yīng)用容器
- 14. 在主機上列出鏡像列表
- 15. 獲取一個新的鏡像
- 16. 查找鏡像
- 17. 拖取鏡像(Pull our image)
- 18. 網(wǎng)絡(luò)端口映射
- 19. 容器命名
- 20.拉取指定版本,刪除指定版本
Docker User Guide:
1. 簡單啟用docker
容器啟動了 Docker 創(chuàng)建的新的 Ubuntu 14.04 環(huán)境,并在容器內(nèi)執(zhí)行 /bin/echo 命令
$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world'2. 交互式啟用docker
指定了 docker run 命令,并啟動了 ubuntu:14.04 鏡像,添加了兩個新的標(biāo)識(參數(shù)flags): -t 和 -i 。-t 表示在新容器內(nèi)指定一個偽終端或終端,-i表示允許我們對容器內(nèi)的 (STDIN) 進行交互。
我們在容器內(nèi)還指定了一個新的命令: /bin/bash 。這將在容器內(nèi)啟動 bash shell
$ sudo docker run -t -i ubuntu:14.04 /bin/bash3. 容器常用命令
docker ps 列出容器docker logs 顯示容器的標(biāo)準(zhǔn)輸出docker stop 停止正在運行的容器4. 以后臺進程模式運行
$ sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage $ sudo docker logs insane_babbage hello world hello world hello world $ sudo docker stop insane_babbage5. docker的命令格式:docker + flags + command + arguments
Docker 的每一項操作都是通過命令行來實現(xiàn)的,而每一條命令行都可以使用一系列的標(biāo)識(flags)和參數(shù)。
# Usage: [sudo] docker [flags] [command] [arguments] .. # Example: $ docker run -i -t ubuntu /bin/bash6. 一般程序運行的簡單例子
我們已知是 -d 標(biāo)識是讓 docker 容器在后臺運行。新的 -P 標(biāo)識通知 Docker 將容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機上。
$ sudo docker run -d -P training/webapp python app.py docker ps 命令中指定了新的標(biāo)識 -l。這樣組合的 docker ps 命令會返回最后啟動容器的詳細(xì)信息。 Docker 開放了 5000 端口(默認(rèn) Python Flask 端口)映射到主機端口 49155 上 $ sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse一般的接口方式:外部端口:內(nèi)部端口
$ sudo docker run -d -p 5000:5000 training/webapp python app.py7. 網(wǎng)絡(luò)端口快捷方式
使用 docker ps 命令來會返回端口的映射是一種比較笨拙的方法。為此,Docker 提供了一種快捷方式: docker port ,使用 docker port 可以查看指定 (ID或者名字的)容器的某個確定端口映射到宿主機的端口號。
docker port 1a99f144e61769608d6aabfe3776e313995baed36e758be887092571b8e1633e 5000 0.0.0.0:327698.查看WEB應(yīng)用程序日志
讓我們看看我們的容器中的應(yīng)用程序都發(fā)生了什么,這里我們使用學(xué)習(xí)到的另一個命令 docker logs 來查看。
$ sudo docker logs -f nostalgic_morse * Running on http://0.0.0.0:5000/ 10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 - 10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -這次我們添加了一個 -f 標(biāo)識。 docker log 命令就像使用 tail -f 一樣來輸出容器內(nèi)部的標(biāo)準(zhǔn)輸出。
9.查看WEB應(yīng)用程序容器的進程
我們除了可以查看容器日志,我們還可以使用 docker top 來查看容器內(nèi)部運行的進程:
$ sudo docker top nostalgic_morse PID USER COMMAND 854 root python app.py10.檢查WEB應(yīng)用程序
最后,我們可以使用 docker inspect 來查看Docker的底層信息。它會返回一個 JSON 文件記錄著 Docker 容器的配置和狀態(tài)信息。
$ sudo docker inspect nostalgic_morse來讓我們看下JSON的輸出。
[{"ID": "bc533791f3f500b280a9626688bc79e342e3ea0d528efe3a86a51ecb28ea20","Created": "2014-05-26T05:52:40.808952951Z","Path": "python","Args": ["app.py"],"Config": {"Hostname": "bc533791f3f5","Domainname": "","User": "", . . .我們也可以針對我們想要的信息進行過濾,例如,返回容器的 IP 地址,如下:
$ sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' nostalgic_morse 172.17.0.511. 停止WEB應(yīng)用容器
現(xiàn)在,我們的WEB應(yīng)用程序處于工作狀態(tài)。現(xiàn)在我們通過使用 docker stop 命令來停止名為 nostalgic_morse 的容器:
$ sudo docker stop nostalgic_morse nostalgic_morse現(xiàn)在我們使用 docker ps 命令來檢查容器是否停止了。
$ sudo docker ps -l12. 重啟WEB應(yīng)用容器
哎呀!剛才你停止了另一個開發(fā)人員所使用的容器。這里你現(xiàn)在有兩個選擇:您可以創(chuàng)建一個新的容器或者重新啟動舊的。讓我們啟動我們之前的容器:
$ sudo docker start nostalgic_morse nostalgic_morse13. 移除WEB應(yīng)用容器
你的同事告訴你他們已經(jīng)完成了在容器上的工作,不在需要容器了。讓我們使用 docker rm 命令來刪除它:
$ sudo docker rm nostalgic_morse Error: Impossible to remove a running container, please stop it first or use -f 2014/05/24 08:12:56 Error: failed to remove one or more containers發(fā)生了什么?實際上,我們不能刪除正在運行的容器。這避免你意外刪除了正在使用并且運行中的容器。讓我們先停止容器,然后再試一試刪除容器。
$ sudo docker stop nostalgic_morse nostalgic_morse $ sudo docker rm nostalgic_morse nostalgic_morse14. 在主機上列出鏡像列表
$ sudo docker images $ sudo docker run -t -i ubuntu:12.04 /bin/bash如果你不指定一個鏡像的版本標(biāo)簽,例如你只使用 Ubuntu,Docker 將默認(rèn)使用 Ubuntu:latest 鏡像。
15. 獲取一個新的鏡像
Docker 的特點之一是人們創(chuàng)建了各種各樣的 Docker 鏡像。而且這些鏡像已經(jīng)被上傳到了 Docker Hub 。我們可以從 Docker Hub 網(wǎng)站來搜索鏡像。
$ sudo docker search sinatra NAME DESCRIPTION STARS OFFICIAL AUTOMATED training/sinatra Sinatra training image 0 [OK] marceldegraaf/sinatra Sinatra test app 0 mattwarren/docker-sinatra-demo 0 [OK] luisbebop/docker-sinatra-hello-world 0 [OK] bmorearty/handson-sinatra handson-ruby + Sinatra for Hands on with D... 0 subwiz/sinatra 0 bmorearty/sinatra NeuroDebian provides neuroscience research s… 5616. 查找鏡像
Docker 的特點之一是人們創(chuàng)建了各種各樣的 Docker 鏡像。而且這些鏡像已經(jīng)被上傳到了 Docker Hub 。我們可以從 Docker Hub 網(wǎng)站來搜索鏡像。
$ sudo docker search sinatra NAME DESCRIPTION STARS OFFICIAL AUTOMATED training/sinatra Sinatra training image 0 [OK] marceldegraaf/sinatra Sinatra test app 0 mattwarren/docker-sinatra-demo 0 [OK] luisbebop/docker-sinatra-hello-world 0 [OK] bmorearty/handson-sinatra handson-ruby + Sinatra for Hands on with D... 0 subwiz/sinatra 0 bmorearty/sinatra 0 . . .17. 拖取鏡像(Pull our image)
我們已經(jīng)確定了要使用的鏡像, training/sinatra , 現(xiàn)在我們使用 docker pull 命令來下載這個鏡像。
$ sudo docker pull training/sinatra現(xiàn)在團隊成員可以在自己的容器內(nèi)使用這個鏡像了。
$ sudo docker run -t -i training/sinatra /bin/bash root@a8cb6ce02d85:/#18. 網(wǎng)絡(luò)端口映射
在使用docker部分,我們創(chuàng)建了一個python應(yīng)用的容器。
$ sudo docker run -d -P training/webapp python app.py注:容器有一個內(nèi)部網(wǎng)絡(luò)和IP地址(在使用Docker部分我們使用docker inspect命令顯示容器的IP地址)。Docker可以有各種網(wǎng)絡(luò)配置方式。你可以再這里學(xué)到更多docker網(wǎng)絡(luò)信息。
我們使用-P標(biāo)記創(chuàng)建一個容器,將容器的內(nèi)部端口隨機映射到主機的高端口49000到49900。這時我們可以使用docker ps來看到端口5000綁定主機端口49155。
$ sudo docker ps nostalgic_morse CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse我們也可以使用-p標(biāo)識來指定容器端口綁定到主機端口
$ sudo docker run -d -p 5000:5000 training/webapp python app.py我們看這為什么不是一個好的主意呢?因為它限制了我們?nèi)萜鞯囊粋€端口。
我們還有很多設(shè)置-p標(biāo)識的方法。默認(rèn)-p標(biāo)識會綁定本地主機上的指定端口。并且我們可以指定綁定的網(wǎng)絡(luò)地址。舉例設(shè)置localhost
$ sudo docker run -d -p 127.0.0.1:5001:5002 training/webapp python app.py這將綁定容器內(nèi)部5002端口到主機的localhost或者127.0.0.1的5001端口。
如果要綁定容器端口5002到宿主機動態(tài)端口,并且讓localhost訪問,我們可以這樣做:
$ sudo docker run -d -p 127.0.0.1::5002 training/webapp python app.py我們也可以綁定UDP端口,我們可以在后面添加/udp,舉例:
$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py我們可以使用docker port快捷方式來綁定我們的端口,這有助于向我們展示特定的端口。例如我們綁定localhost,如下是docker port輸出:
$ docker port nostalgic_morse 5000 127.0.0.1:49155注:-p可以使用多次配置多個端口。
19. 容器命名
執(zhí)行此連接需要依靠你的docker的名字,這里我們可以看到當(dāng)我們創(chuàng)建每一個容器的時候,它都會自動被命名。事實上我們已經(jīng)熟悉了老的nostalgic_morse指南。你也可以自己命名容器。這種命名提供了兩個有用的功能:
- 1.給容器特定的名字使你更容易記住他們,例如:命名web應(yīng)用程序為web容器。
- 2.它為docker提供一個參考,允許其他容器引用,舉例連接web容器到db容器。
你可以使用--name標(biāo)識來命名容器,舉例:
$ sudo docker run -d -P --name web training/webapp python app.py我們可以看到我們啟動了的容器,就是我們使用--name標(biāo)識命名為web的容器。我們可以使用docker ps命令來查看容器名稱。
$ sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aed84ee21bde training/webapp:latest python app.py 12 hours ago Up 2 seconds 0.0.0.0:49154->5000/tcp web我們也可以使用docker inspect來返回容器名字。
$ sudo docker inspect -f "{{ .Name }}" aed84ee21bde /web20.拉取指定版本,刪除指定版本
docker pull mongo:3.2.4 docker rmi e89d0c320043總結(jié)
以上是生活随笔為你收集整理的Docker User Guide的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: D3js(五):tooltips
- 下一篇: Activiti的使用技巧