浅析docker使用

docker是什么?

  • 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案
    Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的Container/image,进而发布到不同的平台上运行。 也是由go写成的轻量级容器
  • Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核
  • 普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等
  • 每个container拥有自己独立的各种命名空间(亦即资源)包括:
    PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名 等
    与任何容器技术一样,就该程序而言,它有自己的文件系统、存储系统、处理器和内存等部件。容器与虚拟机之间的区别主要在于,虚拟机管理程序对整个设备进行抽象处理,而容器只是对操作系统内核进行抽象处理。
  • 虚拟机管理程序能做容器做不了的一件事就是,使kernel-3.10.0-229.el7.x86_64用不同的操作系统或内核。所以,举例说,你可以使用微软Azure,同时运行Windows Server2012的实例和SUSE Linux企业级服务器的实例。至于Docker,所有容器都必须使用同样的操作系统和内核。
  • Docker 概念及相互作用
  • 主机, 运行容器的机器。
  • 镜像,文件的层次结构,以及包含如何运行容器的元数据
  • 容器,一个从镜像中启动,包含正在运行的程序的进程
  • Registry, 镜像仓库
  • 卷,容器外的存储
  • Dockerfile, 用于创建镜像的脚本

docker能用来干什么?

  • 快速交付你的应用程序
    Docker可以为你的开发过程提供完美的帮助。Docker允许开发者在本地包含了应用程序和服务的容器进行开发,之后可以集成到连续的一体化和部署工作流中。
  • 开发和拓展更加简单
    Docker的以容器为基础的平台允许高度可移植的工作。Docker容器可以在开发者机器上运行,也可以在实体或者虚拟机上运行,也可以在云平台上运行。
    Docker的可移植、轻量特性同样让动态地管理负载更加简单。你可以用Docker快速地增加应用规模或者关闭应用程序和服务。Docker的快速意味着变动几乎是实时的。
  • 达到高密度和更多负载
    Docker轻巧快速,它提供了一个可行的、 符合成本效益的替代基于虚拟机管理程序的虚拟机。这在高密度的环境下尤其有用。例如,构建你自己的云平台或者PaaS,在中小的部署环境下同样可以获取到更多的资源性能。

docker主要组成有哪些?

  • Docker有两个主要的部件:

    Docker: 开源的容器虚拟化平台。
    Docker Hub: 用于分享、管理Docker容器的Docker SaaS平台。

  • Docker的内部
    • Docker镜像 (Docker images)。
    • Docker仓库 (Docker registeries)。
    • Docker容器(Docker containers)。
  • Docker镜像
    • Docker镜像是一个只读的模板。举个例子,一个镜像可以包含一个运行在Apache上的Web应用和其使用的Ubuntu操作系统。
    • 镜像是用来创建容器的。Docker提供了简单的放来来建立新的镜像或者升级现有的镜像,你也可以下载别人已经创建好的镜像。Docker镜像是Docker的 构造 部分
  • Docker仓库

    Docker仓库用来保存镜像。可以理解为代码控制中的代码仓库。同样的,Docker仓库也有公有和私有的概念。公有的Docker仓库名字是Docker Hub。Docker Hub提供了庞大的镜像集合供使用。这些镜像可以是你自己创建的,或者你也可以在别人的镜像基础上创建。Docker仓库是Docker的 分发 部分。

  • Docker容器

    Docker容器和文件夹很类似。一个Docker容器包含了所有的某个应用运行所需要的环境。每一个Docker容器都是从Docker镜像创建 的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台。Docker容器是Docker的 运行 部分。

安装docker

  1. 首先更新yum源,添加rhel7.1的iso镜像,来更新内核kernel(因为docker对内核有要求,rhel7.0时启动慢)

    1.自己下载cestos7.1的镜像,构建本地yum
    2.使用163或者网易的yum源
    yum update kernel -y
    rpm -q kernel

    kernel-3.10.0-123.el7.x86_64
    kernel-3.10.0-229.el7.x86_64

    重启,选择kernel-3.10.0-229.el7.x86_64进入系统

  2. 更新相关组件

    yum update device-mapper -y
    rpm -qa | grep device-mapper

    device-mapper-persistent-data-0.3.2-1.el7.x86_64
    device-mapper-libs-1.02.93-3.el7.x86_64
    device-mapper-multipath-0.4.9-66.el7.x86_64
    device-mapper-event-libs-1.02.93-3.el7.x86_64
    device-mapper-multipath-libs-0.4.9-66.el7.x86_64
    device-mapper-event-1.02.93-3.el7.x86_64
    device-mapper-1.02.93-3.el7.x86_64

  3. 安装docker

    3.1 执行Docker安装脚本

    curl -sSL https://get.docker.com/ | sh
    yum install -y docker-selinux
    这个脚本会添加 docker.repo 配置并安装Docker。

    3.2 自动添加添加yum仓库


    cat >/etc/yum.repos.d/docker.repo <<-EOF
    [dockerrepo]
    name=Docker Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/7
    enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg
    EOF

    安装Docker包
    yum install -y docker-engine
    yum install -y docker-selinux
    yum list installed | grep docker

    docker-engine.x86_64 1.8.1-1.el7.centos @dockerrepo
    docker-selinux.x86_64 1.7.1-108.el7.centos @extras

    3.3 rpm安装

    yum install docker-engine-1.8.3-1.el7.centos.x86_64.rpm -y

  • 启动docker

    systemctl start docker
    docker version

    Client:
    Version: 1.8.1
    API version: 1.20
    Go version: go1.4.2
    Git commit: d12ea79
    Built: Thu Aug 13 02:19:43 UTC 2015
    OS/Arch: linux/amd64

    Server:
    Version: 1.8.1
    API version: 1.20
    Go version: go1.4.2
    Git commit: d12ea79
    Built: Thu Aug 13 02:19:43 UTC 2015
    OS/Arch: linux/amd64

docker使用

  1. 有关镜像的操作

    $ docker images # 查看所有镜像.
    $ docker import # 从tarball创建镜像
    $ docker build # 通过Dockerfile创建镜像
    $ docker commit # 从容器中创建镜像
    $ docker rmi # 删除镜像
    $ docker history # 列出镜像的变更历史

  2. 运行的容器

    $ docker create # 创建一个容器,但不启动它
    $ docker run # 创建并启动一个容器
    $ docker stop # 停止容器
    $ docker start # 启动容器
    $ docker restart # 重启容器
    $ docker rm # 删除容器
    $ docker kill # 给容器发送kill信号
    $ docker attach # 连接到正在运行的容器中
    $ docker wait # 阻塞直到容器停止为止
    $ docker exec # 在运行的容器中执行一条命令

  3. 检查容器

    $ docker ps # 显示运行的容器
    $ docker inspect # 显示容器信息(包括ip地址)
    $ docker logs # 获取容器中的日志
    $ docker events # 获取容器事件
    $ docker port # 显示容器的公开端口
    $ docker top # 显示容器中运行的进程
    $ docker diff # 查看容器文件系统中改变的文件
    $ docker stats # 查看各种纬度数据、内存、CPU、文件系统等

之后的会继续更新博客