
簡(jiǎn)介
Docker是一種流行的容器化平臺(tái),用于構(gòu)建、分發(fā)和運(yùn)行應(yīng)用程序。其中一個(gè)最基本且重要的Docker命令是docker run,用于創(chuàng)建和啟動(dòng)容器。本文將詳細(xì)解析docker run命令的用途、參數(shù)和示例,幫助您全面掌握創(chuàng)建和啟動(dòng)容器的過(guò)程。
docker run
在Docker中,容器是運(yùn)行應(yīng)用程序的獨(dú)立環(huán)境。docker run命令用于根據(jù)指定的鏡像創(chuàng)建和啟動(dòng)一個(gè)新的容器。下面是docker run命令的基本語(yǔ)法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
注1:docker run與docker create語(yǔ)法格式一樣,只是docker run會(huì)創(chuàng)建并運(yùn)行容器甚至可以進(jìn)入容器內(nèi)部
注2:COMMAND需要在容器內(nèi)執(zhí)行的命令
docker run 執(zhí)行流程
第一步,在指定鏡像上創(chuàng)建一個(gè)可寫(xiě)的容器層
第二步,使用指定的命令(COMMAND)啟動(dòng)它
簡(jiǎn)而言之,docker run 相當(dāng)于執(zhí)行了兩個(gè) API:/contAIners/create、/containers/(id)/start
options參數(shù)說(shuō)明
docker run命令有很多的參數(shù),很多參數(shù)都擁有重要的作用,這里我們介紹一下最常用的部分參數(shù)
- -i,以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用
- -t,啟動(dòng)容器后,為容器分配一個(gè)命令行,通常與-i同時(shí)使用
- -v,目錄映射,容器目錄掛載到宿主機(jī)目錄,格式: <host目錄>:<容器目錄>
- -d,守護(hù)進(jìn)程,后臺(tái)運(yùn)行該容器
- -p,指定端口映射,格式:主機(jī)(宿主)端口:容器端口
- -P,隨機(jī)端口映射,容器內(nèi)部端口隨機(jī)映射到主機(jī)的端口
- -u,以什么用戶(hù)身份創(chuàng)建容器
- --name "Nginx-lb",容器名字
- -m, --memory bytes,設(shè)置容器使用內(nèi)存最大值
- -h, --hostname string,指定容器的 host name
- --DNS 8.8.8.8,指定容器 dns 服務(wù)器
- -e username="ritchie",設(shè)置環(huán)境變量
- --restart,Docker 重啟后,容器是否自動(dòng)重啟
- --privileged,容器內(nèi)是否使用真正的 root 權(quán)限
注:-p參數(shù)的用法
docker run -p ip:主機(jī)端口:容器端口
docker run -p 主機(jī)端口:容器端口 (常用)
docker run -p 容器端口
使用示例
- 使用Tomcat7鏡像,創(chuàng)建名為tomcat_hogwarts的容器,如下:
docker run --name tomcat_hogwarts tomcat:7
這樣運(yùn)行,會(huì)直接將容器運(yùn)行日志打印出來(lái),所以一般都需要加 -d參數(shù),否則無(wú)法繼續(xù)敲其他命令

- 使用tomcat7鏡像,創(chuàng)建名為tomcat_hogwarts01的容器,并使用-d參數(shù),讓其后臺(tái)運(yùn)行,命令如下:
docker run -d --name tomcat_hogwarts01 tomcat:7
運(yùn)行如下圖:

通過(guò)-d參數(shù)創(chuàng)建容器,不影響我們運(yùn)行其他命令。
- 使用鏡像 tomcat:7 以后臺(tái)模式啟動(dòng)一個(gè)容器將容器的 8080 端口映射到主機(jī)的隨機(jī)端口,命令如下:
docker run -d -P --name tomcat_muller tomcat:7

- 使用鏡像 tomcat:7 以后臺(tái)模式啟動(dòng)一個(gè)容器將容器的 8080 端口映射到主機(jī)的 8888 端口,命令如下:
docker run -d -p 8888:8080 --name tomcat_salah tomcat:7

可以看到 PORTS 一列,主機(jī)的 8888 端口指向了容器的 8080 端口。
- 使用鏡像 tomcat:7 ,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 8080 端口映射到主機(jī)127.0.0.1:8888 端口容器名字自定義為 tomcat77主機(jī)的目錄 /usr/local/tomcat/webApp 映射到容器/usr/local/tomcat/webapps 啟動(dòng)容器后,在容器內(nèi)執(zhí)行 bash 命令,命令如下:
docker run -d -p 127.0.0.1:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat77 tomcat:7 bash

- 容器 8080 端口映射到主機(jī)的 1111 端口-it 以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行 bash 命令
注:如果這里加了-d 參數(shù),則不會(huì)進(jìn)入容器的 CLI 界面;如果不加 bash 命令,則會(huì)執(zhí)行 tomcat 容器本身自動(dòng)會(huì)執(zhí)行的命令( catalina.sh run ),也會(huì)進(jìn)不了 CLI 界面,因?yàn)闀?huì)打印一堆運(yùn)行日志
docker run -it -p 1111:8080 tomcat:7 bash

- 以 root 權(quán)限創(chuàng)建容器,當(dāng)進(jìn)入容器之后,擁有 root 權(quán)限去執(zhí)行命令
# 創(chuàng)建容器
docker run -d --name jenkin_hogwarts --privileged=true jenkins/jenkins
# 進(jìn)入容器
docker exec -it jenkin_hogwarts bash

不加 --privileged的例子
# 創(chuàng)建容器
docker run -d --name jenkins_muller jenkins/jenkins
# 進(jìn)入容器
docker exec -it -uroot jenkins_muller bash

注:
- -uroot:是給了 root 用戶(hù)身份,但并沒(méi)有真正的 root 權(quán)限
- --privileged:真正讓當(dāng)前用戶(hù)有了 root 權(quán)限
- 設(shè)置容器自動(dòng)重啟
docker run -d --name jenkins_salah --restart always jenkins/jenkins
- 退出容器
exit #容器直接退出
ctrl +P +Q #容器不停止退出 ---注意:這個(gè)很有用的操作
總結(jié)
docker run命令是Docker中最基本且重要的命令之一,用于創(chuàng)建和啟動(dòng)容器。通過(guò)了解和靈活使用不同的選項(xiàng)和參數(shù),可以定制容器的名稱(chēng)、端口映射、數(shù)據(jù)持久化、環(huán)境變量等設(shè)置。希望本文對(duì)大家理解和使用docker run命令有所幫助,并能夠順利創(chuàng)建和啟動(dòng)自己的Docker容器!






