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

相关推荐
小刘爱喇石( ˝ᗢ̈˝ )24 分钟前
k8s中service概述(一)ClusterIP
云原生·容器·kubernetes
有梦想的攻城狮30 分钟前
【一起来学kubernetes】21、Secret使用详解
云原生·eureka·kubernetes·secret
云水木石37 分钟前
Linux 系统运行 Android 应用的几种方案
android·linux·运维·服务器
CharlesG02 小时前
NAT 实验:多私网环境下 NAPT、Easy IP 配置及 FTP 服务公网映射
运维·服务器·网络·网络协议·tcp/ip·安全·ip
EasyCVR2 小时前
EasyRTC嵌入式音视频通信SDK:WebRTC技术下的硬件与软件协同演进,开启通信新时代
linux·运维·服务器·c语言·音视频·webrtc
若云止水5 小时前
ngx_http_conf_ctx_t
nginx
qq_171538858 小时前
Docker命令解析:加速你的容器化之旅(以Nginx为例)
nginx·docker·eureka
TFHoney8 小时前
Java面试第十一山!《SpringCloud框架》
java·spring cloud·面试
神奇的海马体9 小时前
Kubeasz工具快速部署K8Sv1.27版本集群(二进制方式)
docker·容器·kubernetes·kubeasz
小嘚9 小时前
springCloud的学习
学习·spring·spring cloud