当前,完全硬件虚拟化技术(KVM、Xen、Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等。有时候对用户来说,完全的硬件虚拟化并不是最好的选择。

一种替代方案是使用轻量级虚拟化技术 —— 所谓的 LinuX Container 容器 (LXC),它提供的是系统级虚拟化。与跑虚拟机相比,LXC 可以在一个轻量级沙箱容器里面跑多个 Linux 操作系统。当你需要设置一些易于克隆的开发环境、测试环境,或想在安全沙盒里安装应用时,LXC 就非常有用了。

Docker 是一个开源工具,可以让用户方便地布署 Linux Container 容器。Docker 很快变成了 container 技术的非官方标准,从而被 Ubuntu 和 Red Hat等众多发行版吸收进去。

本教程中我会向你们演示如何在 Ubuntu 14.04 中使用 Docker 来管理 LXC。需要注意的是,本教程的一些内容可能会与其他 Ubuntu 版本下的操作会稍微有些出入。

当前Ubuntu 系统下的 Docker 的安装包只提供64位。如果你想运行32位的 Docker,你需要使用源码编译32位 Docker 工具。

继续进行分布式开发,下面开始在Ubuntu14.04下安装Docker。

注:Ubuntu上可用的Docker程序包只支持64位系统。想在32位机器上运行它,你就要利用源代码构建32位版本的Docker,建议使用64位的。

Docker利用Linux容器(LXC)虚拟化技术提供一份部署环境。Docker目的是创建可移植,可分发给任何的Docker环境中运行。Docker由于是OpenVZ的作品,对内核有一些要求。

1.安装

安装Docker使用apt-get命令(若为非root用户,需在命令前添加sudo):

apt-get install docker.io

启动服务和守护进程

service docker.io status

service docker.io start

创建软连接,以便在外壳上使用起来更容易。

ln -sf /usr/bin/docker.io /usr/local/bin/docker

如没有提示错误则说明你已经在Ubuntu14.04上面快速安装Docker成功了。

读者也可通过下面的方法从Docker 官方源安装最新版本。首先需要安装apt-transporthttps,

并添加Docker 官方源:

sudo apt-get install apt-transport-https

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7

869245C8950F966E92D8576A8BA88D21E9

sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/

sources.list.d/docker.list"

sudo apt-get update

之后,可以通过下面的命令来安装最新版本的Docker:

sudo apt-get install -y lxc-docker

在安装了Docker 官方软件源后,若需要更新Docker 软件版本,只需要执行以下命令即可升级:

sudo apt-get update -y lxc-docker

如果使用的是较低版本的Ubuntu 系统,则需要先进行内核更新并重启系统后再进行安装:

sudo apt-get update

sudo apt-get install -y linux-image-generic-lts-raring linux-headers-genericlts-

Raring

sudo reboot

重启后,重复在Ubuntu 14.04 系统的安装步骤即可。

注:在安装过程中应尽量做到将以上脚本命令整理好放在一个脚本中,以便以后进行一键式部署安装。

2.准备外壳环境

现在,我将把我的user=shq添加到docker组:

sudo usermod -a -G docker shq

或者使用:

sudo usermod -a -G docker $USER

这里,我会退出当前会话,然后再重新登录。现在,我将添加docker配置文件,以便向系统通知其位置。

sudo vi /etc/default/docker.io

DOCKER="/usr/bin/docker.io"

现在重启服务,如下所示:

sudo service docker.io restart

3.管理docker容器

3.1.下载ubuntu docker容器

安装完成后,可以使用下面的命令确定安装的版本和基本的信息。由于docker使用go语言进行编写的,所以要依赖于GO的编译工具和库文件。若要查看Docker版本信息,可输入如下命令:

sudo docker version

以下为提示信息:

镜像是Docker 运行容器的前提。

官方安装方式docker pull imagename从docker的索引中心下载,imagename是镜像名称,例如docker pull ubuntu就是下载base ubuntu并且tag是latest。pull命令用于从注册中心(registry)拉取映像或软件库。(使用pull 命令从Docker Hub仓库中下载镜像到本地)

sudo docker pull ubuntu:14.04

以下为提示信息:

Pulling repository ubuntu

c4ff7513909d: Download complete

511136ea3c5a: Download complete

1c9383292a8f: Download complete

9942dd43ff21: Download complete

d92c3c92fa73: Download complete

0ea0d582fd90: Download complete

cc58e55aa5a5: Download complete

上面的命令即从默认的注册服务器registry.hub.docker.com 中的ubuntu 仓库来下载标记为latest 的镜像。

用户也可以选择从其他注册服务器的仓库下载。此时,需要在仓库名称前指定完整的仓

库注册服务器地址。例如从DockerPool 社区的镜像源dl.dockerpool.com 下载最新的

Ubuntu 镜像。

sudo docker pull dl.dockerpool.com:5000/ubuntu

下载完成后,你也可以使用docker images 命令可以列出本地主机上已有的镜像。

sudo docker images

以下为提示信息:

使用docker inspect 命令可以获取该镜像的详细信息。

sudo docker inspect 5506de2b643b

docker inspect 命令返回的是一个JSON 格式的消息,如果我们只要其中一项内容

时,可以使用-f 参数来指定,例如,获取镜像的Architecture 信息:

sudo docker inspect -f {{".Architecture"}} 550 amd64

在指定镜像ID 的时候,通常使用该ID 的前若干个字符组成的可区分字串来替代完整的 ID。

使用docker ps -a 命令可以看到本机上存在的所有容器:

sudo docker ps -a

列出当前运行的容器, -a 会列出所有,包括已停止的, -q 只列出容器 ID,使用如下命令:

docker ps -a -q

删除所有未运行的容器,使用如下命令:

docker ps -a -q | xargs docker rm

4.启动docker容器

注:容器依赖于镜像。

下面的命令启动 Docker 里面的 Ubuntu 系统,进入交互的Shell中,最后的参数“/bin/bash”表示一旦容器启动,首先会执行简单的 bash。登录进入到Ubuntu容器的bash外壳:

sudo docker run -i -t ubuntu:14.04 /bin/bash

查看当前镜像信息,输入如下命令:

cat /etc/lsb-release

显示如下信息:

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=12.04

DISTRIB_CODENAME=precise

DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

下面的内容见“分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(二)

分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)的更多相关文章

  1. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(二)

    4.1 构建我们自己的映像 构建Docker映像有两种方法: •通过docker commit(提交)命令 •通过docker build(构建)命令以及Docker文件(Dockerfile) 目前 ...

  2. 分布式进阶(四)Ubuntu 14.04下安装Tomcat 6

    Ubuntu 10.04下安装Tomcat 6 1,下载apache-tomcat6, 地址链接:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0 ...

  3. Ubuntu 14.04 下安装 OpenCV

    参考: Installation in Linux Error compiling OpenCV, fatal error: stdlib.h: No such file or directory 图 ...

  4. Ubuntu 14.04下安装功能强大的屏幕截图软件 Shutter

    [注释]试用了一下,果然很强大,牛逼 一款功能强大的屏幕截图软件——Shutter,Shutter最基本的就是截图功能了,在设计上可以自由选定区域,同时选定之 后依然可以通过上下左右四个地方来改变选区 ...

  5. Ubuntu 14.04 下 安装Protocol Buffers

    参考: Protocol Buffers - Google's data interchange format Ubuntu 14.04 下 安装Protocol Buffers 环境 Ubuntu ...

  6. Ubuntu 14.04 下安装Skype

    操作1: Ubuntu 14.04 下安装Skype,使用 Ctr+Alt+T组合键打开终端Terminal,输入如下即可: wget -O skype.deb http://download.sky ...

  7. [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

    新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...

  8. Ubuntu 14.04下安装GitLab指南

    摘要 GitLab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 在GitLab的官方网站上面对Ubuntu的支持也是很好的,有比较详尽的安装指南. ...

  9. Ubuntu 14.04下安装CUDA8.0

    配置环境如下: 系统:Ubuntu14.04 64bit 显卡:Nvidia K620M 显卡驱动:Nvidia-Linux-x86_64-375.66.run CUDA8.0 +  cudnn8.0 ...

随机推荐

  1. Go 处理yaml类型的配置文件

    先说一下,这里用到了很多关于反射类型的功能,可能刚开始看代码,如果对反射不熟悉的可能会不是非常清晰,但是同时也是为了更好的理解golang中的反射,同时如果后面想在代码中可以直接从我的git地址get ...

  2. PHP 字符串变量

    PHP 字符串变量 字符串变量用于存储并处理文本. PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量 ...

  3. Jmeter(七)_if控制器+循环控制器+计数器控制接口分支

    最近查阅了一下网上关于if控制器的文章,大同小异,几乎找不到原创,于是决定自己写一篇 下午测试接口,遇到了一个审核的流程.逻辑很简单,就是审核不通过之后返回去继续修改再提交,然后再审核,直到通过为止. ...

  4. 阅读源码(III)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...

  5. 操作系统内核Hack:(三)引导程序制作

    操作系统内核Hack:(三)引导程序制作 关于本文涉及到的完整源码请参考MiniOS的v1_bootloader分支. 1.制作方法 现在我们已经了解了关于BootLoader的一切知识,让我们开始动 ...

  6. 自定义view实现阻尼效果的加载动画

    效果: > 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减 ...

  7. pdflush进程详解

    一.简介     由于页高速缓存的缓存作用,写操作实际上会被延迟.当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据.在内存中累积起来的脏页最终必须被写回磁盘.在以下两种情况发生时, ...

  8. Android 实现串口的移植

    安卓串口的实现,需要底层C++配合,不过这次我们根据framework中的思想,直接用API修改提供给JAVA层调用,这个就比较简单了. DEV项目需要,要实现在Android中实现串口的收发功能,有 ...

  9. Swift中String和NSString的一个不同之处

    我们知道在Swift中String和NSString是可以互相转换使用的-额-应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们 ...

  10. 微信小程序基础之交互操作控件

    好久没有写关于微信小程序的文章了,今天简单的发表一篇,内容比较简单,包括:ActionSheet上拉菜单.AlertAction提示框.SuccessAction完成框.LoadingAction加载 ...