zoukankan      html  css  js  c++  java
  • docker介绍和安装(一)

    虚拟化简介

    虚拟化英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器网络内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
     

    docker介绍

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
    Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
     

    docker架构

    传统虚拟化分层抽象和docker虚拟化分层抽象的

     docker虚拟化实施有以下3个概念

    • docker镜像:镜像是一个静态模板,与常见的iso镜像类似,是一个样板,不能直接修改,可以通过封装生成
    • docker容器:基于docker镜像运行启动的应用或系统,称之为一个docker容器或docker虚拟机
    • docker仓库:docker仓库是存放docker镜像的地方,常见分为公开仓库和私有仓库两种形式

    LXC介绍

    最早的docker技术为LXC+联合文件系统组合,docker 0.9.0版本开始引入libcontainer,可以视作LXC的替代品,其中LXC负责资源管理,AUFS负责镜像管理,而LXC包括Cgroup(control groups),Namespace,Chroot等组件,并通过Cgroup进行资源管理。

    从资源管理上看,Docker,LXC,Cgroup的关系为Cgroup在最底层落实资源管理,LXC在Cgroup上封装了一层,Docker又在LXC封装了一层。

    名称空间

    docker中为了保证每个容器能够独立运行,互不影响,需要隔离6种资源,也叫名称空间

    1. UTC:主机名和域名
    2. Mount:文件系统
    3. IPC:信号量,消息队列和共享内存
    4. PID:进程编号
    5. User:用户和用户组
    6. Network:网络设备,端口等

    Cgroup 

    blkio:快设备IO

    cpu:CPU

    cpuacct:CPU资源使用报告

    cpuset:多处理器平台上的cpu集合

    devices:设备访问

    freezer:挂起或恢复任务

    memory:内存用量报告

    perf_event:对cgroup中的任务进行统一的性能测试

    net_cls:cgroup中任务创建的数据报文的类别标识符

    Chroot

    chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。

    在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:

    1. 增加了系统的安全性,限制了用户的权力;

      在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。

    2. 建立一个与原系统隔离的系统目录结构,方便用户的开发;

      使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。

    3. 切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。

      chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。

    名称空间内核对照表

     

    docker容器引擎进化史:LXC->libcontainer->runC

    企业版:docker-ee

    社区版:docker-ce

    docker体系结构

    安装

    第一步,下载docker的镜像源

    docker的镜像网站(清华大学)
    https://mirrors.tuna.tsinghua.edu.cn/

    cd /etc/yum.repos.d/
    wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
    yum install docker-ce -y

    第二步,配置加速器

    [root@localhost ~]# cat /etc/docker/daemon.json 
    {
        "registry-mirrors":["https://registry.docker-cn.com","https://l10nt4hq.mirror.aliyuncs.com"]
    }

    第三步,重启docker服务

    [root@localhost ~]# systemctl restart docker

    docker常用命令

    docker version                #查看docker版本
    docker info                   #查看docker信息
    docker images pull            #从镜像仓库拉取镜像
    docker images                 #查看镜像
    docker container create       #创建容器
    docker attach                 #进入一个正在运行的容器
    docker logs                   #查看容器日志
    docker kill                   #结束掉一个或者多个docker容器
    docker version                #查看docker版本
    docker search                 #搜索镜像
    docker rmi                    #删除镜像
    docker rm                     #删除容器
    docker ps                     #查看当前运行的容器
    docker ps -a                  #查看所有容器,包括停止的。
    docker start                  #启动当前已经存在的docker
    docker stop                   #停止已经启动的docker
    docker logs                   #查看容器的日志

    拖拽一个镜像

    [root@localhost ~]# docker pull busybox
    Using default tag: latest
    latest: Pulling from library/busybox
    0f8c40e1270f: Pull complete 
    Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
    Status: Downloaded newer image for busybox:latest
    docker.io/library/busybox:latest

    创建一个容器并查看

    [root@localhost ~]# docker create -it --name mybox busybox
    b48d2548fe55d39b952ab149d36f4097adb9a53deec16baedb0da8719c8681e5
    
    
    [root@localhost ~]# docker ps -a 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    719ddab5c791        busybox             "sh"                4 seconds ago       Created                                 keen_buck

    启动容器

    [root@localhost ~]# docker start b48d2548fe55
    b48d2548fe55
    [root@localhost ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    b48d2548fe55        busybox             "sh"                About a minute ago   Up About a minute                       mybox

    直接拖拽镜像并且启动可以用run

    [root@localhost ~]# docker run --name mybox -it -d busybox 
    bb53c78337a9f8c9425adb18a9313f504f3db94b7390134117cefc58e128aa9c
    [root@localhost ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    bb53c78337a9        busybox             "sh"                4 seconds ago       Up 4 seconds                            mybox
  • 相关阅读:
    Java 虚拟机部分面试题
    Java 多线程部分面试题
    Java IO部分面试题
    Java 集合框架部分面试题
    Java 面向对象面试题
    Java 多线程同步的五种方法
    Python操作redis
    Python操作mysql
    Python操作mongodb
    数据处理的全过程---(获取数据-清洗数据-数据建模-数据可视化)
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/11909278.html
Copyright © 2011-2022 走看看