Docker(12)- docker run 命令詳解


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

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

 

作用

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

 

語法格式

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

 

docker run 執行流程

  • 首先在指定鏡像上創建一個可寫的容器層
  • 然后使用指定的命令(COMMAND)啟動它
  • docker run 相當於執行了兩個 API:/containers/create、/containers/(id)/start

 

options 說明

option 作用
-i 以交互模式運行容器,通常與 -t 同時使用
-t 啟動容器后,為容器分配一個命令行,通常與 -i 同時使用
-v 目錄映射,容器目錄掛載到宿主機目錄,格式: <host目錄>:<容器目錄>
-d
守護進程,后台運行該容器
-p 指定端口映射,格式:主機(宿主)端口:容器端口
-P 隨機端口映射,容器內部端口隨機映射到主機的端口
-u 以什么用戶身份創建容器
--name "nginx-lb" 容器名字
-m, --memory bytes 設置容器使用內存最大值
-h, --hostname string 指定容器的 host name
--dns 8.8.8.8 指定容器 dns 服務器
-e username="ritchie" 設置環境變量
--restart Docker 重啟后,容器是否自動重啟
--privileged 容器內是否使用真正的 root 權限

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

 

-p 的三種寫法

docker run -p ip:主機端口:容器端口
docker run -p 主機端口:容器端口 (常用) 
docker run -p 容器端口

  

實際栗子

栗子一

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

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 界面,此時再去運行服務也是可以的

 

栗子八

以 root 權限創建容器,當進入容器之后,擁有 root 權限去執行命令

docker run -d --name jenkin2 --privileged=true jenkins/jenkins

雖然是擁有了 root 權限,但並不一定是 root 用戶身份,所以最好加 -uroot 指定 root 用戶身份

 

不加 --privileged 的小栗子

即使加了 -uroot ,指定了 root 用戶身份,但並不是真正擁有 root 權限

 

總結

  • -uroot:是給了 root 用戶身份,但並沒有真正的 root 權限
  • --privileged:真正讓當前用戶有了 root 權限
  • 若想要最高的權限,兩者可以結合使用

 

栗子九

該容器在 Docker 重啟后會自動啟動無需手動啟動

docker run -d --name jenkins2 --restart always jenkins/jenkins

  1. 創建了兩個容器:jenkins2、jenkins3
  2. 重啟 docker 服務
  3. 再次查看正在運行的容器,只有 jenkins2

 

退出容器

exit         #容器直接退出
ctrl +P +Q  #容器不停止退出     ---注意:這個很有用的操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM