docker目前作为容器技术使用最为广泛的容器技术,可以说已经成为了容器技术的代名词。在介绍docker之前首先介绍一下容器技术和虚拟机技术的区别,区分好容器和虚拟机这两个概念,便能够很好得理解容器技术。
首先介绍一下虚拟机技术,一台虚拟机需要模拟整台机器包括硬件。每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机都至少包括应用,必要的二进制和库,以及一个完整的用户操作系统。之前介绍的openstack云平台管理项目,其管理分配的计算,网络和存储等资源即通过虚拟机的形式呈现给用户来使用。因为openstack的主要功能为计算网络存储资源的分配,因此openstack属于Iaas层的技术。
而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行,以linux容器技术例,Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。可以说,容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。docker属于linux容器的封装,属于 Linux 容器的一种封装,提供简单易用的容器使用接口,它是目前最流行的 Linux 容器解决方案。docker可以把一个应用以及应用所依赖的环境打包成一个包,这个包也就是镜像image,这个镜像可以在不同的环境中原生运行,成为一个容器Container,这样就为用户提供了一个环境来保证该应用的开发测试运维环境的一致性,因此docker属于Paas层的技术。镜像image,容器container以及存放image的公有和私有仓库regsitry是docker中的最基本概念。
以docker为基石容器生态系统,包含核心技术,平台技术和支持技术,下面将针对这三部分内容分别进行介绍
容器核心技术是指能够让container在host上运行起来的那些技术,主要包括容器规范,容器runtime,容器管理工具,容器定义工具,仓库Registries和容器OS:
前面介绍的容器核心技术可以让容器能够在单个host上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术包括容器编排引擎,容器管理平台和基于容器的Paas:
多容器集群的实现和健康运行,需要在网络,服务发现,日志监控等多方面技术上提供支持,这部分即为容器支持技术。容器支持技术,包括容器网络,服务发现,监控,数据管理,日志管理和安全性等方面:
单主机下docker的安装与配置相对来说比较简单(相比较openstack需要用多篇博文来讲解各个组件的配置来说…),这里不再作介绍。我们接下来介绍一种能够在多主机上安装配置docker的工具——docker machine,用docker machine可以批量安装和配置docker host。我们的实验环境为一台安装了linux系统的宿主机192.168.1.102,两台运行在virtualbox中的虚拟机192.168.1.104和192.168.1.105,系统均为ubuntu16。首先要配置宿主机在root账号下免密码ssh登录两台虚拟机,具体方法可参考我之前写的博文https://blog.csdn.net/weixin_41977332/article/details/104130967。之后在宿主机上安装docker-machine,官方安装文档在https://docs.docker.com/machine/install-machine/,主要是在root用户下执行如下命令
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
执行完安装命令后,若在命令行执行docker-machine version能够显示docker-machine的版本,证明docker-machine安装成功。
对于docker machine来说,术语Machine就是运行docker daemon的主机,创建Machine就是在host上安装和部署docker,以在虚拟机192.168.1.104上部署docker为例,在该虚拟机上创建host1的命令如下:
docker-machine create --driver generic --generic-ip-address=192.168.1.104 --engine-registry-mirror http://XXXXX.m.daocloud.io host1
其中–driver部分的参数,因为我们要在linux系统中安装docker,所以使用generic driver,其他的driver可参考https://docs.docker.com/machine/drivers/。–engine-registry-mirror为配置国内加速镜像,因为在国内的网络环境中可能会因为网络问题导致安装失败,所以需要去daocloud.io网站上注册一个用户,然后获取加速镜像网址。
如果安装成功的话,在安装了docker-machine的宿主机上执行docker-machine ls 命令,能够显示host相关的信息,如下所示:
如果我们需要在宿主机上登录host1,可以通过如下命令来进行访问
docker-machine env host1
会显示如下内容
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.1.104:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/host1"
export DOCKER_MACHINE_NAME="host1"
# Run this command to configure your shell:
# eval $(docker-machine env host1)
所以接下来执行eval $(docker-machine env host1)即可进入host1环境
注意,在未配置bash completion script之前,方括号内的host1是不会显示的,此时很难判断是否进入host1环境中,因此需要配置bash completion script,其步骤如下:
首先下载三个脚本
git clone https://github.com/docker/machine/contrib/completion/bash
将三个脚本放到/etc/bash_completion.d中
将如下代码添加到~/.bashrc中
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
source /etc/bash_completion.d/docker-machine-wrapper.bash
source /etc/bash_completion.d/docker-machine-prompt.bash
source /etc/bash_completion.d/docker-machine.bash
退出root用户exit,重新登录su后,通过docker-machine登录host1即能显示如上内容。