通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本
镜像是静态的文件,并不能提供服务,就像我拿了个 Linux 或者 Windows 的光盘一样,只有安装到主机里面运行起来才能对外提供服务,我们才能使用。
虚拟化和容器化的最主要目的就是资源隔离,随着资源隔离的实现也带来更大的收益:
各生命周期直接的转换图:
docker create : 创建容器后,不立即启动运行,容器进入初建状态;
docker run : 创建容器,并立即启动运行,进入运行状态;
docker start : 容器转为运行状态;
docker stop : 容器将转入停止状态;
docker kill : 容器在故障(死机)时,执行 kill(断电),容器转入停止状态,这种
操作容易丢失数据,除非必要,否则不建议使用;
docker restart : 重启容器,容器转入运行状态;
docker pause : 容器进入暂停状态;
docker unpause : 取消暂停状态,容器进入运行状态;
docker rm : 删除容器,容器转入删除状态。
killed by out-of-memory(因内存不足被终止) :宿主机内存被耗尽,也被称为OOM:非计划终止 这时需要杀死最吃内存的容器
container process exitde(异常终止):出现容器被终止后,将进入 Should restart?选择操作:
• yes 需要重启,容器执行 start 命令,转为运行状态。
• no 不需要重启,容器转为停止状态。
Docker 在处理 OOM 事件时分为三种情况
(1)如果容器中的应用耗尽了主机系统分配给容器的内存限额,就会触发 OOM 事件。 例如,在容器当中,部署了一个 web 服务。假设主机分配给此容器的内存上限为 1G, 当脚本申请的内存大于 1G 时,此容器就会触发 OOM 事件。而在这种情况下,此容器将会被强制关闭。
但需要注意的是,此时关闭容器的并非是 Docker Daemon,而是宿主机操作系统。因 为一个容器其实就是一组运行在宿主机操作系统当中的进程,宿主机操作系统通过cgroups 对这组进程设定资源上限,当这些进程申请的资源到达上限时,触发的是宿主机操作系统的内核 OOM 事件,因此最终是由宿主机内核来关闭这些进程.
(2) 如果用户不想关闭这个容器,那么可以选择–oom-kill-disable 来禁用 OOM-Killer。使用此参数时,仍需要注意,如果使用-m 设置了此容器内存上限,那么当容器到达内存资源上限时,主机不会关闭容器,但也不会继续向此容器继续分配资源,此时容器将处于 hung 状态。只需要将最坏的情况封闭在一定范围之内,而不至于蔓延出去。
(3)如果用户使用了–oom-kill-disable,但也没有使用-m 来设定上限,因而此时此容器 将会尽可能多地使用主机内存资源。换言之,主机内存有多大,它就将用多大。
每个容器内部都存在一个 Init 进程,容器中其他所有进程都是此进程的子进程。运行 的容器是因为 Init 进程在运行,如果一个子进程因为某种原因造成了退出,那么其父 进程也会同步退出,直至 Init 进程也退出。当 Init 进程退出时,也就代表着此容器被关闭。docker 目前没有办法知道此时的进程退出属于正常退出还是异常退出。当出现容器关闭情况时,Docker Daemon 会尝试再次重新将此容器由 Stopped 状态转为 Running状态。只有设置了–restart 参数的容器,Docker Daemon 才会去尝试启动,否则容器 会保持停止状态。
Docker“剥夺”了此容器的 CPU 资源。而其他资源,如 Memory 资源、Network 资源等还保留未动。如此一来,失去了 CPU 资源的进程,是不会被主机内核系统所调度的,所以此容器就处于“冰封”状态。
命令 | 别名 | 功能 |
---|---|---|
docker create | docker container create | 创建容器 |
docker run | docker container run | 运行容器 |
docker attach | docker container attach | 连接到正在运行的容器 |
docker commit | docker container commit | 将镜像提交为容器 |
docker cp | docker container cp | 在容器和宿主机之间拷贝 |
docker diff | docker container diff | 检查容器里文件机构的更改 |
docker exec | docker container exec | 在运行的容器中执行命令 |
docker export | docker container export | 将容器导出为tar |
docker container inspect | 查看容器详细信息 | |
docker kill | docker container kill | 杀死容器 |
docker logs | docker container logs | 查看日志 |
docker ps | docker container ls docker container list docker container ps |
查看正在运行的进程 |
docker pause | docker container pause | 暂停进程 |
docker port | docker container port | 查看容器的端口映射 |
docker container prune | 删除停止的容器 | |
docker rename | docker container rename | 重命名容器 |
docker restart | docker container restart | 重启容器 |
docker rm | docker container rm docker container remove |
删除容器 |
docker start | docker container start | 启动容器 |
docker stop | docker container stop | 停止容器 |
docker stats | docker container stats | 查看资源占用信息 |
docker top | docker container top | 查看某个容器的资源占用 |
docker unpause | docker container unpause | 继续运行容器 |
docker update | docker container update | 更新容器配置 |
docker wait | docker container wait | 阻止一个或多个容器运行直到容器停止,然后打印退出代码 |
标红的命令需要重点掌握
创建一个新容器并运行
docker run [options] image [command] [arg...]
无参数下,如果本地没有这个镜像就会去仓库中拉取,再来运行,此时以前台方式运行
在另外一个窗口查看正在运行的容器
如果不使用-it,因为ubuntu默认使用bin/bash方式运行,所以需要使用-it才能看到交互界面
一般不使用-P选项
docker stats mynginx2
myubuntu2链接myubuntu1,可以访问到myubuntu1,而myubuntu1不行
列出容器
docker ps [options]
创建一个新容器但不启动他
docker create [options] image [command] [arg..]
查看容器日志
docker logs [options] container
连接到正在运行的容器
docker attach [options] container
使用docker attach连接到mynginx2容器,退出时连同mynginx2一起退出。
在容器中执行命令
docker exec [options] container command [arg...]
停止运行的容器
docker stop [options] container
启动停止的容器
docker start [options] container [container...]
重启容器
docker restart [options] container [container...]
强制退出容器
docker kill [options] container [container...]
查看容器中运行的进程信息
docker top container [ps options]
显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等。
docker stats [options] [container...]
查看容器详细信息
docker container inspect [options] container [container...]
查看容器的端口映射
docker port container [private_prot[/proto]]
用于容器和宿主机之间拷贝文件
docker cp [options] container:src_path dest_path
docker cp [options] src_path container:dest_path
将mynginx3容器的index.html拷贝到宿主机/home/test1目录下
将修改后的index.html文件拷贝回去
检查容器里文件结构的更改
docker diff container
从容器中创建一个新的镜像
docker commit [options] container [repository[:tag]]
暂停容器中的所有进程
docker pause container [container...]
恢复容器中所有的进程
docker unpause container [container...]
删除停止的容器
docker rm [options] container [container...]
导出容器内容为tar文件
docker export [options] container
阻塞运行直到容器停止,然后打印出他的退出代码
docker wait container [container...]
重命名容器
docker container rename
删除所有停止的容器
docker container prune [options]
更新容器配置
docker update [options] container [container...]