Docker
- 一、run
- 1、options说明
- 2、-p的三种写法
- 3、实例1
- 4、实例2
- 5、实例3
- 6、实例4
- 7、实例5
- 8、实例6
- 9、实例7
- 8、实例8
- 9、退出容器
- 二、start/stop/restart
- 1、语法格式
- 2、stop/restart 命令的 options
- 三、kill
- 1、重点
- 2、说明
- 3、实例
- 四、rm
- 1、说明
- 2、实例
- 五、create
- 实例
- 六、exec
- 实例
- 七、pause/unpause
- 实例
一、run
创建一个新的容器并运行一个命令
语法格式
docker run [OPTIONS] IMAGE [COMMAND][ARG...]
备注:
其实跟docker create一样的语法格式,只不过可以运行容器甚至进入容器内部
COMMAND: 需要在容器内执行的命令
docker run执行流程
首先在指定镜像上创建一个可写的容器层
然后使用指定的命令(command)启动它
docker run 相当于执行力两个API /containers/create 、 ../start
1、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 权限 |
2、-p的三种写法
docker run -p ip:主机端口:容器端口
docker run -p 主机端口:容器端口(常用)
docker run -p 容器端口
3、实例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
这样运行,会直接将容器运行日志打印出来,所以一般都需要加 -d,否则无法继续敲其他命令
[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
其实打印的在日志就是 catalina.sh run 命令之后的日志
4、实例2
使用镜像tomcat:8,以后台模式启动一个容器,容器名字定义为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
创建容器之后还能执行其他命令,这样方便很多
5、实例3
使用镜像tomcat:9,以后台模式启动一个容器,将容器的8080端口映射到主机的随机端口,容器名字定义为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、实例4
使用镜像 tomcat:10 ,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 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 一列,主机的 9999 端口指向了容器的 8888 端口
7、实例5
使用镜像 tomcat:7,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 9999 端口,容器名字自定义为 tomcat7,主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps,以后直接在主机的 webapps 目录上传 war 包,就能在浏览器访问对应的项目。
[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、实例6
使用镜像 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
9、实例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 权限,但并不一定是 root 用户身份,所以最好加 -uroot 指定 root 用户身份
- -uroot:是给了 root 用户身份,但并没有真正的 root 权限
- –privileged:真正让当前用户有了 root 权限
若想要最高的权限,两者可以结合使用
8、实例8
该容器在 Docker 重启后会自动启动无需手动启动
[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:启动一个或多个已经被停止的容器
docker stop:停止一个或多个运行中的容器
docker restart:重启一个或多个容器
1、语法格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
2、stop/restart 命令的 options
option | 作用 |
---|---|
-t,–time | 杀死容器之前等待停止的秒数(默认为10) |
根据容器 ID 启动、关闭、重启
[root@localhost Fancy_Illusion]# docker start afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker stop afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker restart afb882148e5e
afb882148e5e
根据容器名字启动、关闭、重启
[root@localhost Fancy_Illusion]# docker start jenkins
jenkins
[root@localhost Fancy_Illusion]# docker stop jenkins
jenkins
[root@localhost Fancy_Illusion]# docker restart jenkins
jenkins
启动所有容器
[root@localhost Fancy_Illusion]# docker start $(docker ps -a -q)
关闭所有容器
[root@localhost Fancy_Illusion]# docker stop $(docker ps -a -q)
三、kill
杀死一个或多个正在运行的容器
语法格式
docker kill [OPTIONS] CONTAINER [CONTAINER...]
1、重点
docker kill子命令可杀死一个或多个容器
向容器内部的主进程发送SIGKILL 信号(默认),或使用 --signal选项指定的信号
2、说明
options | 作用 |
---|---|
-s | 发送到什么信号到容器,默认KILL |
3、实例
根据容器名字杀掉容器
[root@localhost Fancy_Illusion]# docker kill jenkins
根据容器ID杀掉容器
[root@localhost Fancy_Illusion]# docker kill afb882148e5e
四、rm
删除一个或多个容器
语法格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]
1、说明
options | 作用 |
---|---|
-f | 通过SIGKILL信号删除一个正在运行的容器 |
-l | 移除容器间的网络,而非容器本身 |
-v | 删除与容器映射的目录 |
2、实例
强制删除容器
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
创建一个新的容器但不启动它
语法格式
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
option | 作用 |
---|---|
–name | 指定容器的名字 |
实例
根据 tomcat 镜像,创建一个 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
在正在运行的容器中运行命令
语法格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
options | 作用 |
---|---|
-d | 在后台运行命令 |
-i | 即使没有附加也保持STDIN打开,和-t配合 |
-t | 进入容器的CLI模式 |
-e | 设置环境变量 |
–env-file | 读入环境变量文件 |
-w | 需要执行命令的目录 |
-u | 指定访问容器的用户名 |
实例
执行 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.
进入容器的 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
执行普通命令
[root@localhost ~]# docker exec -it tomcat8 pwd
[root@localhost ~]# docker exec -it tomcat8 pwd
/usr/local/tomcat
以 root 用户身份进入容器(重点)
[root@localhost ~]# docker exec -it -uroot jenkins bash
root@afb882148e5e:/#
好处就是,你在容器里敲命令就是 root 用户,畅通无阻,不存在权限不足的问题
七、pause/unpause
docker pause: 暂停一个或多个容器中的所有进程
docker unpause: 恢复一个或多个容器中的所有进程
语法格式
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]
实例
暂停tomcat容器的服务
[root@localhost ~]# docker pause tomcat8
恢复tomcat容器的服务
[root@localhost ~]# docker unpause tomcat8