- 如果忘记了docker的相关命令
- 在命令行里输入 history 查看以往的命令
- 就是有点费时间
- Docker的配置文件:
- 通常时在 docker-compose.yml 这个文件里面
- 在这个文件里面可以看到,存储映射地址的关系
- docker的容器管理命令:
- 列出运行中的容器:
- docker ps
- 查看所有的容器:
- docker ps -a
- 包括所有的容器(包括未运行的)
- 停止容器:
- docker stop <container_id_or_name>
- 强制停止容器:
- docker kill <container_id_or_name>
- 列出所有镜像:
- docker images
- 镜像详细信息:
- docker inspect <image_id>
- 检查docker环境:
- 显示系统范围的信息:docker info <image_id>
- 显示的信息包括内核版本、容器和映像的数量等
- 显示磁盘使用情况:docker system df (-v 显示详细使用情况)
- 显示系统范围的信息:docker info <image_id>
- 启动已停止的容器
docker start <container_id_or_name>
启动一个已经停止的容器,例如:
docker start my_container
查看容器的详细信息
docker inspect <container_id_or_name>
查看容器的所有配置信息和状态,例如:
==docker inspect my_container==
- 列出运行中的容器:
-
查看容器日志
docker logs <container_id_or_name>
显示容器的输出日志,例如:
==docker logs my_container== -
查看容器中的进程
docker top <container_id_or_name>
列出容器内部正在运行的进程,例如:
==docker top my_container== -
查看容器的基本信息
docker container ls
显示所有正在运行的容器的基本信息,包括容器 ID、镜像、状态和端口等。例如:
docker container ls
这个命令类似于 ==docker ps==,可以显示容器的 ID、镜像名称、创建时间、状态、端口映射等信息。 -
进入容器的交互式终端
docker exec -it <container_id_or_name> /bin/bash
进入容器的 Bash 终端,进行交互式操作,例如:
==docker exec -it my_container /bin/bash== -
退出容器 当你在容器内操作完成后,可以使用 ==exit== 命令退出终端:
==exit== - 删除已停止的容器
==docker rm <container_id_or_name>== -
删除一个已停止的容器,例如:
==docker rm my_container== - 强制删除正在运行的容器
docker rm -f <container_id_or_name>
强制删除一个正在运行的容器,例如:
==docker rm -f my_container==
注意:
一定要先启动容器,才能进入容器
- 查看容器里的数据库密码:
- 一般是在 docker-compose.yml 这个配置文件里面会有
- 日志收集:
- 容器日志:
- 使用docker logs <container_id> 获取特定容器的日志。比如,Ubuntu下使用如下bash命令可以获取全部容器日志: export_date_time=$(date +”%Y%m%d_%H%M%S”) # 获取当前日期时间
- 容器日志:
containers=$(docker ps –format “ “) # 获取所有运行中的docker容器的 ID 和 名称
mkdir -p docker_logs # 创建一个目录来保存日志文件
while read -r container_id container_name; do # 遍历每个容器
==# 导出容器日志,并保存为文件==
== log_filename=”${container_name}_${export_date_time}.log”==
== log_path=”docker_logs/${log_filename}”==
== docker logs $container_id > “$log_path”==
== echo “Exported logs for container ${container_name} to $log_path”==
==done <<< “$containers”==
==echo “All logs have been exported.”==
- 守护进程日志:
- 通常位于 /var/log/docker.log
- windows端: C:\User\用户名\AppData\Local\Docker\log
- 系统日志:
- /var/log/syslog
- /var/log/messages
- 文件系统分析:
- 备份容器文件系统:
- 导出容器文件系统:
- Docker export <container_id> container_bak.tar
- 随后可对导出的container_bak.tar进行分析,可使用 x-ways、法证通等取证工具解析
- 导出容器文件系统:
- 分析文件系统:
- 先进入容器:
- Docker exec -it <container_id> /bin/bash 或 /bin/sh
- 查看文件和目录: 使用 ls、cat、less 等命令
- 先进入容器:
- 备份容器文件系统:
- 查看文件系统更改:
- Docker diff:显示docker容器文件系统的变更
- A 表示新增的文件或目录
- D 表示删除的文件或目录
- C 表示修改过的文件或目录
- 例子:
- Docker diff mysql
- Docker diff:显示docker容器文件系统的变更
- Docker 文件结构解析:
- Docker 使用一种称为联合文件系统(union file system,unionFS)的技术来高效地管理容器的文件系统。在当前版本中,docker大多使用overlay2存储驱动。下面将详细介绍docker容器文件结构及其各个组成部分,并以overlay2存储驱动为例进行说明
- 主目录结构
- docker的主目录通常位于 /var/lib/docker 。在这个目录下,你可以找到与docker相关的所有数据文件。
- /var/lib/docker:
- 这是docke守护进程的主要存储目录,其中包含了docker镜像、容器和其他组件的数据
- 镜像存储:
- /var/lib/docker/containers
- 这个目录包含了所有容器的数据。每个容器都有一个对应的子目录,其中包括容器的日志文件、配置文件以及其他与容器相关的数据
- 日志文件:通常位于 <container_id>/json.log 或其他日志驱动指定的位置
- 配置文件:每个容器都有一个配置文件,如<container_id>/config.v2.json ,其中包含了容器的配置信息
- 这个目录包含了所有容器的数据。每个容器都有一个对应的子目录,其中包括容器的日志文件、配置文件以及其他与容器相关的数据
- /var/lib/docker/image:
- 这是docker镜像的存储目录。镜像以层的形式存储,每一层代表了镜像的一部分
- 镜像元数据:镜像的元数据存储在这个目录中。包括镜像的标签、创建时间等信息
- 这是docker镜像的存储目录。镜像以层的形式存储,每一层代表了镜像的一部分
- /var/lib/docker/overlay2:
- 假设容器的ID是 9086213335250608234049945854659426557966195238968291234567890,并且它基于一个包含三个镜像层的docker镜像构建而成
- /var/lib/docker/containers
- 主目录结构
- Docker 使用一种称为联合文件系统(union file system,unionFS)的技术来高效地管理容器的文件系统。在当前版本中,docker大多使用overlay2存储驱动。下面将详细介绍docker容器文件结构及其各个组成部分,并以overlay2存储驱动为例进行说明
==/var/lib/docker/==
==└── overlay2/==
==├── 9086213335250608234049945854659426557966195238968291234567890 ==
==# 容器目录==
==├── 9086213335250608234049945854659426557966195238968291234567891 ==
==# 镜像层目录==
==├── 9086213335250608234049945854659426557966195238968291234567892 ==
==# 镜像层目录==
==└── 9086213335250608234049945854659426557966195238968291234567893 ==
==# 镜像层目录==
**
- 容器层:每个容器都有一个对应的目录,这些目录包含了容器的文件系统信息 ==/var/lib/docker/overlay2/9086213335250608234049945854659426557966195238968291234567890/==
==├── id # 容器的 ID 文件==
==├── init # 初始化文件==
==├── links # 链接信息==
==├── merged # 文件系统视图==
==├── upper # 可写层==
==└── work # 工作目录==
- id:容器的ID文件
- links:包含容器与其他容器的链接信息
- merged:这是容器的文件系统视图,包含了所有只读层和可写层的合并结果
- upper:这是容器的可写层,包含了所有只读层和可写层的合并结果
- work:这是一个工作目录,用于存储临时文件,如正在进行中的写操作
- 镜像层:每个镜像层都有一个对应的目录,这些目录包含该层的文件系统变更,例如: ==/var/lib/docker/overlay2/9086213335250608234049945854659426557966195238968291234567891/==
==├── diff # 镜像层的文件系统变更==
==└── link # 引用计数==
- diff:包含该镜像层的文件系统变更
-
link:指向该层的引用计数
- 容器存储:
- /var/lib/docker/containers/<container_id>
- 每个容器都有一个唯一的ID,容器的所有数据都被存储在与之对应的子目录中
- 文件系统:容器的文件系统通常是通过 overlay2 存储的,位于/var/lib/docker/overlay2/<container_id>merged
- 日志文件:容器的日志文件通常位于<container_id>/json.log 或其他日志驱动(docker run 或 daemon.json 配置)指定的位置
- 配置文件:容器的配置文件,如<container_id>/config.v2.json这个文件包含了容器的配置信息,如容器的名称、镜像ID、命令行参数、环境变量等。
- 每个容器都有一个唯一的ID,容器的所有数据都被存储在与之对应的子目录中
- /var/lib/docker/containers/<container_id>
- 网络配置:
- /var/lib/docker/networks
- 这个目录包含了docker网络的信息,每个网络都有一个对应的子目录,其中包含了网络的配置信息
- 网络配置文件:每个网络都有一个配置文件,如<container_id>/config.json
- 网络插件信息:如果有使用网络插件,相关信息也会存储在这里
- 这个目录包含了docker网络的信息,每个网络都有一个对应的子目录,其中包含了网络的配置信息
- /var/lib/docker/networks
- 其他文件和目录:
- /var/lib/docker/swarm:
- 如果docker swarm模式被启动,这里会存储集群相关的数据,比如证书
- /var/lib/docker/bundles
- 这个目录用于存储docker swarm模式下的服务信息
- /var/lib/docker/buildkit:
- 如果启用了buildkit构建功能,那么这个目录将用于存储buildkit的数据
- /var/lib/docker/tmp:
- 临时文件存储目录,用于存放docker运行过程中产生的临时文件
- /var/lib/docker/swarm:
- 网络分析:
- 网络连接信息:
- 查看容器网络连接: ==docker exec -it CONTAINER_ID netstat -tuln==
- 网络连接信息:
==docker exec -it CONTAINER_ID ss -tuln==
-
查看网络接口信息: docker inspect CONTAINER_ID | jq ‘.[0].NetworkSettings’
-
如果没有jq则在整个inspect输出中查找网络接口信息 docker inspect CONTAINER_ID
-
使用 docker stats查看容器的网络 I/O统计: docker stats CONTAINER_ID
-
使用ipconfig或ifconfig查看网络接口配置 docker exec -it CONTAINER_ID ifconfig
- 使用iptables查看容器的防火墙规则
-
捕获网络流量 :使用tcpdump或wireshark 等工具: docker exec -it CONTAINER_ID tcpdump -i any
-
DNS查询记录: docker exec -it <container_id> cat /var/log/dmesg(对于某些容器)
- 进程分析:
- 查看容器内进程:
- Docker exec -it <container_id> ps aux
- 进程详细信息:
- docker exec -it <container_id> ps -ef
- 查看容器内进程:
**
- *
**
**
**