前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章了解如何使用Docker

一篇文章了解如何使用Docker

原创
作者头像
J_J
发布2018-10-14 10:36:34
2K0
发布2018-10-14 10:36:34
举报
文章被收录于专栏:每周一脱topic

本文先简单介绍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和传统虚拟机软件--底层实现对比

可以从左图看出,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!”,说明安装成功。

系统状态栏显示正在运行
系统状态栏显示正在运行

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

代码语言:javascript
复制
docker version

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

验证安装成功
验证安装成功

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

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

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

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

下图红框中的地址。

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

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

使用阿里云的registry镜像站点
使用阿里云的registry镜像站点

2.2 本地运行Nginx容器

一个简单的示例。

2.2.1 拉取Nginx的image镜像

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

代码语言:javascript
复制
docker pull nginx

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

2.2.2 run镜像

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

代码语言:javascript
复制
docker run -d -p 8000:80 nginx

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

2.2.3 验证

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

nginx启动成功
nginx启动成功

三、几种分享方式

3.1 镜像本地导出、载入

3.1.1 导出镜像

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

代码语言:javascript
复制
docker save -o nginx.tar nginx:latest

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

3.1.2 载入镜像

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

代码语言:javascript
复制
docker load --input nginx.tar

3.2 容器本地导出、载入

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

3.2.1 导出容器

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

代码语言:javascript
复制
docker export -o nginx_container.tar da2

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

导出容器
导出容器

3.2.2 导入镜像

代码语言:javascript
复制
docker import nginx_container.tar - nginx:v.1

3.3 将镜像push到仓库

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

3.4 Dockerfile编写

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

示例

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

代码语言:javascript
复制
FROM scratch
COPY hello /
CMD ["/hello"]

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

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

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

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

四、总结

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Docker原理
    • 1.1 四个名词
      • 1.2 与传统的虚拟机底层对比
        • 1.3 Docker受欢迎的根本原因
        • 二、Mac下搭建环境
          • 2.1 搭建docker环境
            • 2.1.1 官网下载Docker安装包
            • 2.1.2 安装
            • 2.1.3 设置阿里云registry镜像站点加速
          • 2.2 本地运行Nginx容器
            • 2.2.1 拉取Nginx的image镜像
            • 2.2.2 run镜像
            • 2.2.3 验证
        • 三、几种分享方式
          • 3.1 镜像本地导出、载入
            • 3.1.1 导出镜像
            • 3.1.2 载入镜像
          • 3.2 容器本地导出、载入
            • 3.2.1 导出容器
            • 3.2.2 导入镜像
          • 3.3 将镜像push到仓库
            • 3.4 Dockerfile编写
              • 示例
          • 四、总结
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档