docker-1.12 run命令執行以及引數詳解
以上幾篇內容,我們基本瞭解了docker的image,container,dockerfile的一些資訊
這一篇開始,我們要進入正題了,也就是正式開始入門的我們docker,和使用它。
首先,我們要介紹的第一個命令,也是docker最核心的命令:docker run
我先把dockerrun會碰到的引數一一跟大家解釋一下,讓大家先了解自己需要的是什麼。(我會把常用的列出來)
首先看下命令格式:
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d, --detach=false 指定容器運行於前臺還是後臺,預設為false -i, --interactive=false 開啟STDIN,用於控制檯互動 -t, --tty=false 分配tty裝置,該可以支援終端登入,預設為false -u, --user="" 指定容器的使用者 -a, --attach=[] 登入容器(必須是以docker run -d啟動的容器) -w, --workdir="" 指定容器的工作目錄 -c, --cpu-shares=0 設定容器CPU權重,在CPU共享場景使用 -e, --env=[] 指定環境變數,容器中可以使用該環境變數 -m, --memory="" 指定容器的記憶體上限 -P, --publish-all=false 指定容器暴露的埠 -p, --publish=[] 指定容器暴露的埠 -h, --hostname="" 指定容器的主機名 -v, --volume=[] 給容器掛載儲存卷,掛載到容器的某個目錄 --volumes-from=[] 給容器掛載其他容器上的卷,掛載到容器的某個目錄 --cap-add=[] 新增許可權,許可權清單詳見:http://linux.die.net/man/7/capabilities --cap-drop=[] 刪除許可權,許可權清單詳見:http://linux.die.net/man/7/capabilities --cidfile="" 執行容器後,在指定檔案中寫入容器PID值,一種典型的監控系統用法 --cpuset="" 設定容器可以使用哪些CPU,此引數可以用來容器獨佔CPU --device=[] 新增主機裝置給容器,相當於裝置直通 --dns=[] 指定容器的dns伺服器 --dns-search=[] 指定容器的dns搜尋域名,寫入到容器的/etc/resolv.conf檔案 --entrypoint="" 覆蓋image的入口點 --env-file=[] 指定環境變數檔案,檔案格式為每行一個環境變數 --expose=[] 指定容器暴露的埠,即修改映象的暴露埠 --link=[] 指定容器間的關聯,使用其他容器的IP、env等資訊 --lxc-conf=[] 指定容器的配置檔案,只有在指定--exec-driver=lxc時使用 --name="" 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字 --net="bridge" 容器網路設定: bridge 使用docker daemon指定的網橋 host //容器使用主機的網路 container:NAME_or_ID >//使用其他容器的網路,共享IP和PORT等網路資源 none 容器使用自己的網路(類似--net=bridge),但是不進行配置 --privileged=false 指定容器是否為特權容器,特權容器擁有所有的capabilities --restart="no" 指定容器停止後的重啟策略: no:容器退出時不重啟 on-failure:容器故障退出(返回值非零)時重啟 always:容器退出時總是重啟 --rm=false 指定容器停止後自動刪除容器(不支援以docker run -d啟動的容器) --sig-proxy=true 設定由代理接受並處理訊號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
以上都是比較常用到的一些run的引數。
那麼我們來舉一些常用例子。
假設我們用:
centos6.8(純淨的系統,啟動後沒有執行任何東西),
centos6.8-mysql(包含mysql資料庫),
centos6.8-httpd(包含php和apache伺服器),
三個映象。
案例1、執行一個簡單的容器,其中需要包含控制檯管理
[[email protected] ~]#docker run -i -t centos6.8
這個容器一執行就會進入到預設的執行緒”/bin/bash”,直接進入控制檯操作。當退出控制後後,容器會被終止。
案例2、執行一個在後臺執行的容器,同時,還能用控制檯管理
[[email protected] ~]#docker run -i -t -d centos6.8
這個容器一執行,會自動執行預設的執行緒”/bin/bash”,但是不會讓你馬上進入控制檯操作。將會在後臺執行,用docker ps 可以看到當前執行的控制檯。進入容器可是使用docker attach“container name or id”。
案例3、執行一個帶命令在後臺不斷執行的容器,不直接展示容器內部資訊
[[email protected] ~]#docker run -d centos6.8 ping www.docker.com 這個容器將永久在後臺執行,因為ping這個執行緒不會停止。除非你停止了ping的執行緒。
案例4、執行一個在後臺不斷執行的容器,同時帶有命令,程式被終止後還能重啟繼續跑,還能用控制檯管理
[[email protected] ~]#docker run -d --restart=always centos6.8 ping www.docker.com 這個容器將永久在後臺執行,因為ping這個執行緒不會停止。如果你把ping這個執行緒終止了,那麼容器會重啟繼續執行ping功能
案例5、我們需要為容器指定一個名稱
[[email protected] ~]#docker run -d --name=server-dbcentos6.8-mysql /usr/bin/mysql_safe -d 這時候我們這個容器的名稱為server-db,同時激活了資料庫mysql的後臺執行緒,讓它不斷的跑,這時候我們的容器也不會被關閉。
案例6、我們需要讓server-http容器連線server-db容器
[[email protected] ~]#docker run -d --name=server-http --link=server-db centos6.8-httpd /usr/bin/httpd --DFOREGROUND 這時候,我們執行了apache的伺服器讓它不斷的在後臺執行,同時,在php裡配置mysql的伺服器名稱為”server-db”,直接用server-db命名就可以了。不需要輸入ip地址之類的。我們的server-http指定連線了server-db。server-db在server-http裡會被當做一個DNS解析來獲取相應的連線ip。
案例7、我們要將server-db,server-http的埠暴露出去,讓大家訪問
[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 centos6.8-mysql /usr/bin/mysql_safe –d 這時候我們指定了伺服器宿主機的3306埠對映到容器的3306埠,暴露出去。
[[email protected] ~]#docker run -d --name=server-http --link=server-db -p 8080:80centos6.8-httpd /usr/bin/httpd --DFOREGROUND
這時候我們指定了伺服器宿主機的8080埠對映到容器80埠,暴露出去。
案例8、我們要將宿主機的資料庫目錄/server/mysql-data掛載到server-db上
[[email protected] ~]#docker run -d --name=server-db -p 3306:3306 -v /server/mysql-data:/mysql-data centos6.8-mysql /usr/bin/mysql_safe –d 這時候,你會發現,在server-db根目錄下你會發現有一個新的資料夾mysql-data,同時裡面的檔案內容和宿主機下/server/mysql-data一樣。
案例9、我們希望一個容器在它的程序結束後,立馬自動刪除。
[[email protected] ~]#docker run -it --rm centos6.8 這時候我們進入了容器的控制檯,當我們在容器內部exit退出控制檯的時候,容器將被終止,同時自動刪除。
以上的一些案例是我們常用的一些引數和使用方法。希望能幫到大家。 --------------------- 作者:lynk-coder 來源:CSDN 原文:https://blog.csdn.net/kunloz520/article/details/53839237?utm_source=copy 版權宣告:本文為博主原創文章,轉載請附上博文連結!