您的位置:首页 > 运维架构 > Docker

Ubuntu下安装docker以及简单介绍docker

2015-07-28 09:18 886 查看
英文参考地址:https://docs.docker.com/installation/ubuntulinux/



要求:这里必须要注意的是::::必须是64位的版本,而且内核必须大于3.10。

我使用的Ubuntu14.04 。在命令行下:uname -r 查看自己的内核版本:3.13.0-24-generic。

如果你是Ubuntu12.04 。还需要额外的配置,详情请看英文参考地址。

我是自己新安装的Ubuntu14.04的64位新版本,安装好以后,首先要做的两件事就是:

1)修改软件源,这样更新和下载软件就快得多。打开界面后,点击右上角:设置,选择系统设置,找到软件和更新,然后Ubuntu software选项卡下的download from。我一般选择的是中国的163源。

2)在命令行下执行:
sudo apt-get update
然后执行
sudo apt-get upgrade
3)重启系统。

4)安装VIM:
sudo apt-get install vim


下面进行docker的安装。

1)用一个有sudo权限的用户登录系统。

2)检查wget命令是否安装:which wget。如果没有显示路径,则:sudo apt-get install wget

3)安装最新版本的docker。这是通过脚本文件来安装的。
sudo wget -qO- https://get.docker.com/ | sh


4)确认是否安装正确:
sudo docker run hello-world


如果安装正确会显示:



docker的额外配置:

出现这个问题:Warning:
The
docker
group
is equivalent to the
root
user;
For details on how this impacts security in your system, see Docker
Daemon Attack Surfacefor details.解决办法如下:

创建一个docker组:假设你现在是用work用户登陆的,且具有sudo权限。

1)执行以下命令:
sudo usermod -aG docker work
这条命令创建docker组,把work用户添加到docker组

2)重新登录

3)不用sudo来执行:
docker run hello-world
<span style="font-family: KaiTi_GB2312; background-color: rgb(248, 248, 248);">如果同样出现上图的显示。则说明成功。</span>


出现这个问题:WARNING:
Your kernel does not support cgroup swap limit. WARNING: Yourkernel does not support swaplimit
capabilities. Limitation discarded.解决办法如下

调整内存和交换分区。

1)用带有sudo权限的用户登录系统

2)
sudo vi/etc/default/grub


3)修改:GRUB_CMDLINE_LINUX="cgroup_enable=memory
swapaccount=1"

4)保存并关闭文件

5)执行:sudo
update-grub

6)重启:
sudo shutdown -r now


出现这个问题:WARNING:
Local (127.0.0.1)
DNS resolver found in resolv.conf
and containerscan't use it. Using default external servers : [8.8.8.8 8.8.4.4]解决如下:

为docker用户配置DNS:

1)用带有sudo权限的用户登录系统

2)sudo
vi/etc/default/docker

3)
DOCKER_OPTS="--dns 8.8.8.8"


4)保存退出文件
5)
sudo restart docker


关于升级和卸载docker。请参考网址:https://docs.docker.com/installation/ubuntulinux/

什么是docker?:http://oilbeater.com/docker/2014/06/29/what-is-docker.html

官网的介绍是这样的:

docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....

其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。


为啥要用容器?

那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用Mysql那我就找个装好Mysql的容器,运行起来,那么我就可以使用 Mysql 了。

那么我直接装个 Mysql 不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装Mysql的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,Mysql 的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。

在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在
Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。

若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。

此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。


那为啥不用VM?

那么既然容器和 VM 这么类似为啥不直接用 VM 还要整出个容器这么个概念来呢?Docker 容器相对于 VM 有以下几个优点:

启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久

资源利用率高,一台普通 PC 可以跑上千个容器,你跑上千个 VM 试试

性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源

为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的。 VM 的设计图如下:



VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。而 Docker 的设计图是这样的:



Docker 几乎就没有什么虚拟化的东西,并且直接复用了 Host 主机的 OS,在 Docker Engine 层面实现了调度和隔离重量一下子就降低了好几个档次。 Docker 的容器利用了 LXC,管理利用了 namespaces 来做权限的控制和隔离, cgroups 来进行资源的配置,并且还通过 aufs 来进一步提高文件系统的资源利用率。

其中的 aufs 是个很有意思的东西,是 UnionFS 的一种。他的思想和 git
有些类似,可以把对文件系统的改动当成一次 commit 一层层的叠加。这样的话多个容器之间就可以共享他们的文件系统层次,每个容器下面都是共享的文件系统层次,上面再是各自对文件系统改动的层次,这样的话极大的节省了对存储的需求,并且也能加速容器的启动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: