linux容器,docker和linux之间的关系
大家好,关于linux容器很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于docker和linux之间的关系的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
如何在Ubuntu上借助Docker管理Linux容器
虽说标准的硬件虚拟化技术(比如KVM、Xen或Hyper-V)擅长于在一个物理主机上运行多个操作系统的完全隔离的实例,但这种虚拟化技术在性能、资源和资源配置时间等方面存在各种各样的开销。标准的机器虚拟化实际上可能没有必要,这取决于你的实际使用场合。
另外一种轻型虚拟化方法就是所谓的Linux容器(LXC),它提供了操作系统级别的虚拟化。由于不存在运行虚拟机带来的开销,LXC让用户可以在轻型容器沙盒里面运行标准Linux操作系统的多个实例。如果你搭建一个可复制的开发/测试环境,或者在安全沙盒里面部署应用程序,容器就派得上大用场。
Docker就是为了便于部署Linux容器而开发的这样一款开源工具。Docker正迅速成为容器技术方面的一项事实上的标准,已经被诸如Ubuntu和红帽之类的各大Linux发行版所采用。
我在本教程中将演示如何在Ubuntu 14.04上,借助Docker管理Linux容器。请注意:对Ubuntu的早期版本而言,操作步骤可能略有不同。
眼下,Ubuntu上可用的Docker程序包只支持64位系统。想在32位机器上运行它,你就要利用源代码构建32位版本的Docker(详见这里)。
安装Docker
借助apt-get命令,安装Docker是件轻而易举的事。
$ sudo apt-get install docker.io
为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。
$ sudo usermod-a-G docker$USER
退出,然后重新登录,以激活群组成员的变化。
下一步,编辑Docker配置文件,以便更新Docker二进制代码的位置。
$ sudo vi/etc/default/docker.io
DOCKER="/usr/bin/docker.io"
重启Docker服务。
$ sudo service docker.io restart
管理Docker容器
如果你想启动Ubuntu操作系统的一个新的Docker容器,首先需要获取Ubuntu Docker映像文件。下面这个命令会通过网络下载Docker映像文件。
$ docker pull ubuntu
你可以以一种交互模式来开启Ubuntu Docker,如下所示。最后一个参数“/bin/bash”是一旦启动就将在容器里面执行的命令,这里是一个简单的bash外壳命令。
$ docker run-i-t ubuntu/bin/bash
上述命令会立即启动一个Ubuntu容器(这正是容器的魅力所在!),并为你提供容器里面的外壳提示符。这时候,你应该能够访问沙盒环境里面的标准的Ubuntu操作系统了。
想退出Docker容器,在容器里面的提示符处键入“exit”。
你可以启动不同形式的容器。比如,想启动Fedora容器,请执行下面这个命令:
$ docker.io run-i-t fedora/bin/bash
如果本地没有Fedora Docker映像文件,该命令就会首先自动下载映像文件,然后启动Docker。
如果你想启动采用某个发行版版本的容器,也可以这么做。比如说,想启动Ubuntu 13.04 Docker,请执行下面这个命令:
$ docker.io run-i-t ubuntu:13.04/bin/bash
容器网络
Docker使用Linux网桥将容器彼此互联起来,并将它们连接到外部网络。安装了Docker后,你应该会看到默认情况下自动组建的docker0 Linux网桥。你创建的每个容器都将连接到docker0网桥接口。
自定义Linux网桥
如果你想,也可以使用自定义Linux网桥将诸容器互联起来。为此,你可以建立一个自定义网桥,并对它进行配置,如下所示。你可以为该网桥分配一个单独的子网,并且从子网为Docker分配IP地址。我会使用10.0.0.0/24作为Docker子网。
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
想让Docker使用自定义网桥,将“-b=br0”添加到/etc/default/docker.io中的DOCKER_OPTS变量,然后重启Docker服务。
$ sudo service docker.io restart
至此,任何新的容器都会连接到br0,其IP地址会自动从10.0.0.0/24来分配。
其他定制
还有另外几种方法可以定制Docker的默认网络设置,主要是通过改动/etc/default/docker.io中的DOCKER_OPTS变量来实现。
“-dns 8.8.8.8-dns 8.8.4.4”:指定容器使用的DNS服务器。
“-icc=false”:让诸容器彼此隔离开来。
故障排查
1.运行docker.io命令时,你会遇到下面这个错误。
dial unix/var/run/docker.sock: no such file or directory(没有此类文件或目录)
出现这个错误,可能是由于Docker守护程序没在运行。检查Docker守护程序的状态,确保先启动它。
$ sudo service docker.io status
$ sudo service docker.io start
LINUX 容器是什么东西啊有什么作用啊
单的说,Linux是Unix克隆(Unix clone)或Unix风格(Unix alike)
的操作系统(OS),在原代码级上兼容绝大部分Unix标准(指的是IEEE
POSIX,System V,BSD),是一个支持多用户,多进程,多线程,实时性
较好的功能
强大而稳定的操作系统.它可以运行在x86 PC,Sun Sparc,Digital Alpha
,680x0,PowerPC, MIPS等平台上,可
以说Linux是目前运行硬件平台最多的操作系统. Linux最大的特点在于
它是GNU(Gnu's Not Unix----有点分形与混沌的意味----无限自包含,
简单的说GNU是一种自由软件体系)的一员,遵循公共版权许可证(GPL),秉承
"自由的思想,开放的源码"的原则,成千上万的专家/爱好者通过Internet
在不断地完善并维护它,可以说Linux是计算机爱好者自己的操作系统.
追述Linux的历史直到1990年,Linus Torvalds还是芬兰赫尔辛基大
学的一名学生,最初是用汇编语言写了一个在80386保护模式下处理
多任务切换的程序,后来从Minix(Andy Tanenbaum教授所写的很小
的Unix操作系统,主要用于操作系统教学)得到灵感,进一步产生了
自认为狂妄的想法----写一个比Minix更好的Minix,于是开始写了
一些硬件的设备驱动程序,一个小的文件系统,......,这样0.0.1
版本的Linux就出来了,但是它只具有操作系统内核的勉强的雏形,
甚至不能运行,你必须在有Minix的机器上编译以后才能玩.这时候
Linus已经完全着迷而不想停止,决定踢开Minix,于是在1991年10
月5号发布Linux 0.0.2版本,在这个版本中已经可以运行bash
(the GNU Bourne Again Shell----一种用户与操作系统内核通讯的软件)
和gcc(GNU C编译器).从一开始,Linus就决定自由扩散Linux,包括原代码,
他在comp.os.minix新闻讨论组里发布Linux 0.0.2时写到:
"Do you pine for nice days of Minix-1.1, when mem were men
and wrote their own device drivers? Are you without a nice
project and just dying to cut your teeth on a OS you can
try to modify for your needs? Are you finding it frustrsting
when everything works on Minix? No more all-nighters to
get a nifty program working? Then this post might be just
for you.
"As I mentioned a month ago, I'm working on a free version
of a Minix-lookalike for AT-386 computers. It has finally
reached the stage where it's even usable(though may not be
depending on what you want),and I am willing to put out
the sources for wider distribution. It is just version
0.0.2... but I've successfully run bash,gcc,gnu-make,
gnu-sed,compress,etc.under it."
随即Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的
内核开发,Linux倾向于成为一个黑客的系统----直到今天,在Linux社区
里内核的开发被认为是真正的编程.由于一批高水平黑客的加入,使Linux
发展迅猛,到1993年底94年初,Linux 1.0终于诞生了! Linux 1.0已经是一
个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,
在4M内存的80386机器上也表现得非常好,至今人们还在津津乐道于此,
不过自从2.1.xx系列的内核Linux开始走高端的路子----硬件的发展太快了,
但是Linux不会失去它的本色.Linux具有良好的兼容性和可移植性,大约在
1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---Digital
Alpha(至少目前主频是最高的).所以不要总把Linux与低档硬件平台联系
到一块,Linux发展到今天,这是一个误区,它只是将硬件的性能充分发挥
出来而已,Linux必将从低端应用横扫到高端应用!
在Linux的发展历程上还有一件重要的事:Linux加入GNU并遵循公共
版权许可证(GPL).此举大大加强了GNU和Linux,几乎所有应用的GNU
库/软件都移植到Linux,完善并提高了Linux的实用性,而GNU有了一
个根基,我现在也搞不清楚到底是GNU Linux呢还是基于Linux的GNU.
:-)更重要的是遵循公共版权许可证,在继承自由软件的精神的前
提下,不再排斥对自由软件的商业行为(如把自由软件打包以光盘形
式出售),不排斥商家对自由软件进一步开发,不排斥在Linux上开发
商业软件.从此Linux又开始了一次飞跃,出现了很多的Linux发行版
,如Slackware,Redhat,Suse,TurboLinux,OpenLinux等十多种,而且
还在增加,注意你不能说"Redhat Linux""Suse Linux""Slackware
Linux"等等,Linux主要指操作系统内核,对所有发行版内核原代码
都是一样的(但集成的内核版本可能因发行时间不同而有所不同).
还有一些公司在Linux上开发商业软件或把其他Unix平台的软件移
植到Linux上来,如今很多IT业界的大腕如IBM,Intel,Oracle,Infomix
,Sysbase,Corel,Netscape,CA,Novell等都宣布支持Linux!商家的
加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计
算机爱好者,并且进入商业应用,正是打破某些公司垄断文化圈的希
望所在!!
Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十
分强大,比如你可以通过ftp,nfs等来安装Linux,用它来做网关等等.
随着Linux的发展衍生出来的应用恐怕出乎Linus本人最初的预料,
如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统.
.....常有新手问Linux能做什么,其实它不象那些中看不中用的操作
系统,不在于你用它能干什么,而在于你想干什么!
Linux的兴起还给人们很多启迪与思考,如集市式软件开发的讨论,
又如自由软件的精神......
.
参考资料:
什么是容器镜像 | Linux 中国
容器镜像包含了一个打包的应用,以及它的依赖关系,还有它在启动时运行的进程信息。
创建容器镜像可以通过提供一组特殊格式的指令来实现,可以将其提交给注册中心(Registry),或保存为 Dockerfile。例如,为 PHP Web应用创建的容器镜像 Dockerfile如下所示:
每一层指令都会在容器镜像中增加一个层(layer)。这些层堆叠在一起,形成一个只读的容器镜像。
联合文件系统(Union File System)内置于 Linux内核中,它允许将一个文件系统的内容与另一个文件系统的内容合并,同时保持“物理”内容的分离。这一机制减少了存储需求,因为多个镜像可以共享相同的数据,通过使用层来共享。
容器和镜像使用写时复制(copy-on-write)(COW)机制来实现效率。写时复制策略不是复制文件,而是将相同的数据实例共享给多个进程,并在需要修改或写入数据时进行复制。这使得容器和镜像可以在不占用大量磁盘空间的情况下启动。
叠加文件系统(Overlay File System)位于现有文件系统的顶部,结合了上层和下层的目录树,并将它们作为一个单一的目录来呈现。这种统一的过程被称为联合挂载(union mount)。
快照器(SnapShotter)与图驱动(graph driver)不同,因为它不用了解镜像或容器。快照器提供了一个用于分配、快照和挂载抽象的分层文件系统的 API。
本文介绍了容器镜像的分层方法以及如何使容器可移植。通过联合文件系统、写时复制和叠加文件系统,容器镜像不仅节省了存储空间,还优化了容器启动时间的性能。快照器简化了容器文件系统的管理。理解这些概念对于熟悉容器技术至关重要。