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 许可协议。转载请注明出处!