应用场景
给你一台笔记本,笔记本的系统是windows的,如果想使用linux系统,那么得在windows上安装虚拟机,然后安装linux系统,一般一台8G内存的笔记本,可以建并启动6-7个1G内存的linux虚拟机,如果再创建并启动虚拟机那么电脑将无法承受,如果用了docker技术,那么就可以建成千上万个docker容器,一个docker容器就相当于一个linux虚拟机,它可以将计算机资源利用最大化,效率化,所以docker是一个虚拟的技术。
docker概述
1.1 docker简介
Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它。Docker 是一种“轻量级”容器技术,几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了。
先来回顾一下传统虚拟化技术的体系架构:
可见,我们在宿主机的操作系统上,可安装多个虚拟机,而在每个虚拟机中,通过虚拟化技术,实现了一个虚拟操作系统,随后,就可以在该虚拟操作系统上,安装自己所需的应用程序了。
我们知道,启动虚拟机就像启动一台计算机,初始化过程是相当慢的,需要等很久,才能看到登录界面。一旦虚拟机启动以后,就可以与宿主机建立网络连接,确保虚拟机与宿主机之间是互联互通的。不同的虚拟机之间却是相互隔离的,也就是说,彼此并不知道对方的存在,但每个虚拟机占用的都是宿主机的硬件与网络资源。
我们再来对比一下 Docker 技术的体系架构吧:
可见,在宿主机的操作系统上,有一个 Docker 服务在运行(或者称为“Docker 引擎”),在此服务上,我们可开启多个 Docker 容器,而每个 Docker 容器中可运行自己所需的应用程序,Docker 容器之间也是相互隔离的,同样地,都是占用的宿主机的硬件与网络资源。
Docker 容器相对于虚拟机而言,除了在技术实现上完全不一样以外,启动速度较虚拟机而言有本质的飞跃,启动一个容器只在眨眼瞬间。不管是虚拟机还是 Docker 容器,它们都是为了隔离应用程序的运行环境,节省我们的硬件资源,为我们开发人员提供福利。
我们再来看看 Docker 的 Logo 吧:
很明显,这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。
1.2 docker应用
docker能干些什么?
- 1、加速本地开发(通过Docker能够快速搭建好开发和运行环境,并且该环境可以直接传递给测试和产品部署)
- 2、自动打包和部署应用
- 3、创建轻量、私有的PasS环境(例子:http://www.alauda.cn/,比如在林雀云上创建了centos7,本地就能进入虚拟机访问容器)
- 4、自动化测试和持续集成部署
- 5、部署并扩展Web应用、数据库和后端服务
- 6、创建安全沙盒(使容器隔离)
- 7、轻量级的桌面虚拟化(虚拟桌面,做为一个镜像进行管理,例子https://www.shiyanlou.com/课程里,给每个用户每堂课准备一台虚拟机,都是docker虚拟化的)。
1.3 docker三大核心
另外,docker主要包括三大核心概念,理解了这三个核心概念,就能理解docker的整个生命周期:
- 1、镜像:类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统,镜像是创建Docker容器的基础。
- 2、容器:类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。镜像自身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。
- 3、仓库:类似于代码仓库,是docker集中存放镜像文件的场所。
环境准备
2.1 环境配置
试验环境为:windows7系统,内存8G,固态硬盘120G,硬盘450G,ip为192.168.117.66,在windows7系统上,安装VMware,创建两个虚拟机,安装centos7.1系统,两个虚拟机内存2G,硬盘30G,ip分别为192.168.199.31(docker1),192.168.199.32(docker2)。
Docker私有仓库地址:192.168.199.31 hostname:docker1
Docker客户端地址: 192.168.199.32 hostname:docker2
2.2 配置虚拟机
首先在本地windows环境安装vmware,然后创建两个虚拟机,安装centos7.1系统(可以用centos6.5,但是需要升级内核,比较繁琐,还是用7.1好,一步到位,并且centos6.5和centos7.1安装docker以后的文件名,文件地址都不一样,可能和后文的操作不同,建议centos7.1),装好以后需要配置网路,主机名,关闭防火墙等,操作如下。
2.2.1. 修改hostname
安装完虚拟机,进入centos7.1系统后,进入控制台,由于centos7.1的命令与centos6.5等,有所区别,这里修改hostname输入如下命令:
# sudo hostnamectl --static set-hostname <host-name>
上面命令的host-name根据文中设置为docker1,另一个设置为docker2。
2.2.2. 关闭防火墙
关闭防火墙输入如下命令:
# systemctl stop firewalld
禁用防火墙输入如下命令:
# systemctl disable firewalld
2.2.3. 关闭selinux
# vi /etc/selinux/config
将SELINUX=enforcing修改为SELINUX=disabled。
2.2.4. 配置网络
由于设置虚拟机网络需要确定网段,确定网段方法如下:
- 打开VMWare
- 点开虚拟网络编辑器,按下图示点击
- 查看自己虚拟机所对应的网段
因此,本地试验环境的虚拟机网段是199,各台机器可能不一样,需要查看后再进行网络配置。
配置centos7虚拟机网络,输入如下命令:
# vi /etc/sysconfig/network-scripts/ifcfg-ens192
注:最后的ipcfg-ens192文件,另一台机器可能不是个文件名,自己找虚拟机中的ifcfg-ens+一串数字的文件,进行修改。
修改如下:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=2d0d964b-91d1-4810-9eb7-b523689420d2
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.199.31
PREFIX=24
GATEWAY=192.168.199.2
DNS1=114.114.114.114
然后重启网络:
# systemctl restart network.service
安装docker
安装docker,输入如下命令:
# yum install docker
# yum upgrade device-mapper-libs
# service docker start
# chkconfig docker on
查看docker状态:
# service docker status