欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

Docker 入门教程:快速开始

我们在 《一文了解什么是 Docker》 文章中已经介绍了 Docker 是什么,以及为什么需要 Docker 技术。本文将快速介绍一下如何使用 Docker。

安装 Docker

Docker 是一个开源的商业产品,支持几乎所有的 Linux 发行版,也支持 Mac 以及 Windows 平台。在各平台上又分为两个版本:免费的社区版(Community Edition,缩写为 CE)和收费的企业版(Enterprise Edition,缩写为 EE),本文下面的介绍都是基于社区版的,并且以 CentOS 为例进行介绍。

这个 文档里面给出了所有支持平台的 Docker 安装方法,已经比较详细了,大家可以根据自己的平台查看相应的安装方法,本文就不再赘述。

Docker 入门教程:快速开始
如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众帐号:iteblog_hadoop

上图是 Docker 的架构,可以看出 Docker 是服务器-客户端架构,客户端想服务器发送请求,服务器负责构建、运行以及分发容器。客户端和服务器可以运行在同一个主机或者不同主机。本文为了简便,服务器和客户端是运行在一台主机上的。我们可以使用下面命令查看一下 Docker 服务是否已经在运行:

$ docker info

或者
$ docker version

如果输出了服务器端的信息,那么说明 Docker 服务器端正常启动。否则我们可以使用下面命令启动 Docker 服务器:

$ sudo systemctl start docker

或者
$ sudo service docker start

当然,我们也可以在开机的时候启动 docker,RHEL, CentOS, Fedora, Ubuntu 16.04 以上版本只需要设置下面命令即可

$ sudo systemctl enable docker

Ubuntu 14.10 及以下版本使用的是 upstart 来管理重启的服务,而 docker 自带就使用这个命令配置了开机启动 Docker 服务,所以我们不需要额外设置了。更多的说明可以参见 这里

Docker 核心概念

在介绍下面内容之前,我们先来了解一下 Docker 的核心概念。Docker 有的三大核心概念:

  • 镜像(image):镜像是创建 docker 容器的基础,docker 镜像类似于虚拟机镜像,可以将它理解为一个面向 docker 引擎的只读模块,包含文件系统。比如某个镜像包含一个 CentOS 操作系统;或者我们开发的应用程序等。我们可以从无到有开始创建镜像;也可以基于先有的镜像创建新的镜像。可以将镜像的内容以及创建的步骤写到一个文本文件里面,这个文件称为 Dockerfile,然后 Docker 可以通过这个文件构建出 Docker 镜像。
  • 容器(container):容器就是镜像运行的实例,我们可以使用 Docker 提供的相关命令启动、开始、停止、删除 Docker 容器。 镜像本身是只读,容器从镜像启动的时候,Docker 会在镜像的最上层建一个可写层,镜像本身保持不变。 可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以直接利用docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker start。
  • 仓库(repository):存放 docker 镜像的地方称为仓库。仓库分为公有仓库和私有仓库,Docker Hub(https://hub.docker.com/)是 Docker 公司官方维护的最大公有仓库,Docker 默认的就是这个仓库。当然,出于安全的原因,很多公司自己维护了一个内部的私有仓库,这个仓库只能由公司内部网络下载。Docker 仓库其实和我们熟悉的 Maven 仓库的概念很类似,我们可以将创建好的镜像上传到里面,也可以在里面搜索镜像,下载镜像等。

第一个 Docker 容器

上面我们已经安装好 Docker 了,下面我们来介绍如何使用 Docker。Docker 官方为我们提供了一个非常简单的 Docker 镜像:hello-world(参见 这里),现在我们来体验一下 Docker 吧。下载 hello-world 镜像:

[iteblog@iteblog.com ~]$ docker pull library/hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

上面命令从默认的 Docker 仓库(Docker Hub)下载 library/hello-world 镜像。由于任何人都可以在 Docker Hub 仓库上传镜像,为了区分不同用户的同名镜像,所以下载镜像的时候需要指定用户名、镜像名称以及 tag,完整格式为 [username]/docker_image_name:tag。由于 Docker 官方提供的镜像文件都放在 library 组里面,它是默认的用户名,可以我们在下载 Docker 官方的镜像时,可以省去 [username],所以上面命令相当于 docker pull hello-world。不指定 tag 的时候将默认使用 latest。

注意:上面命令是从国外的 Docker 的官方仓库下载镜像的,有时候下载速度会很慢,我们往往需要将默认仓库改成国内的镜像网站,可以参见这篇文章了解如何设置。

接下来我们查看刚刚下载的 Docker 镜像:

[iteblog@iteblog.com ~]$ docker images hello-world
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        13 months ago       1.84kB

大家应该看到上面命令最后一列的输出,这个 hello-world 镜像大小才 1.84KB!这个镜像的 Dockerfile 其实只有三行代码(参见 这里):

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

下面我们来简单介绍一下这个 Dockerfile 里面的内容:

  • FROM scratch:也就是说这个镜像是从零开始构建的,不依赖如何其他镜像;
  • COPY hello /:将 hello 文件拷贝到镜像的根目录,这个 hello 其实是实现编译好的可执行文件;
  • CMD ["/hello"]:容器启动时执行 /hello

好了,我们已经从 Docker 仓库下载了 hello-world 镜像,现在我们来运行这个镜像:

[iteblog@iteblog.com ~]$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

可以看出,启动 hello-world 镜像会执行 /hello 文件,然后在终端打印出上面的一些信息,最后容器自动终止。

好了,本文就介绍到这里。通过本文我们已经了解到 Docker 最基本的概念和使用,后面的文章我将给大家介绍 Docker 的常用命令以及如何自己制作一个 Docker 镜像。

本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Docker 入门教程:快速开始】(https://www.iteblog.com/archives/9774.html)
喜欢 (3)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!