容器命令
新建并启动容器
docker run [options] image [command] [args]
OPTIONS说明(常用),有的是一个减号,有的是两个减号
--name="容器新名字": 为容器指定一个名称
-d: 后台运行容器,并返回容器ID,也即启动守护式容器
-i: 以交互模式运行容器,通常与-t同时使用
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用
-P: 随机端口映射
-p: 指定端口映射,有以下四种格式
ip:hostPorst:containerPort
ip::containerPort
hostPort:containerPort
containerPort
示例
启动交互式容器
docker run -it --name 'mycentos'
列出当前所有正在运行的容器
docker ps [options]
OPTIONS说明(常用):
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
退出容器
- exit 容器停止退出(容器停止了,再次进入,需要再次run)
- ctrl+P+Q 容器不停止退出(容器没停止,还可以再次进入,不用再次run)
启动容器
docker start 容器ID或容器名
适用范围
已经新建过,运行了,
停止之后,使用docker ps -l
或者使用docker ps -a
查询出停止的容器
然后使用查询出来的容器ID或者容器名字
进行重新启动
重启容器
docker restart 容器ID或者容器名
重启后会返回容器ID
适用范围
已经新建过,正在运行,
使用docker ps -l
或者使用docker ps -a
查询出运行的容器
然后使用查询出来的容器ID或者容器名字
进行重新启动
停止容器
docker stop 容器ID或者容器名
停止后会返回容器ID
使用场景
相当于电脑关机流程
强制停止容器
docker kill 容器ID或者容器名
停止后会返回容器ID
使用场景
相当于电脑,直接拔电源
删除已停止的容器
删除单个容器
docker rm 容器ID 删除单个容器
docker rm -f 容器ID 强制删除单个容器
删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
启动守护式容器
docker run -d 容器名
详解
不会产生交互,
不会切换到新的容器
问题
docker ps -a进行查看,会发现容器已经退出
很重要的要说明的一嗲:docker容器后台运行,就必须哟一个前台进程
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就会自动退出
这个是docker的机制问题,比如你的web容器,
我们一nginx为例,正常情况下,我们配置启动服务
只需要启动相应的service即可.
例如service nginx start
但是,这样做,nginx为后台进程模式运行,
就导致docker前台没有运行的应用
这样的容器后台启动后,会立即自杀因为他觉得没事可做了.
所以最佳的解决方案是
将你要运行的程序以前台进程的形式运行!!!
如何正确的启动
docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
意思
启动守护式容器centos
并且在前台每隔两秒打印一次hello zzyy
这样前台有进程,就不会导致自杀
查看容器日志
docker logs -f -t --tail 容器ID
参数详解
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
查看容器内运行的进程
docker top 容器ID
使用场景
已经运行了一个容器
此时使用这个命令查看在容器运行的进程
查看容器内部细节
docker inspect 容器ID
进入正在运行的容易并以命令行交互
docker attach 容器ID
使用场景
直接进入容器启动命令的终端,不会启动新的进程
会直接切换到容器里面
docker exec -t 容器ID ls -l /tmp
使用场景
不进入容器里面,
但是能获取到命令 ls -l /tmp的内容
docker exec -t 容器ID /bin/bash
使用场景
会直接切换到容器里面
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
使用
docker cp 10b9ajsdk:/tmp/yum.log /root
将容器10b9ajsdk路径tmp下的yum.log拷贝到主机的root下面