一篇文章了解如何使用Docker

本文先简单介绍Docker,并利用一个例子演示如何使用,然后介绍几种分享Docker的方式。

一、Docker原理

其实Docker没有想象中难以理解和上手,它非常简单,这里不直接大段复制教科书式的概念。用自己的话来概述其本质。

1.1 四个名词

有几个名词是使用频率很高的,我们一定要有所了解。

  • image(镜像) 我们可以理解为一个文件,它包含了执行过程中需要的所有东西-代码、执行环境、各种库、配置文件等等。在docker中,image是只读文件,它像一个洋葱,一层一层地累加修改点,从而构成各种各样的形式。例如ubuntu的image、nginx的image等等。当两个image中的几层是相同的,docker就可以只实际保存一份,在底层共享。
  • container(容器) container就是一个image的运行实例。由于image是只读的,加载进内存后,为它挂载文件系统、加入一层可读写文件层,真正跑起来。
  • repository(仓库) 我们的image可以提交push到远程仓库,也可以从仓库里pull拉取到本地。这个和git很类似,其实docker仓库这里借鉴了很多git的设计理念。
  • *registry(注册服务) 额外说一下,这里不要和仓库混淆,注册服务是保存仓库的地方,每个仓库存放某一类镜像。国内有墙的存在,从官方registry下载镜像很慢。所以一般都会将registry替换为国内的镜像,例如阿里云的,这样会快很多,下部分的内容会演示如何操作。

1.2 与传统的虚拟机底层对比

我们基本都使用过像VMware、VirtualBox等虚拟机软件,这些软件会虚拟化一个机器的概念,我们需要安装操作系统、软件等,就如同虚拟化了一个硬件机器一样。这层虚拟化可想而知,效率不高,占有宿主机的内存和cpu都较高。

那么Docker同样作为一个虚拟化技术,为何现在这么流行和普及呢?用一张官网的图来说明:

Docker和传统虚拟机软件--底层实现对比

可以从左图看出,Docker中一个执行容器和其他容器都共享当前Linux内核等,它运行在一个进程上,和宿主机器上其他普通的进程没啥区别,不会占用过多内存,所以非常轻量。

而传统的虚拟机就不同了,它在宿主机中完全虚拟化了一个环境,还需要操作系统、运行库等等,这个过程会占用很多的内存和cpu。同时,由于模拟层数过多,效率也不高。我们平时使用虚拟机过程中,应该有所感受。

1.3 Docker受欢迎的根本原因

上面说到Docker很轻量,这还仅仅是它的一个优点,并不足以颠覆目前的运维模式。**我觉得它最重要的一个点就是:通过一次创建或配置,代码就可以在任意机器、时间,完全一样的部署运行**。大家再也不用担心环境不一致的问题,繁琐的部署过程也变得异常简单。这一点解决了诟病多年的环境部署难题,受到了开发、运维、测试等的一致拥护,也从一定程度上颠覆了传统开发和运维的模式。

二、Mac下搭建环境

接下来介绍下mac下如何搭建docker环境,然后演示如何运行Nginx容器。

环境介绍:

机器:mac os 10.12.3

2.1 搭建docker环境

2.1.1 官网下载Docker安装包

官网下载链接:https://download.docker.com/mac/stable/Docker.dmg

直接很慢,我是用迅雷下的,国内会快点。

2.1.2 安装

双击安装包文件,如下图拖入。

拖入

然后在应用列表里双击打开,各种ok都点上,最后系统状态栏会出现Docker的Icon图标,然后点击看到“Docker is running!”,说明安装成功。

系统状态栏显示正在运行

打开一个终端,执行以下命令验证是否安装成功:

docker version

我这里显示这样,说明安装成功了:

验证安装成功

2.1.3 设置阿里云registry镜像站点加速

为了更快的下载image,我们使用阿里云的registry镜像站点。

  • 获取专属阿里云镜像站点地址

访问阿里云:https://cr.console.aliyun.com/#/accelerato

下图红框中的地址。

获取专属阿里云镜像站点地址
  • 本地设置

如下图操作点击Preferences,点击Daemon,点+号,添加上面阿里云里得到的地址,然后点击“applly&restart”让它重启生效。

使用阿里云的registry镜像站点

2.2 本地运行Nginx容器

一个简单的示例。

2.2.1 拉取Nginx的image镜像

先拉取Nginx的image镜像文件到本地执行:

docker pull nginx

上面命令会从仓库拉取nginx的最新镜像到本地。

2.2.2 run镜像

然后再运行该image镜像,-d是后台执行,-p是把本地8000端口映射到容器的80端口,执行:

docker run -d -p 8000:80 nginx

执行一个Nginx的容器就这么简单

2.2.3 验证

打开浏览器,访问:http://127.0.0.1:8000

nginx启动成功

三、几种分享方式

3.1 镜像本地导出、载入

3.1.1 导出镜像

使用命令将本地配置好的镜像导出为文件,例如将上面的nginx镜像导出为文件,执行:

docker save -o nginx.tar nginx:latest

然后再在前目录就会有镜像文件nginx.tar。

3.1.2 载入镜像

将tar文件载入到本地镜像库中,执行:

docker load --input nginx.tar

3.2 容器本地导出、载入

某些时候需要将一个容器迁移到另一个容器。

3.2.1 导出容器

不管容器当前是否在运行,都可使用docker export命令来导出:

docker export -o nginx_container.tar da2

其中da2为容器的唯一标识的前若干位。

导出容器

3.2.2 导入镜像

docker import nginx_container.tar - nginx:v.1

3.3 将镜像push到仓库

将镜像push到仓库,类似git一样推到云端。Docker仓库也分公共和私有仓库。如果需要在其它地方部署,只需要从云端的仓库拉到本地运行即可。

3.4 Dockerfile编写

Dockerfile就如同一个配置文件,它描述了每一步的操作,最终直接构建出一个镜像出来。其实DockerFile有自己的一套语法,后面有时间专门整理下,这里不阐述。

示例

接下来使用一个小例子来感受一下,以下为官方的hell-world镜像的Dockerfile内容:

FROM scratch
COPY hello /
CMD ["/hello"]

FROM scratch,的意思是以scratch镜像为基础,如果本地没有,会自动拉到本地。

COPY hello /,COPY指令将本地当前目录下的hello文件复制到镜像内“/”路径下。

CMD ["/hello"],CMD指令指明镜像启动时自动执行的命令,此处执行上一步传入的hello文件。

这样,我们使用Dockerfile就能将环境配置固化,大家都能一键生成相同的运行环境。更进一步,开发、测试、运维等等的环境就能轻松统一起来,这样大家就可以更专注地聚焦业务逻辑,而不用关心如何去配置环境。

四、总结

大家可以看到,简单使用Docker并不是很难。现在公司里运维基本是都是基于Docker了,腾讯云、阿里云上也都能支持Docker部署,后面自己做的项目也会尽量往上靠。

Docker如何改造?Kubernetes如何部署?已经列到计划里啦~

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏同步博客

Docker之进入容器(三)

  经过前面两篇博客的扫盲,大家多多少少对docker有了一个基本的了解,也接触了docker的常用命令。在这篇博客中,我将介绍进入docker容器的几种方式。

1383
来自专栏IT笔记

Docker学习之网络模式配置

以前搭建过虚拟机(vmware)的小伙伴,有可能知道vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式...

5774
来自专栏CSDN技术头条

Docker数据容器保护方式利弊

Docker是一个非常成功的Linux开源项目。它在Linux操作系统下无需增加管理器即可虚拟化应用程序。该应用程序常被抽象地误认为是操作系统(具有Linux内...

2467
来自专栏跟我一起学Docker

第二章 Docker环境安装

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实...

2153
来自专栏云计算

​在 OS X 系统上快速上手 Docker 技术 (对 Docker 还不够熟悉? 从这里开始吧!)

原文地址:https://dzone.com/articles/dockerosx-quickstart-not

2228
来自专栏深度学习思考者

一篇关于视频下载的技术贴(源码)

前言: 在GitHub,用户可以十分轻易地找到海量的开源代码。本文就针对很常用的视频下载任务,给出了最简单粗暴的下载方式。 任务目标: 使用视频下载的开源项目,...

2507
来自专栏IT笔记

Docker学习之网络模式配置

以前搭建过虚拟机(vmware)的小伙伴,有可能知道vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)...

44310
来自专栏磐创AI技术团队的专栏

5分钟配置好你的AI开发环境

无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库、软件包或者框架总是一个困难又繁琐的过程。但是像Doc...

1426
来自专栏友弟技术工作室

docker微服务初体验

在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、单个服务的设计。 而所谓服...

5278
来自专栏人工智能

在MacOs上用Docker开发

这是在开发者和运营团队之间的对话中经常听到的借口。即使使用复杂的工具,云中几乎没有限制的计算能力以及先进的持续集成工作流程,本地开发应用程序与在生产环境中运行应...

6490

扫码关注云+社区

领取腾讯云代金券