Docker 简介

Docker在现有云计算虚拟化中是非常火的一个项目,那么他和虚拟化有什么不同呢

Docker 简介

从上图来看,好像和我们之前说到的虚拟化并没有什么不同,但这里需要说明的是在各guest主机上,是没有操作系统的,他们共用Host主机上的内核空间,只对用户空间进行了隔离。

因此在这种环境下我们不把他称为虚拟化而称作容器。

此种方式的实现主要基于了linux内核自带的两项技术,分别是namespace和cgroup,下面解释下它们分别做了什么

 

Namespace

PID NameSpace:PID隔离。
Network NameSpace:网络设备、网络栈、端口等网络资源隔离。
User NameSpace:用户和用户组资源隔离。
IPC NameSpace:信号量、消息队列和共享内存的隔离。
UTS NameSpace:主机名和域名的隔离。
Mount NameSpace:挂载点(文件系统)隔离。

 

Cgroup

Resource limitation:资源限制。
Prioritization:优先级控制。
Accounting:审计和统计,主要为计费。
Control:挂起进程,恢复进程。
依靠上面所提到的技术,我们应该明白已经完全可以隔离用户空间了,甚至还可以进行对各空间的资源限定,当然要想正常使用,还需要依赖下面2样技术,也是内核所带的功能。

UnionFS:把不同的物理位置的目录合并到同一个目录中。(打个比方说就是把一个磁盘挂载至一个目录中,我们知道如果正常情况下挂载点里面所拥有的文件会被隐藏,基于此项技术,可以同时看到,也可以修改,但此种修改并不在原文件上生效,而是相当于在磁盘中新建的数据)

Device mapper:用于在内核中支持逻辑卷管理的通用设备映射机制

Docker就是依靠以上技术进行的一步封装,以便人们可以更方便的使用,就像很久前,我们提到的linux各发行版一样,如果你想学习linux,却只提供给你一个内核,相信没有多少人安装成功。

 

Docker于2013年发布,go语言研发,并遵从apache开原协议,C/S架构。

Docker的重要组件:

registry:主要提供各镜像文件(repository),以及镜像的元数据信息,还包括给各镜像创建索引分类(index)。

container:运行于host主机上的实例。

volume:在容器运行的应用程序,如果关闭,会删除容器中保存的数据,因此volume主要给容器和物理磁盘作一个映射关系,这样每个容器关闭或删除时上面的数据都会存在。

link:各实例的关联关系,类似于定义依赖关系。

docker通常用于运行单个任务,单个任务结束,即会退出实例。

下面就来简单演示下基于docker容器实现的lamp部署wordpress

配置好extras yum源

[root@localhost ~]# yum -y install docker

 

[root@localhost ~]# docker pull centos

直接安装并下载centos的image镜像,

Docker 简介

这里我已经有了两个镜像,一个是官网下的centos镜像,然后自己配置了一下yum源,新生成了一个镜像否则下载太慢。

下面就用两种方式生成image来完成对web和mariadb的部署。

先来web吧

[root@localhost ~]# docker run -it –rm centos:7 /bin/bash

-i:交互式运行

-t:打开一个伪终端

–rm:退出后直接删除实例

centos:7  指明运行的镜像

/bin/bash:运行的程序

[root@feba71b34795 /]# yum -y install httpd php php-mysql 

直接安装PHP HTTPD和php链接mysql所需要的包

Docker 简介

另外打开一个终端。接着使用docker ps 查看启动的容器ID,并使用docker commit 指明容器ID 并给此容器定义一个名字就生成新镜像了,使用docker images可以查看到。我们之前起的实例就可以关闭了~~~。

Docker 简介

重新起一个实例

 

-v:将host主机的/web目录挂载至/var/www/html  因为之前什么都没改,apache默认的根目录就在此,我们直接将此目录挂载出来。

-d:后台运行

-p:将本机的80端口映射为虚拟机的80端口,其实就是docker自己添加一条dnat规则

/sbin/http: 运行此命令 -DFOREGROUND 使其运行至前台,我们前面提到过,docker每个实例的生命周期为一个任务结束,所以要让他一直占据前台。

Docker 简介

接着在映射出的目录里面创建一个测试页,接着就可以尝试访问看能否访问到。

Docker 简介

 

可以看到我们直接访问虚拟机的80端口就能访问到我们提供的测试页了。 我们先不管这台容器了。

接着我们用dockerfile创建一个mariadb的实例出来。

[root@localhost mariadb]# docker build -f ./mariadb.df -t centos7:mariadb ./

-f :指明构建所用到的文件

-t :指明在images里面看到的标签

./:指明工作的目录

这里我是新建一个目录 然后在里面创建的文件

Docker 简介

 

 

注意 这里是两个文件 一个是构建的文件,一个是脚本。

在这里折腾许久,一直想直接一个文件写完,添加授权尝试了很多种方法都不行,会直接报没有mysql命令 ,要不就是语法错误,后来看了mariadb官方提供的镜像,发现他也是通过脚本来执行的,于是自己写了个简单的脚本。这里还有莫名其妙的地方,那就是后台启动了mariadb过后还是需要sleep两秒才能执行成功。最后呢 ,授权完了,任务也就完了,实例还会自己关,就偷了个鸡,tail -f 让他一直在前台刷新mariadb自己的日志。

接着启动实例吧

Docker 简介

启动实例并且查看运行中的实例 确定mariadb和http都在运行状态, 并且也已经看到了mariadb已经把初始化的目录正确的写入到host主机了。

接着去解压wordpress到host主机上的/web目录应该就完成了~

这里需要注意的是,我们不知道mariadb的地址,可以使用下面的命令查看

[root@localhost mariadb]# docker  inspect -f {{.NetworkSettings.IPAddress}} 3b7a7e94bb8e
172.17.0.3

后面的3b7a。。是容器ID

也可以不使用-f 显示容器的所有参数,如果只想看某一项就可以使用上面的格式查看

Docker 简介

接着在wordpress的配置页面里面填上这些就可以了。

Docker 简介

这里可以看到已经可以创建

Docker 简介

 

 

 

原创文章,作者:N24_Ghost,如若转载,请注明出处:http://www.178linux.com/71384

(0)
N24_GhostN24_Ghost
上一篇 2017-03-19
下一篇 2017-03-19

相关推荐

  • LVS详解及基于LVS实现web服务器负载均衡

    前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能、高可用的服务器群集,从而以低成本实现最优的服务性能。 集群基础 集群简介 集群(Cluster)是一组相互独立…

    Linux干货 2015-06-01
  • shell入门 (一)

    Shell就是一个命令行解释器 ,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。 Shell还有一种执行命令的方式称为批处理 (Batch),用户事先写一 个Shell脚本 (Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一…

    Linux干货 2017-08-26
  • Linux中的包管理

    1. RPM介绍 rpm是linux中的包管理软件,通过rpm用户可以对rpm包进行查询、安装、卸载、升级和校验等操作。 1.1 查询 查询 -q:可以查看某个包是否已经安装 -qa:查看系统已经安装的所有包 -qi:查询某个安装包的详细情况 -ql:查询安装某个包之后会生成哪些文件 -qc:查询某个软件的配置文件 -qd:查询某个软件的所有文档 &#821…

    Linux干货 2017-04-17
  • N28第五周

    1、简述rpm与yum命令的常见选项,并举例
    2、自建yum仓库,分别为网络源和本地源
    3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
    4、简述sed常用操作命令,并举例

    Linux干货 2018-01-03
  • week4

    一,复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没 有任何访问权限; cp -r /etc/skel/ /home/tuser1 chmod -R go= /home/tuser1/ 二,编辑/etc/group文件,添加组hado…

    Linux干货 2016-11-18
  • Centos网卡bond

    Centos6_Bonding配置: 1.禁用NetworkManager服务  2.创建bonding设备的配置文件 3.添加从属接口1 4.添加从属接口2 5.重启网卡服务 6.查看bond0状态 7.删除bond配置 Centos7_Bonding配置: 1.添加bonding接口 2.添加从属接口1 3.添加从属接口2 4.修改bondin…

    2017-05-17

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-29 17:35

    不错的docker应用,下次可以尝试使用dockerfile来生成镜像,加油。