【Docker】常用帮忙、镜像、容器、其他命令合集(2)
- 博主有话说
- 容器命令
- 新建容器并启动
- 列出所有的运行的容器
- 退出容器
- `docker run -it centos:7.0.1406 /bin/bash`指令解析
- docker exec -it ... bash 、docker run -it ... bash、docker attach [容器] 的`exit`行为
- 删除容器
- 启动和停止容器的操作
- 常用其他命令
- 后台启动容器
- 查看日志
- 查看容器中进程信息
- 查看镜像的元数据
- 从容器内拷贝文件到主机上
博主有话说
紧随上期博文【Docker】常用帮忙、镜像、容器、其他命令合集(1),继续进行容器、其他两部分的命令记录。
容器命令
新建容器并启动
docker run [可选参数] image# 参数说明--name="Name" 容器名字
-d 后台方式运行
-it 使用交互方式运行,进行容器查看内容
-p 指定容器的端口-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口
-P 随机指定端口
关于-p 容器端口
和-P
需要注意,如果有2条指令docker run -p 234 centos
和 docker run -P centos
,它们是有区别的。
-p 234 centos
:
- Docker 会将容器的 234 端口映射到主机上随机选择的一个端口(通常是 32768 以上的高位端口)。
-P centos(大写字母 P)
:
- 这是自动端口映射,会将容器中所有暴露的端口(Dockerfile 中用 EXPOSE 声明的端口)自动映射到主机上随机选择的端口(通常是 32768 以上的高位端口)。
- 例如:如果容器暴露了 80 和 443 端口,使用
-P
会自动将这两个端口分别映射到主机的两个随机端口
可以使用 docker ps
命令查看具体的端口映射关系,输出结果中的 PORTS 列会显示 主机端口->容器端口 的映射信息。
列出所有的运行的容器
docker ps 列出当前正在运行的容器
-a 列出当前正在运行的容器+带出历史运行过的容器
-n=? 显示最近创建的容器,? 是数字,代表想要显示的容器数量
-q 只显示容器的编号
退出容器
exit 直接容器停止并退出
Ctrl+P+Q 容器不停止退出
可以看出用Ctrl+P+Q退出,容器是依旧在运行的。这里有2个要点,首先对docker run -it centos:7.0.1406 /bin/bash
进行分析;其次介绍创建了容器后,退出再进入,exit的实际使用情况。
docker run -it centos:7.0.1406 /bin/bash
指令解析
docker run -it
在之前介绍后,表示创建并启用一个容器,且是交互式终端;centos:7.0.1406
指定要使用的镜像;/bin/bash
是容器启动后执行的命令,这里是启动 Bash shell(Linux 命令行解释器),让你可以在容器内执行各种 Linux 命令。
docker exec -it … bash 、docker run -it … bash、docker attach [容器] 的exit
行为
采用docker exec -it [容器名/ID] /bin/bash
可以实现再次进入已创建的容器,进行操作,此时输入exit
指令,理论上来说,应该是直接容器停止并退出,但是用docker ps
查看,发现依旧是运行中。
采用docker run -it [容器名/ID] /bin/bash
可以实现一个新容器的创建,此时输入exit
指令,可以正常退出。
采用docker attach [容器]
可以实现再次进入已创建的容器,进行操作,此时输入exit
指令,可以正常退出。
这个是什么情况?
通过分析发现,原来docker exec -it [容器名/ID] /bin/bash
是在已运行的容器中启动一个新的 Bash 进程(独立于容器的主进程),此时执行 exit
只会终止这个新启动的 Bash 进程,不会影响容器的主进程,因此容器会继续运行。
对比不同进入方式的 exit 行为
当然,这个也是docker exec
的设计优势:允许在不影响容器主进程的情况下临时进入容器执行操作(如调试、查看日志等)。
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q | xargs docker rm #删除所有的容器
对docker ps -a -q | xargs docker rm
:
docker ps -a -q
列出所有容器,且仅输出容器id,结果为一行一个id,便于批量处理;xargs docker rm
:xargs
将前序输出按行拆成参数,逐个调用docker rm
;|
把前一命令的输出作为后一命令的输入。
启动和停止容器的操作
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器
常用其他命令
后台启动容器
docker run -d 镜像名
关于这个指令,在前面的容器命令里面有过介绍,在使用过程中,会发现一个很神奇的情况,启用mysql,结果发现停止了。
原来,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止。
查看日志
docker logs -f -t --tail 容器id# 显示日志常用参数
-tf #显示日志
--tail number # 要显示日志条数
里面docker run -d centos:7.0.1406 /bin/sh -c "while true;do echo haitao;sleep 1;done"
表示自己编写一段shell 脚本。
查看容器中进程信息
docker top 容器id
查看镜像的元数据
镜像元数据用于描述镜像的身份、构成、配置与属性,常见于容器镜像与云平台镜像,是查找、校验、兼容与自动化的基础。
docker inspect 容器id
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
先容器中创建测试文件test.java,然后退出。
其次,通过docker cp c7f6730cb023:/home/test.java /home
指令实现从容器中将文件移动到主机指定路径下。