Docker学习系列一~运行一个Docker镜像

96
哈皮阿呆
2018.12.06 15:16* 字数 1431

Docker介绍

目前容器技术非常的火热,其中Docker是目前最流行的。国内外很多技术大会都会谈到相关话题。当然还有很多人都没有接触过,或者没有听说过,没关系,现在就开始学习吧!

大家应该都用过云服务器(比如:阿里云ECS),购买之后,平台自动按照我们的购买需求在几分钟内生成一个虚拟机,这个虚拟机是通过某种虚拟化技术在真实的基础设施上创建的,它会占用内存、储存、CPU等物理资源。大体如张图所示(图片来自Docker官网):

类似的,我们应该也有在自己个人电脑上安装虚拟操作系统的经历,虚拟系统安装需要很长时间,启动、关闭等等都如同一个实际的电脑,需要一定的时间(分钟级别)。

通过技术大神的不断探索和努力,容器技术在不断发展和广泛应用,其中包括:Docker、rkt等等。通过容器技术,实现了直接在宿主系统上运行虚拟操作系统。而这些虚拟系统可以通过自定义创建,启动和关闭都非常的快,且占用的资源少很多。通过通过容器技术运行的操作系统称为容器化应用。大体如图所示(图片来自Docker官网):

什么是容器,直接看Docker官方的介绍:

A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.

翻译:容器是一个标准的软件单元,它将代码及其所有依赖打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。 Docker容器镜像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

Container images become containers at runtime and in the case of Docker containers - images become containers when they run on Docker Engine. Available for both Linux and Windows-based applications, containerized software will always run the same, regardless of the infrastructure. Containers isolate software from its environment and ensure that it works uniformly despite differences for instance between development and staging.

翻译:容器镜像在运行时成为容器,在Docker容器的情况下- 镜像在Docker Engine上运行时成为容器。 适用于基于Linux和Windows的应用程序,无论基础架构如何,容器化软件都将始终运行相同。 容器将软件与其环境隔离开来,并确保它可以统一工作,尽管开发和演示之间存在差异。

从介绍中,其中有两个概念,一个是镜像,一个是容器。镜像就像一个操作系统镜像文件(里面包括系统文件、软件文件等等),容器就像一个操作系统镜像文件被虚拟机软件加载运行。

Docker 组成可参考官方文档:https://docs.docker.com/engine/docker-overview/

Docker命令

在操作系统上安装好Docker Engine后,来看看它有哪些命令(执行后,这些命令工具会与Docker Engine通信,完成相应的操作)。

可以通过命令管image、container、network、volume等对象:

镜像管理:

可以看出Docker命令的风格是:docker 某对象  某操作。比如列出所有的镜像(list images):docker  image ls 。 其他对象的操作也类似。比如列出所有状态为running的容器(list running containers):docker container ls ,后面还可以跟参数,比如列出所的容器(包括停止等):docker container ls -a

小实践

了解基本使用。下面我们去下载一个镜像,然后运行这个镜像,使之成为容器。

执行命令:docker image pull nginx(注:docker pull nginx 这种写法也能完成同样效果,可以执行docker help查看具体命令使用)

完成后,我们就有了一个nginx镜像。这里你可能会问,这个过程发生了什么?

当我们执行命令后,命令会作为一个client端,与Docker daemon发起通信,并告知我们的请求,这里我们是需要pull nginx镜像,所以Docker daemon会查看本地是否有指定的nginx镜像,假设没有,则会去Registry(镜像仓库)中查看,存在的话,则执行远程下载至本地。

现在来运行这个镜像,使它成为一个Docker容器。

docker container run --name my-nginx -d nginx

运行后,我们得到一个容器,容器名为my-nginx(由--name my-nginx指定),并后台运行(由-d参数指定),当docker container ls执行后,就能看到该容器了。

这两个过程可以参考下图理解。(图片来自Docker官网)

这次先介绍到这里,更多Docker相关知识,大家可以先到官网了解。初学者的话,可以先看看get-started。

参考资料:

1、https://www.docker.com/resources/what-container

2、https://docs.docker.com/get-started/

3、https://docs.docker.com/

4、https://github.com/docker/labs/

Docker
Web note ad 1