Docker(12)- docker run 命令詳解

如果你還想從頭學起 Docker,可以看看這個系列的文章哦!

//www.cnblogs.com/poloyy/category/1870863.html

 

作用

創建一個新的容器並運行一個命令

 

語法格式

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • 備註:其實跟 docker create 一樣的語法格式,只不過可以運行容器甚至進入容器內部
  • COMMAND :需要在容器內執行的命令

 

options 說明

option 作用
-i 以交互模式運行容器,通常與 -t 同時使用
-t 啟動容器後,為容器分配一個命令行,通常與 -i 同時使用
-v 目錄映射,容器目錄掛載到宿主機目錄,格式: <host目錄>:<容器目錄>
-d
守護進程,後台運行該容器
-p 指定埠映射,格式:主機(宿主)埠:容器埠
-P 隨機埠映射,容器內部埠隨機映射到主機的埠
–name “nginx-lb” 容器名字
-m, –memory bytes 設置容器使用記憶體最大值
-h, –hostname string 指定容器的 host name
–dns 8.8.8.8 指定容器 dns 伺服器
-e username=”ritchie” 設置環境變數

備註:其實還有好多 options,但是目前還沒用到,要用的時候再寫吧

 

實際栗子

栗子一

使用鏡像 tomcat:7  ,容器命名為 tomcat77

docker run --name tomcat7 tomcat:7

 

這樣運行,會直接將容器運行日誌列印出來,所以一般都需要加 -d,否則無法繼續敲其他命令

 

docker ps 看看容器

其實列印的日誌就是 catalina.sh run 命令運行之後的日誌

 

栗子二

  • 使用鏡像 tomcat:7 
  • 以後台模式啟動一個容器
  • 容器名字自定義為 tomcat7
docker run -d --name tomcat7 tomcat:7

創建容器之後還能執行其他命令,這樣方便很多

 

栗子三

  • 使用鏡像 tomcat:7 
  • 以後台模式啟動一個容器
  • 將容器的 8080 埠映射到主機的隨機埠
  • 容器名字自定義為 tomcat9999
docker run -d -P --name tomcat9999 tomcat:7

 

栗子四

  • 使用鏡像 tomcat:7 
  • 以後台模式啟動一個容器
  • 將容器的 8080 埠映射到主機的 9999 埠
  • 容器名字自定義為 tomcat7
docker run -d -p 9999:8080 --name tomcat7 tomcat:7

可以看到 PORTS 一列,主機的 9999 埠指向了容器的 8888 埠

 

栗子五

  • 使用鏡像 tomcat:7 
  • 以後台模式啟動一個容器
  • 將容器的 8080 埠映射到主機的 9999 埠
  • 容器名字自定義為 tomcat7
  • 主機的目錄 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps 
  • 以後直接在主機的 webapps 目錄上傳 war 包,就能在瀏覽器訪問對應的項目
 docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7

 

栗子六

  • 使用鏡像 tomcat:7  
  • 以後台模式啟動一個容器
  • 將容器的 8080 埠映射到主機的 111.20.72.43:8888 埠
  • 容器名字自定義為 tomcat77
  • 主機的目錄 /usr/local/tomcat/webapp 映射到容器 /usr/local/tomcat/webapps  
  • 啟動容器後,在容器內執行 bash 命令
  • 注意:這裡不加 -it 的話,容器是無法再啟動的,加上才能啟動容器並執行 bash 命令
docker run -d -p 111.20.72.43:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat77 tomcat:7 bash

 

栗子七

  • 容器 8080 埠映射到主機的 1111 埠
  •  -it 以交互模式啟動一個容器,在容器內執行 bash 命令
  • 注意:如果這裡加了 -d  參數,則不會進入容器的 CLI 介面;如果不加 bash 命令,則會執行 tomcat 容器本身自動會執行的命令( catalina.sh run ),也會進不了 CLI 介面,因為會列印一堆日誌
docker run -it -p 1111:8080 tomcat:7 bash

 

不加 bash的執行結果

 

加 bash的執行結果

順利進入容器的 CLI 介面,此時再去運行服務也是可以的

 

為什麼 docker run 結尾要加 bash 命令?

  • 當啟動服務後,掛載的目錄是無法進行 CURD 操作的,但若在容器內關閉服務會退出容器的 CLI 介面
  • 所以若需要 CURD 掛載目錄的話,操作完後再手動開啟服務