目录
2.3、通过检查 Docker 版本查看 Docker 服务
随着计算机近几十年的蓬勃发展,产生了大量优秀系统和软件。软件开发人员可以自由选择各种软件应用。但同时带来的问题就是需要维护一个非常庞大的开发、测试和生产环境。 面对这种情况,Docker 容器技术横空出世,提供了简单、灵活、高效的解决方案,不需要过多地改变现有的使用习惯,就可以和已有的工具,如 OpenStack 等配合使用。因此,掌握 Docker 相关技术也是 途经云计算的必经之路。
本章将依次介绍 Docker 的三大核心概念——镜像、容器、仓库,以及安装 Docker 与介绍围绕镜像和容器的具体操作。
一、Docker 概述
因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。
Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中 一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变 化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。
Docker 产品的 Logo
1.1、什么是 Docker
如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。
1.2、Docker 的优势
Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。 Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。下表将 Docker 容器技术与传统虚拟机的特性进行了比较。
特性 | Docker 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗 50% 左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源限制 | 完全隔离 |
Docker 容器与传统虚拟机的区别
Docker 之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。下图是 Docker 与传统虚拟机架构。
Docker 与传统虚拟机架构
1.3、镜像
镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 CentOS 操作系统环境,称为一个 CentOS 镜像;也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL 镜像等等。
Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。
1.4、容器
Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境, Docker 利用容器来运行和隔离应用。
1.5、仓库
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是 docker Hub,存放了数量庞大的镜像供用户下载使用。
二、安装 Docker
Docker 支持在主流的操作系统平台上进行使用,包括 Windows 系统、Linux 系统、以及 Mac OS 系统等。目前最新的 RHEL、CentOS 以及 Ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。
CentOS 系统下安装 Docker 可以有两种方式:一种是使用 CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。
注意:目前 Docker 只能支持 64 位系统。
2.1、安装 Docker 依赖版本环境
[root@centos7-13 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@centos7-13 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.2、安装 Docker 并设置为开机自启
[root@centos7-13 ~]# yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15
[root@centos7-13 ~]# systemctl start docker
[root@centos7-13 ~]# systemctl enable docker
安装好的 Docker 系统有两个程序,Docker 服务端和 Docker 客户端。其中 Docker 服务端是一个服务进程,负责管理所有容器。Docker 客户端则扮演着 Docker 服务端的远程控制器,可以用来控制 Docker 的服务端进程。大部分情况下 Docker 服务端和客户端运行在一台机器上。
2.3、通过检查 Docker 版本查看 Docker 服务
[root@centos7-13 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.15
API version: 1.40
Go version: go1.13.15
Git commit: 99e3ed8919
Built: Sat Jan 30 03:17:57 2021
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.15
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 99e3ed8919
Built: Sat Jan 30 03:16:33 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.32
GitCommit: 8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.18.0
GitCommit: fec3683
三、Docker 镜像操作
运行 Docker 容器前需要本地存在对应的镜像。如果不存在本地镜像,Docker 就会尝试从默认镜像仓库下载。镜像仓库是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求。 用户也可以通过配置来使用自定义的镜像仓库。
下面具体介绍如何操作 Docker 镜像。
3.1、搜索镜像
在使用下载镜像前,可以使用 docker search 命令搜索远端官方仓库中的共享镜像。
命令格式:docker search 关键字
例如:搜索关键字为 nginx 的镜像的执行命令和结果如下:
[root@centos7-13 ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 19876 [OK]
bitnami/nginx Bitnami container image for NGINX 187 [OK]
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 149
nginxproxy/nginx-proxy Automated nginx proxy for Docker containers … 137
nginxproxy/acme-companion Automated ACME SSL certificate generation fo… 133
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 112
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 90
nginx/unit This repository is retired, use the Docker o… 63
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 40
bitnami/nginx-ingress-controller Bitnami container image for NGINX Ingress Co… 33 [OK]
unit Official build of NGINX Unit: Universal Web … 29 [OK]
nginxproxy/docker-gen Generate files from docker container meta-da… 17
rancher/nginx-ingress-controller 13
kasmweb/nginx An Nginx image based off nginx:alpine and in… 7
nginxinc/nginx-s3-gateway Authenticating and caching gateway based on … 6
bitnami/nginx-exporter Bitnami container image for NGINX Exporter 5
nginxinc/ingress-demo Ingress Demo 4
rancher/nginx-ingress-controller-defaultbackend 2
nginx/nginx-ingress-operator NGINX Ingress Operator for NGINX and NGINX P… 2
nginx/nginx-quic-qns NGINX QUIC interop 1
nginxinc/amplify-agent NGINX Amplify Agent docker repository 1
nginxinc/ngx-rust-tool 0
nginxinc/mra_python_base 0
nginxinc/mra-fakes3 0
执行 docker search nginx 命令后,返回很多包含 nginx 关键字的镜像,其中返回信息包括镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序,表示该镜像受欢迎程 度。在下载镜像时,可以参考星级。在搜索时,还可以使用 -s 或者 --stars=x 显示指定星级以上的镜像,星级越高表示越受欢迎;是否官方创建是指是否是由官方项目组创建和维护的镜像,一般官方项目组维护的镜像使用单个单词作为镜像名称,称为基础镜像或者根镜像。像 bitnami/nginx 这种命名方式的镜像,表示是由 docker Hub 的用户 bitnami 创建并维护的镜像,带有用户名为前缀; 是否主动创建是指是否允许用户验证镜像的来源和内容。
使用 docker search 命令只能查找镜像,镜像的标签无法查找,因此如果需要查找 Docker 标签,需要从网页上访问镜像仓库进行查找。
3.2、获取镜像
搜索到符合需求的镜像,可以使用 docker pull 命令从网络下载镜像到本地使用。
命令格式:Docker pull 仓库名称[:标签]
对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签,也可通过指定的标签来下载特定版本的某一镜像。这里标签 (tag)就是用来区分镜像版本的。
例如:下载镜像 nginx 的执行命令和结果如下:
[root@centos7-13 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
09f376ebb190: Pull complete
a11fc495bafd: Pull complete
933cc8470577: Pull complete
999643392fb7: Pull complete
971bb7f4fb12: Pull complete
45337c09cd57: Pull complete
de3b062c0af7: Pull complete
Digest: sha256:a484819eb60211f5299034ac80f6a681b06f89e65866ce91f356ed7c72af059c
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
从整个下载的过程可以看出,镜像文件是由若干层(Layer)组成,称之为 AUFS(联合文件系统),是实现增量保存与更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。
用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。