容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下。
虚拟机的生命周期
容器的生命周期
容器的创建 create
- 作用:
- 利用镜像创建出一个Created状态的待启动容器
- 命令格式:
- docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- 命令参数:查看更多
- -t, --tty 分配一个伪tty,也就是分配虚拟终端
- -i 即使没连接,保持STDIN打开
- --name 为容器起个名字,没有会随机命名
容器启动 start
- 作用:
- 将一个或者多个创建状态或者停止状态的容器启动
- 命令格式:
- docker start [OPTIONS] CONTAINER [CONTAINER...]
- 命令参数:
- -a 将当前的shell的STDOUT/STDERR 连接到容器上
- -i 将当前shell的STDIN连接到容器上
结论:
-a 参数指定后执行完 容器为退出状态
容器创建并启动 run
- 作用:
- 利用镜像创建一个启动的容器
- 命令格式:
- docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 命令参数:
- -t, --tty 分配一个伪tty,也就是分配虚拟终端
- -i 将当前shell的STDIN连接到容器上
- -d 在后台运行并且打印出容器ID
- --name 为容器起个名字,没有会随机命名
- --rm 容器退出后,自动删除容器
区别:
docker run 相当于 docker create + docker start -a 前台模式
docker run -d 相当于 docker create + docker start 后台模式
- 总结:
- 默认我们利用镜像来启动容器,用docker run 命令来进行
容器暂停和取消暂停 pause unpause
- 作用:
- 暂停或取消暂停一个启动的容器
- 命令格式:
- docker pause/ unpause CONTAINER [CONTAINER...]
容器关闭和杀死 stop kill
- 作用:
- 将一个或者多个暂停或者运行的容器stop
- 强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
- 命令格式:
- docker stop/ kill [OPTIONS] CONTAINER [CONTAINER...]
- 命令参数:
- -t 容器关闭前等待的时间 默认10s (stop)
- -s 给指定容器关闭信息,默认kill (kill)
区别:
- 前提知识点:
- Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
- SIGKILL信号:无条件终止进程信号。进程接收到该信号会立即终止,不进行清理和暂存工作。该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
- SIGTERM信号:程序终结信号,可以由kill命令产生。与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。
- docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器
- docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。
- 因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销
- 此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等"异常原因
容器重启 restart
- 作用:
- 重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
- 该命令相当于stop和start命令的结合
- 命令格式:
- docker restart [OPTIONS] CONTAINER [CONTAINER...]
- 命令参数:
- -t 重启等待时间 默认10s
容器删除 rm
- 作用:
- 删除一个或者多个容器
- 命令格式:
- docker rm [OPTIONS] CONTAINER [CONTAINER...]
- 命令参数:
- -f 强制删除
- -v 同时删除绑定的数据卷
容器其他操作 inspect logs rename
Inspect: 详细信息
- 命令格式:
- docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- 命令参数:
- -f 利用特定Go语言的format格式输出结果
- -s 显示总大小
logs: 日志信息
- 命令格式:
- docker logs [OPTIONS] CONTAINER
- 命令参数:
- --details 显示日志的额外信息
- -f, --follow 动态跟踪显示日志信息
- --since string 只显示某事时间节点之后的
- --tail string 显示倒数的行数(默认全部)
- -t, --timestamps 显示timestamps时间
- --until string 只显示某事时间节点之前的
- 注意: 容器日志中记录的是容器主进程的输出STDOUTSTDERR
rename: 容器重命名
- 命令格式:
- docker rename CONTAINER NEW_NAME
容器运行时 连接
docker attach
- 作用:
- 将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接
- 命令格式:
- docker attach [OPTIONS] CONTAINER
- 命令参数(OPTIONS):
- --no-stdin 不绑定STDIN
Exec 容器中执行新的命令
- 作用:
- 在容器中运行一个命令
- 命令格式:
- docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- 命令参数(OPTIONS):
- -d, --detach 后台运行命令
- -i, --interactive 即使没连接容器,也将当前的STDIN绑定上
- -t, --tty 分配一个虚拟终端
- -w, --workdir string 指定在容器中的工作目录
- -e, --env list 设置容器中运行时的环境变量
我们平时连接的时候用 it参数
总结