目录
2.2、 docker search [OPTIONS] 镜像名
3.1、docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
3.4、docker start 容器ID或者容器名,启动容器
3.5、docker restart 容器ID或者容器名,重启容器
3.6、docker stop 容器ID或者容器名,停止容器
3.7、docker kill 容器ID或者容器名,强制停止容器
2、docker logs -f -t --tail 容器ID,查看容器日志
4、docker inspect 容器ID,查看容器内部细节,json串的形式
6、docker cp 容器ID:容器内路径 目的主机路径,从容器内拷贝文件到主机
3.1、docker commit提交容器副本使之成为一个新的镜像
3.2、docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
一、Docker简介
1、Docker为什么会出现?
一款产品从开发到上线,从操作系统到运行环境,再到应用配置。作为开发+运维之 间的协作需要关心很多东西,这也是很多互联网公司不得不面对的问题,特别是各种版本迭代之后,不同版本环境的兼容,对运维人员都是考验。产品上线的最后一步是部署,互联网高并发的环境和大流量的访问,现在都是采用集群的方式,对运维人员来说,他可能需要反复的去安装配置。
对于上述问题,Docker给出了标准化的解决方案,从根本上解决问题,让软件实现带环境安装。开发人员利用Docker消除协作编码时 "在我的机器上可正常工作" 的问题。
Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念,通过镜像将运作应用程序需要的系统环境,由上而下打包,达到应用程序跨平台的无缝接轨运行。
2、Docker理念
Docker是基于Go语言实现的云开源项目,主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对 应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是WEB应用或数据库应用等等)及运行环境能够做到 “一次封装,到处运行”。
Linux容器技术的出现就解决了这样一个问题,而Docker就是在它的基础上发展过来的,将应用运行在Docker容器上,而Docker在任何操作系统上都是一致的,这就实现了跨平台、跨服务。
Docker是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
3、Docker架构
3.1、架构图
3.2、Docker基本组成
3.2.1镜像
Docker镜像(Image)就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器。
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件。
3.2.2容器
Docker利用容器(Cohtainer)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。3.2.3仓库
仓库(Repository)是集中存放镜像文件的场所。
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/), 存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等
需要正确的理解仓储/镜像/容器这几个概念:
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件。只有通过这个镜像文件才能生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
image文件生成的容器实例,本身也是一个文件,称为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。
4、虚拟机和Docker
虚拟机就是带环境安装的一种解决方案。
它可以在一种操作系统中运行另一种操作系统,比如在Windows系统运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要时删掉即可,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
注:灰色部分:宿主机系统
虚拟机缺点:资源占用多、冗余步骤多、启动慢。
由于虚拟机存在这些缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为LXC)
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
Docker在一定程度上是LXC的增强版,早期的Docker使用LXC作为容器引擎,所以也可以说Docker是LXC的二次封装发行版,目前docker使用的容器引擎为runC,其是容器运行时标准的实现之一;Docker使用镜像的方式启动容器,解决了LXC所面临的问题目前市面上所说的容器通常指Docker。
比较了Docker和传统虚拟化方式的不同之处:
* 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程:
* 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
*每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
Docker和虚拟机的区别_Alan_Xiang的博客-CSDN博客_docker和虚拟机的区别
5、开发/运维(DevOps)
一次构建、随处运行
优点:
更快速的应用交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算资源利用
6、Docker底层原理
6.1、Docker是怎么工作的
Docker是一个Client-Service结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器,是一个运行时环境,就是鲸鱼背上的一个个集装箱。
Docker容器的本质是宿主机上的进程,通过namespace实现资源隔离,通过cgroups实现资源限制,通过写时复制机制实现高效的文件操作。
6.2、为什么Docker比较比VM快
docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。加载操作系统内核是比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。
二、Docker常用命令
1、帮助命令
- docker version
- docker info
- docker --help
2、镜像命令
2.1、docker images 列出本地主机上的镜像
选项说明:
REPOSITORY