本文主要通过 tomcat 的容器为例,了解 docker 容器的内部结构以及容器的生命周期。
容器的内部结构
创建 tomcat 容器
docker run -p 80:8080 -d tomcat:jdk8-corretto
查看容器
docker ps
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d6f010629f9 tomcat:jdk8-corretto "catalina.sh run" 13 minutes ago Up 13 minutes 0.0.0.0:80->8080/tcp, :::80->8080/tcp pensive_chatterjee
进入容器内部
docker exec -it 4d6f010629f9 /bin/bash
__________________________________________
bash-4.2#
此时可以通过命令查看容器信息
ls
__________________________________________
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
#可以看到容器内目录包含了tomcat的相关目录,一些linux下的目录则没有,所以整体来看容器是轻量级的。
JDK 信息
java -version
__________________________________________
openjdk version "1.8.0_292"
OpenJDK Runtime Environment Corretto-8.292.10.1 (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM Corretto-8.292.10.1 (build 25.292-b10, mixed mode)
系统信息
cat /proc/version
__________________________________________
Linux version 3.10.0-1160.24.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Apr 8 19:51:47 UTC 2021
退出容器
exit
容器的生命周期
1、创建过程
#创建容器
docker create tomcat:jdk8-corretto
__________________________________________
95ca3a6c2393f569871c2ebade86c37c544126f73fe48e5bc4b924d2541b6b2c
#创建成功
#查看容器
docker ps
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#docker ps 只能查看运行中的容器
#查看所有容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 4 minutes ago Created eager_villani
#可以看到 STATUS 为 Created,Created 为 Stopped 的子状态
2、启动过程
#启动容器
docker start 95ca3a6c2393
__________________________________________
95ca3a6c2393
#启动成功
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 8 minutes ago Up 22 seconds 8080/tcp eager_villani
#此时可以看到 STATUS 变为 UP,表示已上线,正在运行中
3、暂停过程
#暂停容器
docker pause 95ca3a6c2393
__________________________________________
95ca3a6c2393
#暂停成功
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 12 minutes ago Up 3 minutes (Paused) 8080/tcp eager_villani
#此时容器暂停已经变为 Paused,表示已暂停
#恢复容器
docker unpause 95ca3a6c2393
__________________________________________
95ca3a6c2393
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 16 minutes ago Up 8 minutes 8080/tcp eager_villani
#此时容器已恢复
4、停止容器(如果暂时不需要该容器)
#停止容器
docker stop 95ca3a6c2393
__________________________________________
95ca3a6c2393
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 19 minutes ago Exited (143) 8 seconds ago eager_villani
#此时容器状态变为Exited,表示已退出
#启动容器
docker start 95ca3a6c2393
__________________________________________
95ca3a6c2393
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 21 minutes ago Up 10 seconds 8080/tcp eager_villani
#此时容器又恢复为Up状态
5、移除容器(如果不需要该容器了)
#移除容器
docker rm -f 95ca3a6c2393
__________________________________________
95ca3a6c2393
#移除成功
#查看容器
docker ps -a
__________________________________________
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#此时容器不再出现在容器列表中了
总结
本文主要通过命令操作以及执行结果来了解容器的内部结构和生命周期,通过频繁的命令,让这些命令了然于胸,后面我们来学习更多的进阶知识。
评论区