返回首页

docker容器技术系列二:docker容器初体验

时间:2015-11-04 21:01来源:知行网www.zhixing123.cn 编辑:麦田守望者

一、docker容器安装

1.1 RedHat/CentOS下的docker安装:

RedHat/CentOS必须要6.6版本以上,或者7.x才能安装docker,建议在RedHat/CentOS 7上使用docker,因为RedHat/CentOS 7的内核升级到了kernel 3.10,对lxc容器支持更好。

  • CentOS 6.6下安装docker:
  • 安装:

    rpm -ivh http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

    yum install docker-io

    设置自启动:

    chkconfig docker on

    service docker start

  • CentOS 7下安装docker:
  • 安装:

          centos7下默认yum源已经包含了docker,因此无需其他yum仓库支持,直接安装即可:

    yum install docker

    设置自启动:

    systemctl enable docker

    systemctl start docker

    1.2 Ubuntu下docker安装:

    Ubuntu下我仅测试了14.04版本,其他版本未测试

    安装:

    sudo apt-get install docker.io

    设置自启动:

    设置开机启动:运行sysv-rc-conf,如果没有该工具,则自行安装即可

    启动:

    service docker.io start

    *注:我不建议初学者采用编译安装docker,因为这样耗时耗力,还有很多不可预知的问题出现,对初始学习docker并没有多大用处。
     

    二、运行第一个docker容器

    2.1 hello world

    安装好docker环境并启动docker服务后,我们就可以跑一个“hello world!”试试了

    命令如下:

    [root@localhost ~]# docker  run  centos echo "Docker,hello world"
    Unable to find image 'centos:latest' locally
    latest: Pulling from centos
    47d44cb6f252: Pull complete
    168a69b62202: Pull complete
    812e9d9d677f: Pull complete
    4234bfdd88f8: Pull complete
    ce20c473cd8a: Pull complete
    centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
    Digest: sha256:3aaab9f1297db9b013063c781cfe901e2aa6e7e334c1d1f4df12f25ce356f2e5
    Status: Downloaded newer image for centos:latest
    Docker,hello world

    命令说明:

    docker run  :标准容器启动命令

    centos :镜像名称

    echo及后面的内容  :容器启动后执行的命令

    2.2 启动一个交互式容器

    当然我们也可以再复杂一点,增加-it参数,可以启动一个bash,实现与容器的交互,并向操作虚拟机一样操作容器:

    [root@localhost ~]# docker  run -it centos /bin/bash
    [root@110baabc10bc /]# echo "Docker,hello world"
    Docker,hello world

    *注:-t标示在心容器内指定一个伪终端或终端,-i标示允许我们对容器内的STDIN进行交互

    我们在容器中执行一个ps命令,可以看到容器与虚拟机最大的不同,容器仅允许了一个需要允许的进程,无内核相关的其他进程,如下:

    [root@110baabc10bc /]# ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 02:05 ?        00:00:00 /bin/bash
    root        17     1  0 02:06 ?        00:00:00 ps -ef

    2.3 以服务方式启动一个docker容器

    如果你实际测试,估计也发现了,第一个“hello world”容器启动后执行完echo命令就退出了,而第二个交互式的容器,只要用户退出当前容器的bash,容器也退出了。这明显不能满足一个服务长时间运行的要求,好找docker run提供了‘-d’参数,可以实现将容器以守护进程方式启动。

    演示如下:

    [root@localhost ~]# docker  run -d  centos /bin/bash -c "while true; do echo Docker,hello world; sleep 2; done"
    5ff7a2ac73469a4ff30d3709ceaa4d9ee14a87bf075fdf5ba4cb751b7077edf3
    [root@localhost ~]# docker  logs 5ff7a2ac73469a4ff30d3709ceaa4d9ee14a87bf075fdf5ba4cb751b7077edf3
    Docker,hello world
    Docker,hello world
    Docker,hello world
    Docker,hello world
    Docker,hello world

    [root@localhost ~]# docker  ps
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
    5ff7a2ac7346        centos              "/bin/bash -c 'while   21 seconds ago      Up 20 seconds                           elegant_jang

    这是一个荒谬的hello word进程:一个脚本会一直输出"Docker,hello world"

    为什么不是我们看到的一大堆的"hello word"?而是docker返回的一个很长的字符串:
     

    5ff7a2ac73469a4ff30d3709ceaa4d9ee14a87bf075fdf5ba4cb751b7077edf3

     

    这个长的字符串叫做容器ID。它是容器的唯一标识,所以我们可以使用它来操作容器,比如查看日志、停止或删除容器等。

    而为什么使用一个死循环来输出呢?

    因为如果不是死循环,一次输出后,容器中的进程就结束了。容器的唯一进程都结束了,容器就停止了。因此如果要在容器中运行具体的服务,这项服务本身在容器中也必须是已守护进程方式运行的。

    容器的操作是不是很简单的呢?下文我们将探讨docker镜像

    ------分隔线----------------------------
    标签(Tag):docker容器技术
    ------分隔线----------------------------
    推荐内容
  • 如何安装oracle 10g数据库 oracle 10g安装图解

    特意为大家制作了一份 oracle 10g安装图解 ,这样大家在安装的时候就不会出错了,至于...

  • Eclipse 如何安装Spring IDE支持

    ECLIPSE ARCHIVE离线安装包 SIZE 4.6 springsource-tool-suite-3.8.1.RELEASE-e4.6-up...

  • Eclipse 初始设置图解教程

    一、自动补全 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 二、字体设置 ...

  • idear如何配置JRebel实现热部署

    习惯写PHP之后,发现写JavaEE最蛋疼的是每次修改完代码,需要重启Tomcat服务,当项目...

  • java常用设计模式原型模式及深浅拷贝

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的...

  • java中单例模式的4种实现方式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8国际平台入口
  • Photoshop龙8国际平台入口
  • 3DMAX龙8国际平台入口
  • AutoCAD龙8国际平台入口
  • CorelDRAW龙8国际平台入口
  • Matlab龙8国际平台入口
  • 其他龙8国际平台入口
  • .Net龙8国际平台入口
  • Asp龙8国际平台入口
  • Php龙8国际平台入口
  • Jsp龙8国际平台入口
  • Ajax龙8国际平台入口
  • Android教程
  • 其他龙8国际平台入口
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影