docker简介
Docker 是 一个打包、 分发和运行应用程序的平台。 正如我们所说, 它允许将你 的应用程序和应用程序所依赖的整个环境打包在一起。 这既可以是一些应用程序需 要的库, 也可以是一个被安装的操作系统所有可用的文件。
如果多个进程运行在同一个操作系统上,那容器到底是怎样隔离它们的?有两个机制可用:第一个是Linux命名空间,它使每个进程只看到它自己的系统视图(文件、进程、网络接口、主机名等);第二个是Linux控制组(cgroups),它限制了进程能使用的资源量(CPU、内存、网络带宽等)。
docker主要包含了下面几个概念:
名词 | 含义 |
---|---|
镜像 | Docker镜像里包含了你打包的应用程序及其所依赖的环境。 它包含 应用程序可用的文件系统和其他元数据, 如镜像运行时的可执行文件路径。 |
镜像仓库 | Docker镜像仓库用于存放Docker镜像,以及促进不同人和不同电脑之间共享这些镜像。 当你编译你的镜像时, 要么可以在编译它的电脑上 运行, 要么可以先上传镜像到一个镜像仓库,然后下载到另外一 台电脑上并 运行它。 某些仓库是公开的, 允许所有人从中拉取镜像, 同时也有一些是私 有的, 仅部分人和机器可接入。 |
容器 | Docker容器通常是一个Linux容器, 它基于Docker镜像被创建。 一 个运行中的容器是一个运行在Docker主机上的进程, 但它和主机, 以及所有 运行在主机上的其他进程都是隔离的。 这个进程也是资源受限的, 意味着它只能访问和 使用分配给它的资源(CPU、 内存等) |
容器镜像可移植性的限制
理论上, 一个容器镜像能运行在任何一个运行Docker的机器上。 但有一个小警 告 一—一个关于运行在一台机器上的所有容器共享主机Linux内核的警告。 如果一 个容器化的应用需要一 个特定的内核版本, 那它可能不能在每台机器上都工作。 如 果 一 台机器上运行了 一 个不匹配的Linux内核版本, 或者没有相同内核模块可用, 那么此应用就不能在其上运行。
虽然容器相比虚拟机轻量许多, 但也给运行于其中的应用带来了 一 些局限性。 虚拟机没有这些局限性, 因为每个虚拟机都运行自己的内核。
还不仅是内核的问题。 一 个 在特定硬件架构之上编译的容器化应用, 只能在有 相同硬件架构的机器上运行。 不能将 一 个x86架构编译的应用容器化后, 又期望它 能运行在A阳J架构的机器上。 你仍然需要一 台虚拟机来做这件事情。
docker run
--restart
:设置容器的重启策略
- no,默认策略,在容器退出时不重启容器
- on-failure,在容器非正常退出时(退出状态非0),才会重启容器
- on-failure:3,在容器非正常退出时重启容器,最多重启3次
- always,在容器退出时总是重启容器
- unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器--user
:设置容器中执行命令的用户id和群组id(容器共享宿主机中的用户id和群组id)
docker ps
-f
:设置过滤条件
-status=exited
,显示处于退出状态的容器-q
:只显示容器id,方便配合其他命令使用,比如删除所有退出的容器docker rm $(docker ps -f status=exited -q)