22 04 2021

前言

本文主要了解docker容器的内部结构以及容器的生命周期。

本文以tomcat的容器为例来说明。

容器的内部结构

创建tomcat容器

  1. docker run -p 80:8080 -d tomcat:jdk8-corretto

查看容器

  1. docker ps
  2. __________________________________________
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. 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

进入容器内部

  1. docker exec -it 4d6f010629f9 /bin/bash
  2. __________________________________________
  3. bash-4.2#

此时可以通过命令查看容器信息

  1. ls
  2. __________________________________________
  3. BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
  4. #可以看到容器内目录包含了tomcat的相关目录,一些linux下的目录则没有,所以整体来看容器是轻量级的。

JDK信息:

  1. java -version
  2. __________________________________________
  3. openjdk version "1.8.0_292"
  4. OpenJDK Runtime Environment Corretto-8.292.10.1 (build 1.8.0_292-b10)
  5. OpenJDK 64-Bit Server VM Corretto-8.292.10.1 (build 25.292-b10, mixed mode)

系统信息:

  1. cat /proc/version
  2. __________________________________________
  3. 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

退出容器

  1. exit

容器的生命周期

1、创建过程

  1. #创建容器
  2. docker create tomcat:jdk8-corretto
  3. __________________________________________
  4. 95ca3a6c2393f569871c2ebade86c37c544126f73fe48e5bc4b924d2541b6b2c
  5. #创建成功
  6. #查看容器
  7. docker ps
  8. __________________________________________
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. #docker ps 只能查看运行中的容器
  11. #查看所有容器
  12. docker ps -a
  13. __________________________________________
  14. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  15. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 4 minutes ago Created eager_villani
  16. #可以看到 STATUS 为 Created,Created 为 Stopped 的子状态

2、启动过程

  1. #启动容器
  2. docker start 95ca3a6c2393
  3. __________________________________________
  4. 95ca3a6c2393
  5. #启动成功
  6. #查看容器
  7. docker ps -a
  8. __________________________________________
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 8 minutes ago Up 22 seconds 8080/tcp eager_villani
  11. #此时可以看到 STATUS 变为 UP,表示已上线,正在运行中

3、暂停过程

  1. #暂停容器
  2. docker pause 95ca3a6c2393
  3. __________________________________________
  4. 95ca3a6c2393
  5. #暂停成功
  6. #查看容器
  7. docker ps -a
  8. __________________________________________
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 12 minutes ago Up 3 minutes (Paused) 8080/tcp eager_villani
  11. #此时容器暂停已经变为 Paused,表示已暂停
  12. #恢复容器
  13. docker unpause 95ca3a6c2393
  14. __________________________________________
  15. 95ca3a6c2393
  16. #查看容器
  17. docker ps -a
  18. __________________________________________
  19. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  20. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 16 minutes ago Up 8 minutes 8080/tcp eager_villani
  21. #此时容器已恢复

4、停止容器(如果暂时不需要该容器)

  1. #停止容器
  2. docker stop 95ca3a6c2393
  3. __________________________________________
  4. 95ca3a6c2393
  5. #查看容器
  6. docker ps -a
  7. __________________________________________
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 19 minutes ago Exited (143) 8 seconds ago eager_villani
  10. #此时容器状态变为Exited,表示已退出
  11. #启动容器
  12. docker start 95ca3a6c2393
  13. __________________________________________
  14. 95ca3a6c2393
  15. #查看容器
  16. docker ps -a
  17. __________________________________________
  18. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  19. 95ca3a6c2393 tomcat:jdk8-corretto "catalina.sh run" 21 minutes ago Up 10 seconds 8080/tcp eager_villani
  20. #此时容器又恢复为Up状态

5、移除容器(如果不需要该容器了)

  1. #移除容器
  2. docker rm -f 95ca3a6c2393
  3. __________________________________________
  4. 95ca3a6c2393
  5. #移除成功
  6. #查看容器
  7. docker ps -a
  8. __________________________________________
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. #此时容器不再出现在容器列表中了

总结

本文主要通过命令操作以及执行结果来了解容器的内部结构和生命周期,通过频繁的命令,让这些命令了然于胸,后面我们来学习更多的进阶知识。

延伸阅读
  1. Windows下IIS搭建Ftp服务器
  2. Nginx开启Gzip压缩提升页面加载速度
  3. Nginx安装及配置(linux)
  4. Docker(10):Docker-Compose简介及安装
  5. Docker(5):docker镜像分层(layer)
发表评论