Docker
iSTEP Lv2

Hello Docker

Docker是一款轻量级虚拟化容器的管理引擎。

Docker的两个基本概念

关于Docker容器,涉及到两个非常重要的概念:镜像和容器。

镜像

镜像可以理解为一个打包了运行环境的特殊文件系统,它包含了容器启动运行所需的所有信息,包括运行程序和配置数据等。镜像不包含任何动态数据,其内容在构建之后也不会改变。

例如,一个官方的Ubuntu20.04镜像,就包含了一套完整的Ubuntu20.04最小系统的root文件系统。

容器

镜像容器的关系,类似于面向对象程序设计中的实例一样,镜像是静态的定义,而容器是镜像运行时的实体,可以看成是一个具备某个运行环境的非常轻量的虚拟机。容器可以被创建、启动、停止和删除等。在创建容器时,需要显示地为容器指定镜像。指定镜像之后,容器就具备了镜像中保存的运行环境了。

例如,可以为容器指定Ubuntu20.04的镜像,然后该容器就具备Ubuntu20.04的运行环境了。

Docker使用的基本过程

容器需要基于一个镜像来创建和使用。因此,Docker容器的使用一般有以下三个步骤:

1
获取一个镜像;基于该镜像创建并启动一个容器;进入该容器,执行“程序”。
  • 第一步:获取镜像; 上面我们提到了“镜像”可以理解为一个打包了运行环境的文件系统。然而在安装完Docker服务之后,本地是没有任何镜像的,所以首先需要获取所需要的镜像。
  • 第二步:创建并启动容器; 在获取到所需的镜像之后,就可以基于该镜像创建并启动一个容器,该容器就具备了镜像包含的运行环境了。同时,在创建容器时也可以设置容器的启动命令,该命令会在容器启动时执行。
  • 第三步:进入容器并执行程序; 在容器成功创建并启动之后,该容器就具备了ubuntu的运行环境。我们可以进入该容器内部,并在其内部执行任何在ubuntu系统上的程序了。这里的“程序”可以是“Linux命令”、“shell脚本”、“C++程序”等。

在本实训的后续关卡,我们将具体而详实的介绍上述各个步骤的命令和后台处理过程。本关主要以一个启动容器并在容器内控制台中输出“Hello Docker”基本案例来介绍这个过程。

Docker使用基本实例

本关通过一个启动容器并在容器内控制台中输出“Hello Docker”的基本使用案例粗略介绍Docker的使用及后台处理过程,帮助大家理解Docker的运行机制。

启动一个容器并输出“Hello Docker”的基本语句如下:

1
docker pull busybox:latestdocker run --name first_docker_container busybox:latest echo "Hello Docker"

没错,只需要两条命令,就可以完成了在容器中输出“Hello Docker”了,很简单吧!现在我们来介绍一下这两条命令在后台做了什么工作。

  • 第一条命令:获取一个名为busybox:latest的镜像。这条命令会从Docker Hub官方镜像仓库获取一个名为busybox:latest的镜像(busybox的最新版),并把它下载到宿主机。其中busybox是最小的Linux系统。
  • 第二条命令: 创建并启动一个容器,并执行相应命令。首先,--name设置容器的名字为first_docker_container,然后为容器指定了busybox:latest作为启动镜像,最后设置了该容器的启动命令为echo "Hello Docker"。容器启动并输出 “Hello Docker”后,将其停止。

在这个实例中,我们并不需要进入容器执行“程序”,因为我们设置了容器的启动命令,也就是echo "Hello Docker"。上面我们说过,在容器启动时会在容器中执行“启动命令”,执行完echo "Hello Docker",输出了“Hello Docker”,已经达到了我们的要求,所以就无需进入容器内部执行了。(后面会具体的介绍如何在容器内部执行“程序”!!)

其实我们也可以去掉第一条命令,直接使用第二条命令即可完成同样的功能。后台在执行命令时,发现本地没有busybox:latest镜像,会首先自动执行docker pull busybox:latest,将busybox:latest镜像下载到宿主机,然后再以busybox镜像作为基础,创建一个名为first_docker_container的镜像,并执行echo “Hello Docker”命令。

  • 本文标题:Docker
  • 本文作者:iSTEP
  • 创建时间:2021-08-01 17:15:28
  • 本文链接:https://istep.github.io/2021/08/01/Docker/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论