什么是Docker:
- Docker是一个虚拟化的软件
- 它简化了开发和部署软件的过程
- 它将应用及其所有必要的依赖项、配置文件、系统工具和runtime打包到了一起形成一个image,这个image包含这个应用运行所需要的所有环境。这使得该应用在任何一个装有docker的环境下都能运行
Docker是用来解决什么问题:
在开发端解决的问题:
这就要说到在使用容器技术之前的开发流程了:
每一个开发需要在他们本地的机器上安装和配置所有服务,在这种情况下,不同的操作系统的安装流程不一样,并且由于安装过程需要很多步骤,每一步都有可能导致出错。种种这些隐藏的风险会导致开发在配置开发环境的时候会很心累,很容易出错。
如果我们使用Docker的话,那么,对于每一个服务,不管我们使用什么操作系统,我们可以使用一个命令来启动这个服务(因为对于不同的操作系统,使用的docker指令是一样的)。可以这么理解,Docker标准化了我们在开发环境下运行任何服务的流程。
在部署端解决的问题:
这就要说到在使用容器技术之前的部署流程了:
开发人员会向运维人员提供Artifacts, 安装指导等。然后,正如在前面提到的开发端遇到的问题一样,运维在安装环境时也很容易出错。此外,开发人员和运维人员之间的沟通交流过程也有可能会出现问题。
如果我们使用Docker的话,开发人员会将Artifacts及其所有的依赖项打包成一个image,然后,运维人员也可以使用一个指令就能部署到服务器上。
Docker和虚拟机的对比:
Docker和虚拟机的主要区别在于它们会虚拟化OS的不同部分。Docker是将OS Application Layer这一块虚拟化,所以,我们在运行Docker Container的时候,它是包含OS application layer以及运行在这个层上面的服务和应用(因为Docker Container不包含自己的OS kernel)。而,虚拟机是会将整个OS都虚拟化,所以它有自己的OS kernel。
这样的话,Docker实际上还是运行在Linux上的,所以,我们无法只支持Windows的软件打包进入一个Docker Image中。
Docker Images和Docker Containers的对比:
Docker Image:
- 一个应用的可执行文件
- 不仅包括APP的源码,还包括完整的环境配置
- 还可以添加环境变量,创建文件夹等
Docker Container:
- 一个Docker Image的一个运行实例
- 对于一个image,我们可以运行多个containers
如何拉取我们想要的Docker Image:
首先,登录"Docker Hub"(这个是最大的docker image存储地)。然后,在顶部的搜索框中输入我们想要下载的Image名(比如nginx):

在弹出来的窗口中,我们可以看到下载Image的指令(下图右上角),和支持的nginx版本:

接着,假设我们想要下载"1.27.4"版本的nginx的话,我们需要在cmd中输入下面的指令即可:
docker pull nginx:1.27.4
然后就开始下载这个Image了,下载完成后,会出现下图所示的部分:

如果我们想验证该image是否下载成功,我们可以在cmd中运行"docker images",获得下面的结果:

如何运行某一个Docker Image:
我们以nginx 1.27.4这个docker image为例,在cmd中运行下面的指令:
docker run nginx:1.27.4
然后,我们能看到nginx运行的log:

但是,这个指令会block terminal,如果不想block的话,需要使用下面的指令来替换:
docker run -d nginx:1.27.4
如何查看有哪些containers正在运行中:
在一个新的cmd中,运行下面的指令:
docker ps
运行后,可以看到我们刚才启动的nginx container:

如何停止某一个Docker Container:
我们通过指令"docker ps"获得了正在运行的docker containers,然后,对于想要停止的container(比如12734ffe409b),运行下面的指令:
docker stop 12734ffe409b
运行成功的话,会返回container id号,如下图所示:

这个时候,我们再运行"docker ps"的话,可以得到下面的结果:
