镜像是静止的。
容器是动态的,状态分为:创建、运行、退出、挂起、被删除
运行:
A. 新的容器: docker run [-i/-d] <镜像名> [options] --> -i 交互模式,常用于启动bash(-t 选项启动新terminal;-a选项是连接到当前会话的terminal)进入容器,排查、改变容器(进而commit新镜像)
--> -d 服务模式,daemon
--> options通常是:容器资源定义和限制: --memory=xx --memory-swap=xx(默认swap是2倍memory) --cpu-shares=xx(上限也是默认) --cpuset-cups=xx(限制住分配哪个cpu核)
B. 之前退出的容器:docker start [-i/-d] <容器id/容器名> [options] --> 取得上次退出时的状态、选项:运行命令、端口、挂载目录
* 进入正在运行的容器:docker exec -it <容器id/容器名> /bin/bash
退出: 运行状态被保存,包括上次启动运行的命令参数
A. docker kill <容器id/容器名>
kill操作一定能stop掉容器,但可能不能在start这个容器了。这时,两个方案重起容器:
1. 之前容器没有修改过:docker run <镜像>
2. 之前容器有重要修改:
docker ps -a -->得到容器id
docker export <容器id> > tarball
解压tarball,修复issue,重新打包
cat tarball | docker import - <image name>
docker run <image name>
有用的kill信号:
docker kill -s SIGHUP <容器id/容器名> --> 容器内的服务会reload配置文件,没有downtime
docker kill -s SIGINT <容器id/容器名> --> 向容器容器的前台进程发出键盘中断 Ctrl+C
B. docker stop <容器id/容器名>
C. 容器完成了命令/任何,自行退出
* 察看容器退出码: docker wait <容器id/容器名>
挂起: 挂起容器内的所有进程,基于cgroups freeze特性而实现的
A. docker pause <容器id/容器名>
A-1. docker unpause <容器id/容器名> --> resume容器内的进程
删除:
A. docker rm <容器id/容器名> --> 如果在docker run/start时加上 --rm 选项,那么在容器退出时,容器也会被删除
B. docker rmi <容器id/容器名> --> 连镜像一起删除。
创建: 相当于docker run -d <镜像名> [options], 但容器内进程没起来,容器就stop的效果
docker create <镜像名> [options]