上一篇我们主要把 Docker
的一些常见概念如 Image
, Container
, Repository
做了详细的阐述,也从传统虚拟化方式的角度阐述了 docker
的优势,我们从下图可以直观地看到 Docker
的架构:
Docker
使用 C/S
结构,即客户端/服务器体系结构。 Docker
客户端与 Docker
服务器进行交互,Docker服务端负责构建、运行和分发 Docker
镜像。 Docker
客户端和服务端可以运行在一台机器上,也可以通过 RESTful
、 stock
或网络接口与远程 Docker
服务端进行通信。
这张图展示了 Docker
客户端、服务端和 Docker
仓库(即 DockerHub
和 DockerCloud
),默认情况下 Docker
会在 Docker
中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于 Git
,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。
Docker的安装和使用
Docker
的安装和使用有一些前提条件,主要体现在体系架构和内核的支持上。对于体系架构,除了 Docker
一开始就支持的 X86-64
,其他体系架构的支持则一直在不断地完善和推进中。
Docker
分为 CE
和 EE
两大版本。 CE
即社区版(免费,支持周期 7
个月), EE
即企业版,强调安全,付费使用,支持周期 24
个月。
我们在安装前可以参看官方文档获取最新的 Docker
支持情况,官方文档在这里:
https://docs.docker.com/install/
Docker
对于内核支持的功能,即内核的配置选项也有一定的要求(比如必须开启 Cgroup
和 Namespace
相关选项,以及其他的网络和存储驱动等), Docker
源码中提供了一个检测脚本来检测和指导内核的配置,脚本链接在这里:
https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh
在满足前提条件后,安装就变得非常的简单了。
DockerCE
的安装请参考官方文档:
-
MacOS
:https://docs.docker.com/docker-for-mac/install/ -
Windows
:https://docs.docker.com/docker-for-windows/install/ -
Ubuntu
:https://docs.docker.com/install/linux/docker-ce/ubuntu/ -
Debian
:https://docs.docker.com/install/linux/docker-ce/debian/ -
CentOS
:https://docs.docker.com/install/linux/docker-ce/centos/ -
Fedora
:https://docs.docker.com/install/linux/docker-ce/fedora/ -
其他
Linux
发行版:https://docs.docker.com/install/linux/docker-ce/binaries/
这里我们以 CentOS7
作为本文的演示。
环境准备
-
阿里云服务器(1核2G,1M带宽)
-
CentOS 7.4 64位
由于 Docker-CE
支持 64
位版本的 CentOS7
,并且要求内核版本不低于 3.10
首先我们需要卸载掉旧版本的 Docker
$ sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
我们执行以下安装命令去安装依赖包:
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
这里我事先已经安装过了,所以提示我已经安装了最新版本
安装Docker
Docker
软件包已经包括在默认的 CentOS-Extras
软件源里。因此想要安装 docker
,只需要运行下面的 yum
命令
$ sudo yum install docker
当然在测试或开发环境中 Docker
官方为了简化安装流程,提供了一套便捷的安装脚本, CentOS
系统上可以使用这套脚本安装:
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh
具体可以参看 docker-install
的脚本:
-
https://github.com/docker/docker-install
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 DockerCE
的 Edge
版本安装在系统中。
安装完成后,运行下面的命令,验证是否安装成功:
docker version
or
docker info
返回docker的版本相关信息,证明 docker
安装成功
启动Docker-CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
Docker的简单运用---Hello World
由于服务器日常崩溃了, docker
出了点问题,所以以下案例的演示是基于 KaliLinux
环境下进行的。
我们通过最简单的 image
文件 hello world
,感受一下 Docker
的魅力吧!
我们直接运行下面的命令,将名为 hello-world
的 image
文件从仓库抓取到本地。
docker pull library/hello-world
docker pull images
是抓取 image
文件, library/hello-world
是 image
文件在仓库里面的位置,其中 library
是 image
文件所在的组, hello-world
是 image
文件的名字。
抓取成功以后,就可以在本机看到这个 image
文件了。
docker images
我们可以看到如下结果:
现在,我们可以运行 hello-world
这个 image
文件
docker run hello-world
我们可以看到如下结果:
输出这段提示以后, hello world
就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。
是不是很 easy
呢?我们从上面可以看出, docker
的功能是十分强大的,除此之外,我们还可以拉去一些 Ubuntu
, Apache
等镜像,在未来的教程中我们将会一一提到。
Docker
提供了一套简单实用的命令来创建和更新镜像,我们可以通过网络直接下载一个已经创建好了的应用镜像,并通过 DockerRUN
命令就可以直接使用。当镜像通过 RUN
命令运行成功后,这个运行的镜像就是一个 Docker
容器啦,容器可以理解为一个轻量级的沙箱, Docker
利用容器来运行和隔离应用,容器是可以被启动、停止、删除的,这并不会影响 Docker
镜像。
我们可以看看下面这幅图:
Docker
客户端是 Docker
用户与 Docker
交互的主要方式。当您使用 docker
命令行运行命令时, Docker
客户端将这些命令发送给服务器端,服务端将执行这些命令。 docker
命令使用 docker API
。 Docker
客户端可以与多个服务端进行通信。
总结
本篇主要给大家介绍了一下 Docker
环境的搭建,简单的介绍了一下 Docker
架构,以及用 Docker
命令简单演示了一下如何拉去一个 images
镜像,下一篇将会带大家深入了解 Docker
的一些基本命令以及 Docker
容器是如何运行。