2016-3-8

从网络服务商那里申请到一台Ubuntu测试服务器,用来测试安装Docker环境。

注:本人初学Docker,对Linux命令也仅是稍稍了解,如有错误,烦请告知。


查看系统相关信息

可使用命令uname -auname -rlsb_release -a 查看:

$ uname -a
> Linux zabbix 3.2.0-29-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

或:

$ uname -r
> Linux zabbix 3.2.0-29-generic

或:

$ lsb_release -a
root@zabbix:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: precise
root@zabbix:~#

可看到当前的系统是 Ubuntu 12.04.2 LTS x86_64 Linux zabbix 3.2.0-29-generic

Ubuntu 12.04.2 LTS 64位 内核版本是 3.2.0-29-generic


插曲1:升级Package

这是测试时在网上找到的一种方法,经测试后发现这种方式只是更新了Package,并没有升级内核版本。

即只是将系统从 12.04.2 LTS 升级到了 12.04.5 LTS 版本。

运行命令:

  1. 升级包管理器
$ sudo apt-get update
  1. 执行升级Package命令
$ sudo apt-get dist-upgrade
  1. 重启
$ sudo reboot

等待执行完成后,通过命令uname -a 查看系统信息:

$ uname -a
> Linux zabbix 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

插曲2:升级到 ‘14.04.4 LTS’

上面的 “插曲1:升级Package” 执行完成后,再次用ssh登陆后会有更新提示:

ssh登陆后有更新提示:

Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.2.0-100-generic x86_64)

总结命令可能是:

$ sudo apt-get update
$ sudo apt-get do-release-upgrade
$ sudo reboot

看网上的评论说这种方式更新后偶有出现黑屏等不稳定情况,另外升级的时间也会太长,所以未尝试该方法。

上面的两个插曲可直接忽略,不影响下面的内核版本升级


升级Ubuntu的内核版本

Docker 官网上要求Docker需要在64位版本的Ubuntu上安装,并且还要保证 Ubuntu 内核的最小版本不低于 3.10。

从网上找到了两种内核版本:

  • 3.8 内核版本:
$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
  • 3.13 内核版本:
$ sudo apt-get update
$ sudo apt-get install linux-generic-lts-trusty

这里sudo apt-get install linux-generic-lts-trusty 也可以拆成两句:

$ sudo apt-get install linux-image-generic-lts-trusty
$ sudo apt-get install linux-headers-generic-lts-trusty

总结最后的升级内核步骤,linux系统内核从3.2.0-100-generic升级到3.13版本:

  1. 升级包管理器
$ sudo apt-get update
  1. 安装升级内核3.13必需和可选的依赖包
$ sudo apt-get install linux-generic-lts-trusty
  1. 重启系统
$ sudo reboot

升级步骤记录:

  1. 安装前查看:
root@zabbix:~# uname -a
Linux zabbix 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@zabbix:~#
root@zabbix:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.5 LTS
Release: 12.04
Codename: precise
root@zabbix:~#
  1. 执行上面的安装命令
  2. 安装后查看:
root@zabbix:~# uname -a
Linux zabbix 3.13.0-81-generic #125~precise1-Ubuntu SMP Thu Mar 3 11:31:33 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@zabbix:~#
root@zabbix:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.5 LTS
Release: 12.04
Codename: precise
root@zabbix:~#

系统内核从3.2.0-100-generic升级到了3.13.0-81-generic,接下来可以安装Docker环境了。


Docker 环境安装

Docker 的安装可查看官方的安装教程: Docker官方安装教程

Docker安装总结:

  1. 以sudo管理员身份登陆,这里以root账户登录
  2. 判断系统中 curl 命令是否安装:
$ whereis curl

如果已经安装,则会输出curl命令所在的目录

3. 如果没有安装curl,则执行安装命令:

$ sudo apt-get update
$ sudo apt-get install curl
  1. 安装Docker:
$ curl -fsSL https://get.docker.com/ | sh

也有命令为:

$ curl -sSL https://get.docker.com/ | sudo sh
  1. 系统会要求输入sudo账户密码,等待安装docker及其依赖项。
  2. 安装完成后,会显示当前Docker的版本信息。
  3. 在Ubuntu系统下执行Docker命令时,每次都要输入sudo,同时输入密码,很累人的。 Docker 会提示将当前用户root 添加到docker 用户组中,可执行命令:
$ sudo usermod -aG docker root

注:这里的root可换成你自己的登陆账户

8. 重启系统

$ sudo reboot
  1. 查看上面的命令是否生效
$ docker version
  1. 至此,Docker服务就安装完成了。

在Docker下运行一个输出Hello Docker的程序:

执行命令:

$ docker run busybox /bin/echo "Hello Docker"
Hello Docker

如果本地不存在busybox镜像,docker 会自动从官网下载相关镜像。

在Docker下搭建一个Nginx服务器:

  1. 从Docker Hub官网下载一个Ubuntu镜像:
$ docker pull ubuntu:14.04
  1. 以交互方式启动一个名称为web的容器,指定宿主机的8080端口指向容器web80端口:
$ docker run -it --name web -p 8080:80 ubuntu:14.04

然后可以看到命令提示符由 root@zabbix:~# 变成了形如 root@45738573634:~# 的形式,说明我们现在成功进入了这个名为web的容器中;

3. 在web容器内执行命令:

$ sudo apt-get install -y curl
$ sudo apt-get install -y nginx
  1. web容器内输入命令:
$ curl localhost

可以看到输出了Nginx的欢迎信息Welcome to nginx!

5. 因为我的宿主服务器现在是联网的,所以我可以在外网访问到该Docker容器web里的Nginx欢迎页面:

至此,我们的Nginx服务器就搭建完成了。


相关网址及参考:


该文章同步发表在本人简书及博客园下,如有转载请注明出处。

ubuntu 12.04 安装Docker 实战的更多相关文章

  1. [笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程

    Docker的好处之一,就是在Container里面可以随意瞎搞,不用担心弄崩Host的环境. 而nvidia-docker2的好处是NVidia帮你配好了Host和Container之间的CUDA相 ...

  2. [笔记] Ubuntu 18.04安装Docker CE及NVIDIA Container Toolkit流程

    之前写的[笔记] Ubuntu 18.04安装Docker CE及nvidia-docker2流程已经out了,以这篇为准. Docker的好处之一,就是在Container里面可以随意瞎搞,不用担心 ...

  3. Ubuntu 20.04安装Docker

    Docker学习系列文章 入门必备:十本你不容错过的Docker入门到精通书籍推荐 day1.全面的Docker快速入门教程 day2.CentOS 8.4安装Docker day3.Windows1 ...

  4. Ubuntu 12.04 安装 Apache2+PHP5+MySQL

    LAMP是Linux web服务器组合套装的缩写,分别是Apache+MySQL+PHP.此教程教大家如何在Ubuntu 12.04 LTS server 上安装Apache2服务器,包括PHP5(m ...

  5. Ubuntu 12.04安装Adobe Reader

    原本从Adobe 官方网站下载了 Adobe Reader, 是个rpm包,先用agt-get 装了rpm(sudo apt-get install rpm), 一安装(rpm -ivh AdobeR ...

  6. Ubuntu 12.04 安装MySQL

    本文地址:http://www.cnblogs.com/yhLinux/p/4012689.html 本文适合新手入门. 本文是对 Ubuntu 12.04 环境下安装 MySQL 的记录,通过这两天 ...

  7. ubuntu 12.04 安装wireshark

    轉載自http://blog.chinaunix.net/uid-27064719-id-3786626.html 在ubuntu 12.04下安装wireshark软件之后,打开wireshark开 ...

  8. ubuntu 12.04 安装 redis

    原文地址:http://ijonas.com/software-development/nosql/412/ 1 Installing Redis 2.6.x on Ubuntu 12.04 and ...

  9. ubuntu 12.04安装TP-LINK TL-WN725N v2

    用了一个上午,折腾完毕,分享如下. 1.先试了ndiswrapper和compat-wireless,各种不给力.后来看这篇博文<Ubuntu12.04下安装TL-WN322G+无线网卡驱动(R ...

随机推荐

  1. 传递引用类型参数(ref)

    引用类型的变量不直接包含其数据:它包含的是对其数据的引用. 当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值. 但是无法更改引用本身的值:也就是说,不能使用相同的引用为新类分配 ...

  2. [leetcode 17]Letter Combinations of a Phone Number

    1 题目: Given a digit string, return all possible letter combinations that the number could represent. ...

  3. ORACLE之ASM学习

    ASM(Automatic Storage Management)是Oracle10g R2中为了简化Oracle数据库的管理而推出来的一项新功能,这是Oracle自己提供的卷管理器,主要用于替代操作 ...

  4. newLISP 10.5.3 发布,类 Lisp 的脚本语言

    newLISP 10.5.3 修复了一些 bug ,为 KMEANS 集群分析器增加了一些函数. newLISP是一个类似Lisp语言的.用于一般用途的脚本语言.它具有 LISP 语言所有的魔力,但更 ...

  5. Android 自定义View 三板斧之一——继承现有控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 本文重点讨论继承现有 ...

  6. JS备忘录

    /** *删除数组指定下标或指定对象 */ Array.prototype.remove = function (obj) { for (var i = 0; i < this.length; ...

  7. JS模块间错误隔离

    问题背景: 页面中有多个功能模块,怎么在一个模块出了问题之后,保证其它模块的正常工作. 上面的差不多就是面试官的原话了,姑且称之为模块间错误隔离问题 第一反应是动态按需加载代码,用户操作发生后再加载对 ...

  8. Jpeg2000 简介

    http://www.baike.com/wiki/Jpeg2000 总结Jpeg2000的六个方面:    ⑴ JPEG2000可以方便地实现渐进式传输,这是JPEG2000的重要特征之一.看到这种 ...

  9. node-webkit教程(15)当图片加载失败的时候

    在node-webkit教程(14)禁用缓存中,简单讲了当前禁用缓存的几种方法. 在实际开发过程中,我遇到了一个因为缓存引起的诡异的问题.应用场景如下: 在一个编辑器里,不停的向画布上添加svg或者其 ...

  10. [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]

    在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...