Devops之Docker:Docker入门

什么是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"的话,可以得到下面的结果:

相关推荐
AOwhisky10 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
重生的黑客10 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
Urbano10 小时前
夹克与商务单西口袋工序自动化技改研究报告
运维·自动化
风曦Kisaki11 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着201311 小时前
docker 安装 ,在centos7.9
运维·docker·容器
踏月的造梦星球12 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库
微三云 - 廖会灵 (私域系统开发)12 小时前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
MXsoft61812 小时前
平台化是智能运维发展的必然趋势吗?
运维
liuccn13 小时前
Linux 存储系统:LVM 与直接分区
linux·运维
骑上单车去旅行14 小时前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka