一、run
?創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令
語(yǔ)法格式
docker run [OPTIONS] IMAGE [COMMAND][ARG...]
備注:
其實(shí)跟docker create一樣的語(yǔ)法格式,只不過可以運(yùn)行容器甚至進(jìn)入容器內(nèi)部
COMMAND: 需要在容器內(nèi)執(zhí)行的命令
docker run執(zhí)行流程
首先在指定鏡像上創(chuàng)建一個(gè)可寫的容器層
然后使用指定的命令(command)啟動(dòng)它
docker run 相當(dāng)于執(zhí)行力兩個(gè)API /containers/create 、 ../start
1、options說明
OPtion | 作用 |
---|---|
-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 | 以什么用戶身份創(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)限 |
2、-p的三種寫法
docker run -p ip:主機(jī)端口:容器端口
docker run -p 主機(jī)端口:容器端口(常用)
docker run -p 容器端口
3、實(shí)例1
使用鏡像 tomcat:7 容器命名為tomcat7
[root@localhost Fancy_Illusion]# docker run --name tomcat7 tomcat:7
Unable to find image 'tomcat:7' locally
7: Pulling from library/tomcat
0bc3020d05f1: Pull complete
a110e5871660: Pull complete
83d3c0fa203a: Pull complete
a8fd09c11b02: Pull complete
96ebf1506065: Pull complete
26b72ffca293: Pull complete
0bffa2ea17aa: Pull complete
d880cebcc7a6: Pull complete
d19ab8039b36: Pull complete
5057492dc495: Pull complete
Digest: sha256:f7d37d248d0eacec1e5995736234c9c22155626fcb27ea3ead13b9db24e698f7
Status: Downloaded newer image for tomcat:7
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name: Apache Tomcat/7.0.109
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built: Apr 22 2021 18:43:38 UTC
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version number: 7.0.109.0
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Linux
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 3.10.0-1160.el7.x86_64
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: amd64
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: /usr/local/openjdk-8/jre
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 1.8.0_292-b10
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor: Oracle Corporation
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE: /usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME: /usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dignore.endorsed.dirs=
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: Loaded Apache Tomcat Native library [1.2.28] using APR version [1.6.5].
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized [OpenSSL 1.1.1d 10 Sep 2019]
Sep 13, 2022 6:58:49 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 667 ms
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.109
Sep 13, 2022 6:58:49 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8080"]
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 65 ms
這樣運(yùn)行,會(huì)直接將容器運(yùn)行日志打印出來,所以一般都需要加 -d,否則無法繼續(xù)敲其他命令
[root@localhost Fancy_Illusion]# docker run -d --name tomcat8 tomcat:8
Unable to find image 'tomcat:8' locally
8: Pulling from library/tomcat
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
77b694f83996: Pull complete
b7c26350ecc2: Pull complete
7365b3b02e1b: Pull complete
Digest: sha256:421c2a2c73f3e339c787beaacde0f7bbc30bba957ec653d41a77d08144c6a028
Status: Downloaded newer image for tomcat:8
dadbab601c2d02a6cd04abf186675ff9c85fc3f8b0989b0391dbd2786dfb367e
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dadbab601c2d tomcat:8 "catalina.sh run" About a minute ago Up About a minute 8080/tcp tomcat8
其實(shí)打印的在日志就是 catalina.sh run 命令之后的日志
4、實(shí)例2
使用鏡像tomcat:8,以后臺(tái)模式啟動(dòng)一個(gè)容器,容器名字定義為tomcat8
[root@localhost Fancy_Illusion]# docker run -d --name tomcat8 tomcat:8
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dadbab601c2d tomcat:8 "catalina.sh run" About a minute ago Up About a minute 8080/tcp tomcat8
創(chuàng)建容器之后還能執(zhí)行其他命令,這樣方便很多
5、實(shí)例3
使用鏡像tomcat:9,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的8080端口映射到主機(jī)的隨機(jī)端口,容器名字定義為tomcat9999
[root@localhost Fancy_Illusion]# docker run -d -P --name tomcat9999 tomcat:9
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
685cb359e8f5 tomcat:9 "catalina.sh run" 34 seconds ago Up 33 seconds 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp tomcat9999
6、實(shí)例4
使用鏡像 tomcat:10 ,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 8080 端口映射到主機(jī)的 9999 端口,容器名字自定義為 tomcat10
[root@localhost Fancy_Illusion]# docker run -d -p 9999:8080 --name tomcat10 tomcat:10
[root@localhost Fancy_Illusion]# docker ps
21ba2a865991 tomcat:10 "catalina.sh run" 47 seconds ago Up 45 seconds 0.0.0.0:9999->8080/tcp, :::9999->8080/tcp tomcat10
可以看到 PORTS 一列,主機(jī)的 9999 端口指向了容器的 8888 端口
7、實(shí)例5
使用鏡像 tomcat:7,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 8080 端口映射到主機(jī)的 9999 端口,容器名字自定義為 tomcat7,主機(jī)的目錄 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps,以后直接在主機(jī)的 webapps 目錄上傳 war 包,就能在瀏覽器訪問對(duì)應(yīng)的項(xiàng)目。
[root@localhost Fancy_Illusion]# docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7
a603e1e6d14d tomcat:7 "catalina.sh run" 38 seconds ago Up 37 seconds 0.0.0.0:9999->8080/tcp, :::9999->8080/tcp tomcat7
8、實(shí)例6
使用鏡像 tomcat:7,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 8080 端口映射到主機(jī)的 111.20.72.43:8888 端口,容器名字自定義為 tomcat77,主機(jī)的目錄 /usr/local/tomcat/webapp 映射到容器 /usr/local/tomcat/webapps ,啟動(dòng)容器后,在容器內(nèi)執(zhí)行 bash 命令
注意: 這里不加 -it 的話,容器是無法再啟動(dòng)的,加上才能啟動(dòng)容器并執(zhí)行 bash 命令
docker run -d -p 111.20.72.43:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat77 tomcat:7 bash
9、實(shí)例7
[root@localhost Fancy_Illusion]# docker run -d --name jenkin2 --privileged=true jenkins/jenkins
[root@localhost Fancy_Illusion]# docker exec -it jenkin2 bash
jenkins@49ea055c07c1:/$
雖然是擁有了 root 權(quán)限,但并不一定是 root 用戶身份,所以最好加 -uroot 指定 root 用戶身份
- -uroot:是給了 root 用戶身份,但并沒有真正的 root 權(quán)限
- –privileged:真正讓當(dāng)前用戶有了 root 權(quán)限
若想要最高的權(quán)限,兩者可以結(jié)合使用
8、實(shí)例8
該容器在 Docker 重啟后會(huì)自動(dòng)啟動(dòng)無需手動(dòng)啟動(dòng)
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afb882148e5e jenkins/jenkins "/sbin/tini -- /usr/…" 16 seconds ago Up 15 seconds 8080/tcp, 50000/tcp jenkins
[root@localhost Fancy_Illusion]# systemctl restart docker
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afb882148e5e jenkins/jenkins "/sbin/tini -- /usr/…" About a minute ago Up 4 seconds 8080/tcp, 50000/tcp jenkins
9、退出容器
exit 容器直接退出
ctrl +P +Q 容器不停止退出
二、start/stop/restart
docker start:啟動(dòng)一個(gè)或多個(gè)已經(jīng)被停止的容器
docker stop:停止一個(gè)或多個(gè)運(yùn)行中的容器
docker restart:重啟一個(gè)或多個(gè)容器
1、語(yǔ)法格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
2、stop/restart 命令的 options
option | 作用 |
---|---|
-t,–time | 殺死容器之前等待停止的秒數(shù)(默認(rèn)為10) |
根據(jù)容器 ID 啟動(dòng)、關(guān)閉、重啟
[root@localhost Fancy_Illusion]# docker start afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker stop afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker restart afb882148e5e
afb882148e5e
根據(jù)容器名字啟動(dòng)、關(guān)閉、重啟
[root@localhost Fancy_Illusion]# docker start jenkins
jenkins
[root@localhost Fancy_Illusion]# docker stop jenkins
jenkins
[root@localhost Fancy_Illusion]# docker restart jenkins
jenkins
啟動(dòng)所有容器
[root@localhost Fancy_Illusion]# docker start $(docker ps -a -q)
關(guān)閉所有容器
[root@localhost Fancy_Illusion]# docker stop $(docker ps -a -q)
三、kill
殺死一個(gè)或多個(gè)正在運(yùn)行的容器
語(yǔ)法格式
docker kill [OPTIONS] CONTAINER [CONTAINER...]
1、重點(diǎn)
docker kill子命令可殺死一個(gè)或多個(gè)容器
向容器內(nèi)部的主進(jìn)程發(fā)送SIGKILL 信號(hào)(默認(rèn)),或使用 --signal選項(xiàng)指定的信號(hào)
2、說明
options | 作用 |
---|---|
-s | 發(fā)送到什么信號(hào)到容器,默認(rèn)KILL |
3、實(shí)例
根據(jù)容器名字殺掉容器
[root@localhost Fancy_Illusion]# docker kill jenkins
?根據(jù)容器ID殺掉容器
[root@localhost Fancy_Illusion]# docker kill afb882148e5e
四、rm
刪除一個(gè)或多個(gè)容器
語(yǔ)法格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]
1、說明
options | 作用 |
---|---|
-f | 通過SIGKILL信號(hào)刪除一個(gè)正在運(yùn)行的容器 |
-l | 移除容器間的網(wǎng)絡(luò),而非容器本身 |
-v | 刪除與容器映射的目錄 |
2、實(shí)例
強(qiáng)制刪除容器
docker rm -f name
刪除所有已停止的容器
docker rm$(docker ps -a -q)
刪除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm
刪除tomcat
五、create
創(chuàng)建一個(gè)新的容器但不啟動(dòng)它
語(yǔ)法格式
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
option | 作用 |
---|---|
–name | 指定容器的名字 |
實(shí)例
根據(jù) tomcat 鏡像,創(chuàng)建一個(gè) myTomcat 容器
docker create --name=myTomcat tomcat
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker create --name tomcat8 tomcat:8
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 8 2d2bccf89f53 8 months ago 678MB
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b011e57c4d7 tomcat:8 "catalina.sh run" About a minute ago Created tomcat8
六、exec
在正在運(yùn)行的容器中運(yùn)行命令
語(yǔ)法格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
options | 作用 |
---|---|
-d | 在后臺(tái)運(yùn)行命令 |
-i | 即使沒有附加也保持STDIN打開,和-t配合 |
-t | 進(jìn)入容器的CLI模式 |
-e | 設(shè)置環(huán)境變量 |
–env-file | 讀入環(huán)境變量文件 |
-w | 需要執(zhí)行命令的目錄 |
-u | 指定訪問容器的用戶名 |
實(shí)例
執(zhí)行 tomcat 容器的 startup.sh 腳本
[root@localhost ~]# docker exec -it tomcat8 startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/openjdk-11
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
進(jìn)入容器的 CLI 模式(最常用)
[root@localhost ~]# docker exec -it tomcat8 bash
[root@localhost ~]# docker exec -it tomcat8 bash
root@5b011e57c4d7:/usr/local/tomcat#
root@5b011e57c4d7:/usr/local/tomcat# exit
exit
執(zhí)行普通命令
[root@localhost ~]# docker exec -it tomcat8 pwd
[root@localhost ~]# docker exec -it tomcat8 pwd
/usr/local/tomcat
以 root 用戶身份進(jìn)入容器(重點(diǎn))
[root@localhost ~]# docker exec -it -uroot jenkins bash
root@afb882148e5e:/#
好處就是,你在容器里敲命令就是 root 用戶,暢通無阻,不存在權(quán)限不足的問題
七、pause/unpause
docker pause: 暫停一個(gè)或多個(gè)容器中的所有進(jìn)程
docker unpause: 恢復(fù)一個(gè)或多個(gè)容器中的所有進(jìn)程
語(yǔ)法格式
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]
實(shí)例
暫停tomcat容器的服務(wù)文章來源:http://www.zghlxwxcb.cn/news/detail-721122.html
[root@localhost ~]# docker pause tomcat8
恢復(fù)tomcat容器的服務(wù)文章來源地址http://www.zghlxwxcb.cn/news/detail-721122.html
[root@localhost ~]# docker unpause tomcat8
到了這里,關(guān)于Docker——容器生命周期管理(下篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!