在学习Docker之前我们先来了解一下,它主要是用来解决什么样的问题。
现在比如说你做了一个web应用,并且在你的本地调试没有出现任何问题,现在你想发给你的朋友看看或者上传到云端。现在首先你是不是得模拟你本地的开发环境,配置相同的软件,比如数据库,web服务器,库还有必要的插件等等。但是即便是如此,你也不确定到了你朋友的电脑上你的这个应用能不能正常的跑起来,因为你的朋友的操作系统可能和你不一样,即使你们同样是使用linux,每种发行版也会有着细微的区别。
那么现在我们是不是会想到,诶,我可以使用虚拟机呀,但是虚拟机需要模拟硬件,运行整个操作系统,不仅内存占用高,而且部署起来时间还久。这个时候我们就可以用到docker了,它在概念上和虚拟机类似,都是提供完全隔离的运行环境,但是它比虚拟机要轻便,docker不会去模拟硬件,只会去模拟应用开发环境所需要用到的软件,库等。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。
好,需要理解上面这段话,我们就要了解一下有关docker的几个基本概念。
1. 镜像(Image):Docker镜像是一个只读的模板,包含了应用程序和其依赖的所有组件。镜像可以用来创建容器,一个镜像可以创建很多容器。镜像是只读的,不能对其进行修改。
Linux镜像可以在Linux、windows的docker中使用
windows镜像只能在windows的docker中使用
2. 容器(Container):容器是镜像的运行实例,是一个独立的、可执行的环境,用来运行应用程序。容器可以被启动、开始、停止、删除,每个容器都是相互隔离的,保证安全。
3. 仓库(Repository):仓库是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。
容器是完全使用沙箱机制(通过软硬件手段的结合,可以模拟出一个“管控”区域,它的里面是预先指定、划分出来的运算与存储资源,与宿主的其他资源完全隔离),相互之间不会有任何接口。容器之间共用的是主机的内核,但是不会直接访问主机的内核,而是通过docker引擎去访问。
创建Docker容器的两种方式:
1、通过命令直接创建
2、通过dockerfile创建
使用dockerfile和镜像结合创造容器的时候,镜像可以是不完整的,docker会根据dockerfile中的脚本指令进一步完善容器,比如下载缺失的文件或者更改配置,执行完这些指令才算是容器真正创建成功。dockerfile更加灵活一些,但是其容器的创建时间会更长,也比较不稳定。一般更推荐于用第一种,他可以快速部署,尽管它的内存占用会比较大,一般是几个G。
以下是一些相关命令:
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 --help
查看本地容器:docker ps
查看所有容器(包括未运行):docker ps -a
启动容器:docker start<容器ID>
停止容器:docker stop<容器ID>
删除容器:docker rm<容器ID>
进入容器内部:docker exec -it<容器ID>/bin/bash
容器打包成镜像:docker commit -a"作者信息”-m"log信息”<容器ID><目标镜像名称:tag版本>拷贝文件到容器:docker cp<文件目录><容器ID>:<目标目录>
拷贝容器文件到宿主机:docker cp<容器ID>:<文件目录><宿主机目标目录>
更新容器设置:docker update<容器ID><相关设置>