精华内容
下载资源
问答
  • Docker 容器技术

    千次阅读 2020-09-20 12:51:28
    Docker容器技术 概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会...

    Docker容器技术

    概念

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    组成部分

    1. dockerClient客户端
    2. Docker Daemon守护进程
    3. Docker Image镜像
    4. DockerContainer容器

    安装

    1. 环境准备

    下载docker源

    curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    

    安装

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 显示版本
    yum list docker-ce.x86_64 --showduplicates | sort -r
    yum install -y --setopt=obsoletes=0 \
                docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
                docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
    # 刷新配置
    systemctl daemon-reload
    
    # 重启
    systemctl restart docker
    

    MacOS Docker 安装

    如果没有安装brew 首先先安装brew

    /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
    
    brew cask install docker
    

    2.配置镜像加速

    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
        {
          "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
        }
        EOF    
    systemctl restart docker
    
    1. 使用

    pull 常用镜像

    docker pull centos:6.9
    docker pull centos:7.5.1804
    docker pull nginx
    # 查看本地镜像
    docker images
    # 启用镜像
    docker exec -it mysql bash
    

    安装mysql

    
    # 拉取
    docker pull mysql:5.7
    
    # 运行容器
    docker run -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7
    
    """
    --name mysql 创建的容器名称
    -e MYSQL_ROOT_PASSWORD=root 使用root作为root账号的密码
    -p 3306:3306 容器的3306端口映射到宿主机器
    -d 后台运行容器
    mysql:5.7 镜像名称
    """
    
    # 进入mysql容器
    docker exec -it mysql bash 或者 docker exec -it f653f4ae3f48 mysql -uroot -pxzwz0502
    
    # 登录
    mysql -u -p
    
    

    修改mysql配置文件

    # 找到要修改的镜像
    docker ps
    
    # 进入要修改的镜像
    docker exec -it 容器ID /bin/bash
    
    # 进入要修改的文件目录
    cd /etc/mysql
    
    # 修改配置文件
    vi my.cnf
    
    # 如果不安装vim在使用vim的时候会报找不到,在修改docker中mysql的配置文件,无法使用vi命令
    
    apt-get update
    apt-get install vim
    
    
    # 如果要退出bash有2种操作:1)Ctrl + d 退出并停止容器;2)Ctrl + p + q 退出并在后台运行容器;
    
    # 重启docker容器
    docker restart 容器ID
    

    连接mysql

    
    # 进行授权报错
    """
    Column count of mysql.user is wrong. Expected 45, found 42. Created with MySQL 50560, now running 50725. Please use mysql_upgrade to fix this error.
    错误是由于你曾经升级过数据库,升级完后没有使用,mysql_upgrade升级数据结构造成的。
    """
    
    mysql_upgrade -u root -p123456
    
    
    # 进行授权
    1、进入mysql
    2、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION; //任何远程主机都可以访问数据库
    3、FLUSH PRIVILEGES; //需要输入次命令使修改生效
    
    # 如果无法连接,考虑防火墙,比如阿里云需要进行设置防火墙规则
    
    

    安装redis

    # 安装
    docker pull redis
    
    # 运行容器
    docker run -p 6379:6379 -v $PWD/data:/data  -d redis redis-server --appendonly yes
    
    """
    命令说明:
    
    -p 6379:6379 : 将容器的6379端口映射到主机的6379端口
    
    -v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
    
    redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
    """
    
    # 进入redis容器
    docker exec -it CONTAINER_ID redis-cli
    

    安装mongo

    # 安装
    docker pull mongo
    
    # 运行容器
    docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo
    """
    -p 27017:27017 :将容器的27017 端口映射到主机的27017 端口
    
    -v $PWD/db:/data/db :将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录
    """
    
    # 运行mongo
    docker run -it mongo mongo --host IP
    

    删除images

    # 删除images需要images和container都删除
    """
    images很好理解,跟平常使用的虚拟机的镜像一个意思,相当于一个模版,而container则是images运行时的的状态。
    docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。
    """
    
    # 删除container
    docker rm ID
    
    # 删除images
    docker rmi ID
    
    如果在运行需要通过stop停止
    
    展开全文
  • 近年来,容器技术及相关应用得到了国内外越来越多的关注度,研发和应用推广发展势头迅猛。在国外,容器技术已经形成了较成熟的生态圈;在国内,金融企业、互联网企业、IT企业积极投入容器技术研发和应用推广,发展...

    内容摘要

    近年来,容器技术及相关应用得到了国内外越来越多的关注度,研发和应用推广发展势头迅猛。在国外,容器技术已经形成了较成熟的生态圈;在国内,金融企业、互联网企业、IT企业积极投入容器技术研发和应用推广,发展势头迅猛。为了积极引导我国容器技术和应用发展,我们编写本白皮书。其主要内容包括:

    • 一、针对容器技术现状进行研究和分析。一是梳理了容器技术从开始到现在的发展历程,对现有容器发展的生态结构进行分析,其中包括开源社区、产业联盟、解决方案厂商等;二是对容器技术框架进行了详细的描述,对技术框架各层涉及的技术点进行了介绍;三是结合已发布的国家和国际标准,将现有容器技术对于参考架构的实现情况进行分析;四是分析了容器技术与大数据、物联网、SDN之间的关系。
    • 二、容器技术发展路线及技术架构。通过列举容器技术典型4个应用场景,包括PaaS平台建设、软件定义数据中心、容器即服务、持续集成和发布等,分析了容器技术在各种场景下的关键成功因素。
    • 三、容器未来发展趋势。结合容器发展现状和应用场景应用情况,分析了容器技术在应用过程中面临的问题,同时提出了容器今后发展的生态图,对未来容器技术发展进行了展望。

    一、概述

    1.1 背景

    继虚拟化技术出现后,容器技术逐渐成为对云计算领域具有深远影响的变革技术。容器技术的发展和应用,将为各行业应用云计算提供了新思路,同时容器技术也将对云计算的交付方式、效率、PaaS平台的构建等方面产生深远的影响,具体体现在以下几个方面:

    简化部署:容器技术可以将应用打包成单一地址访问的、Registry存储的、
    仅通过一行命令就可以部署完成的组件。不论将服务部署在哪里,容器都可以从根本上简化服务部署工作。 
    快速启动:容器技术对操作系统的资源进行再次抽象,而并非对整个物理机资源进虚拟化,通过这种方式,打包好的服务可以快速启动。 
    服务组合:采用容器的方式进行部署,整个系统会变得易于组合,通过容器技术将不同服务封装在对应的容器中,之后结合一些脚本使这些容器按照要求相互协作,这样操作不仅可以简化部署难度还可以降低操作风险。 
    易于迁移:容器技术最重要的价值就是为在不同主机上运行服务提供一个轻便的、一致的格式。容器格式的标准化加快交付体验,允许用户方便地对工作负载进行迁移,避免局限于单一的平台提供商。 
    为更好地推进容器及相关技术在中国的落地与实践,推动容器技术在国内的落地,并建立顺应国际技术发展趋势、符合中国本地化特征的容器标准体系,中国开源云联盟容器工作组开展了本白皮书的研制工作,白皮书立足于容器技术发展的演进路线图,分析容器技术在应用过程中的应用场景以及面临的具体问题和关键成功因素,描绘容器技术未来的发展趋势和方向。本白皮书的发布,旨在与业界分享我们在容器技术领域的研究成果和实践经验,呼吁社会各界共同关注容器技术的同时,共同推动容器技术的发展,提升容器技术在云计算领域中实践和服务能力。

    1.2 相关术语

    • 表1.1 术语
    术语 定义/解释
    镜像 系统文件及其应用文件以特殊的文件形式进行备份制作成单一的文件。
    微服务架构 微服务架构是一种特定的软件应用程序设计方式——将大型软件拆分为多个独立可部署服务组合而成的套件方案。
    开发运维一体化 可定义为是一种过程、方法、文化、运动或实践,主要是为了通过一条高度自动化的流水线来加强开发和其他IT职能部门之间的沟通和协作,加速软件和服务的交付。
    运行时引擎 指用户用来运行容器镜像的软件系统

    1.3 缩略语

    • 表1.2 缩略语
    术语 解释
    CI/CD Continuous Integration/Continuous Delivery,持续集成和持续交付
    CaaS Container as a Service ,容器即服务
    CCRA Cloud Computing Reference Architecture,云计算参考架构
    CLI command-line interface,命令行界面
    DC/OS DataCenter Operating System,数据中西操作系统
    DevOps Development and Operations,开发运维一体化
    DNS Domain Name System,域名系统
    IaaS Infrastructure as a Service,基础设施即服务
    PaaS Platform as a Service,平台即服务
    SaaS Software as a Service,软件即服务
    SDN Software Defined Network,软件定义网络
    LXC Linux Container,Linux容器
    OCI Open Container Initiative,开放容器组织
    VPS Virtual Private Server,虚拟机专有服务
    VM Virtual Machine,虚拟机

    二、容器技术现状

    2.1 容器技术发展演进路径

    • 图2.1 容器技术演变路径

    这里写图片描述

    容器技术最早可以追溯到1979年UNIX系统中的chroot,最初是为了方便切换root目录,为每个进程提供了文件系统资源的隔离,这也是OS虚拟化思想的起源。2000年,BSD吸收并改进了chroot技术,发布了FreeBSD Jails。FreeBSD Jails除文件系统隔离,还添加了用户和网络资源等的隔离,每个Jail还能分配一个独立IP,进行一些相对独立的软件安装和配置。2001年,Linux发布了Linux Vserver,Linux VServer依旧是延续了Jails的思想,在一个操作系统上隔离文件系统、CPU时间、网络地址和内存等资源,每一个分区都被称为一个 security context,内部的虚拟化系统被称为VPS。2004年原SUN公司发布了Solaris Containers,Solaris Containers作为Solaris 10中的特性发布的,包含了系统资源控制和zones提供的二进制隔离,Zones 作为在操作系统实例内一个完全隔离的虚拟服务器存在。2005 年SWsoft公司发布了OpenVZ,OpenVZ和Solaris Containers非常类似,通过打了补丁的 Linux 内核来提供虚拟化、隔离、资源管理和检查点。OpenVZ 标志着内核级别的虚拟化真正成为主流,之后不断有相关的技术被加入内核。2006 年Google 发布了 Process Containers,Process Container 记录和隔离每个进程的资源使用(包括CPU、内存、硬盘I/O、网络等),后改名为cgroups(Control Groups),并在2007年被加入Linux内核2.6.24版本中。2008年出现了第一个比较完善的LXC容器技术,基于已经被加入内核的cgroups和Linux namespaces 实现。不需要打补丁,LXC就能运行在任意vanila内核的Linux上。2011年,CloudFoundry发布了Warden,和LXC不同,Warden可以工作在任何操作系统上,作为守护进程运行,还提供了管理容器的API。2013年Google公司建立了开源的容器技术栈lmctfy,Google开启这个项目是为了通过容器实现高性能,高资源利用率,同时接近零开销的虚拟化技术。目前 Kubernetes 中的监控工具 cAdvisor就起源于lmctfy项目,2015年Google将lmctfy的核心技术贡献给了 libcontainer。2013年Docker诞生,Docker最早是dotCloud(Docker公司的前身,是一家PaaS公司)内部的项目,和Warden类似,Docker最初也用了LXC,后来才自己写了 libcontainer 替换了 LXC。和其它容器技术不同的是,Docker 围绕容器构建了一套完整的生态,包括容器镜像标准、容器Registry、REST API、CLI、容器集群管理工具Docker Swarm等;2014年CoreOS创建了rkt,为了改进Docker在安全方面的缺陷,重写的一个容器引擎,相关容器工具产品包括:服务发现工具etcd和网络工具flannel等。2016年微软公司发布基于Windows 的容器技术Hyper-V Container,Hyper-V Container原理和Linux下的容器技术类似,可以保证在某个容器里运行的进程与外界是隔离的,兼顾虚拟机的安全性和容器的轻量级。

    2.2 容器技术发展生态

    随着容器技术的演进,越来越多的机构开始重视并参与到容器技术的探索中来。从最初的以Unix或Linux项目到开源社区,到各种类型的容器技术创业公司、IT 企业及产业联盟,容器技术的发展生态也在逐渐得到发展与丰富。在开源社区方面,附录A中列出了国际上的OCI和CNCF(Cloud Native Computing Foundation,简称CNCF,下同),容器的开源项目也在附录B中列出;在国内的IT 企业和创业公司方面,还提供了多个行业应用案例,这些行业应用案例在附录 D 中列出;产业联盟方面包括国际包括 CNCF,国内包括中国开源云联盟(COSCL)。容器的开源社区、创业公司、IT 企业、产业联盟共同构成容器技术发展的生态圈。

    2.3 容器技术框架

    通过研究、梳理和分析现有的容器技术,形成容器相关技术的技术架构,如图2.2所示。

    这里写图片描述
    图2.2 容器技术框架

    2.3.1 服务器层

    当运行容器镜像时,容器本身需要运行在传统操作系统之上,而这个操作系统既可以是基于物理机,也可以是基于 VM。服务器层包含了这两种场景,泛指了容器运行的环境,同时容器并不关心服务器层如何提供和管理,它的期望只是能获得这些服务器资源。

    2.3.2 资源管理层

    资源管理包含了服务器、操作系统等资源的管理。其中如果是物理服务器的话,需要涉及物理机管理系统(例如Rocks等);如果是虚拟机的话,需要使用虚拟化平台。此外,无论是物理服务器还是虚拟机,都需要对其中的操作系统加以管理(例如:Chef、Puppet、Ansible和SaltStack等)。而传统的存储和网络管理也包含在资源管理层。由于存储,网络两者选择众多,不一而足,因此不再列举。

    总而言之,资源管理层的核心目标是对服务器和操作系统资源进行管理,以支持上层的容器运行引擎。

    2.3.3 运行引擎层

    容器运行引擎层主要指常见的容器系统,包括 Docker、rkt、Hyper、CRI-O。这些容器系统的共通作用包括启动容器镜像、运行容器应用和管理容器实例。运行引擎又可以分为管理程序和运行时环境两个模块。 需要注意的是,运行引擎是单机程序,类似虚拟化软件的KVM和Xen,不是集群分布式系统。引擎运行于服务器操作系统之上,接受上层集群系统的管理。
    相关开源项目包括:
    ——资源隔离:Cgroup、Hypervisor;
    ——访问限制:Namespace、Hypervisor;
    ——管理程序:Docker Engine、OCID、hyperd,RKT、CRI-O;
    ——运行时环境:runC(Docker)、runV(Hyper)、runZ (Solaris)

    2.3.4 集群管理层

    可以把容器的集群管理系统类和针对 VM 的集群管理系统划等号,都是通过对一组服务器运行分布式应用。而这两者的细微区别在于,VM 的集群管理系统需要运行在物理服务器上,而容器集群管理系统既可以运行在物理服务器上,也可以运行在 VM 上。 常见的容器集群管理系统包括:Kubernetes、Docker Swarm、Mesos。这三者各有特色,但随着时间推移,三者的融合将越发明显。Kubernetes 在这三者中比较特殊,它的地位更接近 OpenStack。围绕这 Kubernetes,CNCF 基金会已经建立了一个非常强大的生态体系,这是Docker Swarm和Mesos都不具备的。而CNCF基金会本身也正向着容器界的OpenStack基金会发展,值得大家重点关注。
    集群管理层涉及到的相关开源软件项目包括:
    ——指挥调度:Docker Swarm、Kubernetes、Mesos等
    ——服务发现:Etcd、Consul、Zookeeper,DNS
    ——监控:Prometheous
    ——存储:Flocker
    ——网络:Calico、Weave、Flannel

    2.3.5 应用层

    泛指所有运行于容器之上的应用程序,以及所需的辅助系统,包括:监控、日志、安全、编排、镜像仓库等等。
    ——监控模块,相关开源项目包括:Prometheous、cAdvisor、Sysdig等;
    ——日志,相关开源项目包括:Fluented、LogStash等;
    ——安全,包括容器镜像的安全扫描,运行环境的安全隔离,集群环境的安全管理等功能;
    ——编排,相关开源项目包括:Docker Compose、CoreOS Fleet等;
    ——CI/CD,相关开源项目包括:Jenkins、Buildbot、Gitlab CI、Drone.io;
    ——镜像仓库:Docker Hub、VMware Harbor、Huawei Dockyard。

    2.4 容器技术对参考架构的实现情况

    国家标准GB/T 32399-2015《信息技术 云计算 参考架构》(简称CCRA,修改采用ISO/IEC 17789)是2015年发布的国家标准,描述了云计算的利益相关者,云计算系统的基本特征,云计算的基本活动和功能组件,我国是该国际标准的立项推动国之一,积极参与了该国际标准的编制,该标准的诞生标志着国际三大标准化组织ISO、IEC和ITU首次在云计算领域统一认识并达成一致,是国际国内云计算领域的最重要的基础性标准。在该标准中描述了云计算的功能架构,功能架构包含了支撑云计算活动所需的功能,如图2.3。图中标蓝色的部分是现有容器技术已经实现的内容。

    这里写图片描述
    图2.3 CCRA功能组件图

    2.5 容器技术的关键技术内容

    2.5.1 镜像

    容器的镜像通常包括操作系统文件、应用本身的文件、应用所依赖的软件包和库文件。为了提高容器镜像的管理效率,容器的镜像采用分层的形式存放。容器的镜像最底层通常是Linux的rootfs和系统文件,再往上则是各种软件包层。这些文件层在叠加后成为完整的只读文件系统,最终挂载到容器里面。在运行过程中,容器应用往往需要写入文件数据,容器引擎为此需再创建一个可写层,加在镜像的只读文件系统上面。使用分层的容器镜像之后,镜像的下载和传输更加便利,因为只需要在宿主机上把缺少的镜像文件层次下载即可,无需整个镜像传送。

    在Linux中,联合文件系统UnionFS能够把多个文件层叠加在一起,并透明地展现成一个完整的文件系统。常见的联合文件系统有AUFS(AnotherUnion File System),btrfs,OverlayFS和DeviceMapper等。

    2.5.2 运行时引擎

    容器运行时引擎和容器镜像两者的关系类似于虚拟化软件和虚拟机镜像的关系。容器运行时引擎的技术标准主要是由OCI基金会领导社区进行制定。目前OCI已经发布了容器运行时引擎的技术规范,并认可了runC(Docker公司提供)和runV(Hyper公司提供)两种合规的运行引擎。

    2.5.3 容器编排

    容器编排工具通过对容器服务的编排,决定容器服务之间如何进行交互。容器编排工具一般要处理以下几方面的内容:
    1) 、容器的启动。选择启动的机器、镜像和启动参数等;
    2) 、容器的应用部署。提供方法对应用进行部署;
    3) 、容器应用的在线升级。提供方法可以平滑地切换到应用新版本。
    容器的编排一般是通过描述性语言YAML或者JSON来定义编排的内容。目前主要的编排工具有Docker compose和基于Google的Kubernetes helm等。

    2.5.4 容器集群

    容器集群是将多台物理机抽象为逻辑上单一调度实体的技术,为容器化的应用提供资源调度、服务发现、弹性伸缩、负载均衡等功能,同时监控和管理整个服务器集群,提供高质量、不间断的应用服务。容器集群主要包含以下技术:
    资源调度:主要以集中化的方式管理和调度资源,按需为容器提供 CPU、内存等资源;

    服务发现:通过全局可访问的注册中心实现任何一个应用能够获取当前环境的细节,自动加入到当前的应用集群中;

    弹性伸缩:在资源层面,监控集群资源使用情况,自动增减主机资源;在应用层面,可通过策略自动增减应用实例来实现业务能力的弹性伸缩;

    负载均衡:当应用压力增加,集群自动扩展服务将负载均衡至每一个运行节点;当某个节点出现故障,应用实例重新部署运行到健康的节点上。

    2.5.5 服务注册和发现

    容器技术在构建自动化运维场景中,服务注册和发现是重要的两个环节,一般通过一个全局性的配置服务来实现。其基本原理类似公告牌信息发布系统,A 服务(容器应用或者普通应用)启动后在配置服务器(公告牌)上注册一些对外信息(比如IP和端口),B服务通过查询配置服务器(公告牌)来获取A注册的信息(IP和端口)。

    2.5.6 热迁移

    热迁移(Live Migration),又称为动态迁移或者实时迁移,是指将整容器的运行时状体完整保存下来,同时可以快速地在其他主机或平台上恢复运行。容器热迁移主要应用在两个方面:一是有多个操作单元执行任务,热迁移能迅速地复制与迁移容器,做到无感知运行作业;二是可以处理数据中心中集群的负载均衡,大量数据涌来无法运行计算时,可利用热迁移创建多个容器处理运算任务,调节信息数据处理峰谷,配置管理负载均衡比例,降低应用延迟。

    2.6 容器技术与相关技术的关系

    2.6.1 容器与云计算

    虚拟化是云计算的重要基础,容器定义了一套从构建到执行的标准化体系,改变了传统的虚拟化技术,深度影响了云计算领域,容器是云计算的未来。以Docker 为代表的容器技术越来越深刻地影响云计算,也改变我们的日常开发、运维和测试。相比于虚拟机,容器的轻量、快速启动和低开销,以及基于此的按业务打包和微服务模式,这些特点被用来改进 DevOps,很多场景下更适合做大规模集群管理和搭建灵活的分布式系统。通过深度整合了IaaS、PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决IT、架构及运维等问题,使企业更聚焦于业务,构建了新一代的云计算生态体系。

    2.6.2 容器与大数据

    大数据平台如果能采用容器方式发布,与Spark、Hadoop、Cassandra等相关技术的集成与对接,可降低整个系统的搭建难度,缩短交付和安装周期,减少安装失败风险。容器化后,各类大数据平台组件可以轻松实现迁移的目的,也能实现多复本控制和高可用。

    2.6.3 容器与物联网

    物联网(IoT)技术发展日新月异,而容器技术刚好遇到这样的机遇,将在几个方面促进物联网的发展。

    首先,运用容器技术后,可通过容器封装,可简化下载、安装部署、启动和后续应用更新。这将大大加速物联网应用开发部署。其次,容器技术还可以满足物联网在自动监控,集中式维护管理方面的需求。最后,数据采集端环境千变万化,如果需要手动适配工作量巨大,如果采用容器化技术,只要打包几类典型的容器镜像,如ARM,X86,x86_64等,就可以事半功倍实现终端的发布工作。

    2.6.4 容器与SDN

    随着容器部署规模的增大,跨主机、跨网络的容器迁移成为常态。而容器更多地关注于轻量化本身,对于网络架构并没有太多关注。过于复杂的体系结构和管理过程,容易让整个容器网络和系统陷入不可控的非稳定状态。通过SDN和Overlay网络结合,将控制转发分离、集中控制管理理念应用于容器网络,还可以最大程度增强容器网络的弹性伸缩能力和简化网络管理。

    另外,SDN与容器的配合,是相得益彰、互相促进的。业界的SDN控制器和系统一般都比较庞大,安装、运行都极为复杂。通过Docker技术,能够实现SDN控制器的轻量级快速部署、安装、运行。

    展开全文
  • 容器技术介绍

    千次阅读 2018-12-01 23:12:19
    容器技术 基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 容器技术与传统虚拟机技术比较 容器技术和传统虚拟机技术都属于操作系统级别...

    容器技术

    基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。

    容器技术与传统虚拟机技术比较

    容器技术和传统虚拟机技术都属于操作系统级别的虚拟化技术,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,再在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
    并且容器虚拟化由操作系统内核直接提供底层支撑技术,可以说由内核原生支持,省去了额外进行硬件虚拟和运行完成操作系统等开销,提高系统资源利用率。

    名词解释:容器和容器镜像

    操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而容器镜像(Image) ,就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套Ubuntu 16.04 最小系统的 root 文件系统。提供容器运行时所需的程序、库、资源、配置等文件。

    容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

    展开全文
  • Docker容器技术

    2019-09-03 17:49:55
    Docker容器技术 文章目录Docker容器技术docker的安装docker的使用Docker Images镜像管理镜像相关操作基于容器制作镜像推送仓库到远程服务器镜像导入和导出docker容器虚拟化网络四种网络模型的创建docker网络相关配置...

    Docker容器技术

    • Container容器:
      1. 容器是一种基础工具;泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物;
    • OCI:Open Container Initiative
      1. 由Linux基金会主导于2015年6月创立
      2. 只在围绕容器格式和运行时制定一个开放的工业化标准
    1. 容器技术,实现的前提。
      • kernel namespaces 内核名称空间

        • linux内核中支持的内核名称空间有:
          1. Mount 实现root根目录的虚拟化隔离
          2. PID 实现进程pid的虚拟化隔离
          3. Network 实现网络的虚拟化隔离
          4. IPC 信号量、消息队列和共享内存
          5. UTS 主进程和域名的虚拟化隔离
          6. User 实现用户的虚拟化隔离
        namespace 系统调用参数 隔离内容 内核版本
        UTS CLONE_NEWUTS 主机名和域名 2.6.19
        IPC CLONE_NEWIPC 信号量、消息队列和共享内存 2.6.19
        PID CLONE_NEWPID 进程编号 2.6.24
        Network CLONE_NEWNET 网络设备、网络栈、端口等 2.6.29
        Mount CLONE_NEWNS 挂载点(文件系统) 2.4.19
        User CLONE_NEWUSER 用户和用户组 3.8
      • CGoups 控制组,用于计算资源的隔离

        • CPU,Memroy,BLKIO等计算资源的分配(分配给不同容器)
        • blkio:快设备IO
        • cpu:CPU
        • cpuacct:CPU资源使用报告
        • cpuset:多处理器平台是那个的CPU集合
        • devices:设备访问
        • freezer:挂起或恢复任务
        • memory:内存用量及 报告
        • perf_event:对cgroup中的任务进行统一性能测试
        • net_cls:cgroup中的任务创建的数据报文的类别
      • Kernel Gapabilities 内核功能,能力。

    2. LXC, 镜像,没有解决容器的迁移和分发等问题,后来被Docker替代
    3. Docker通过引入Image镜像,帮助简化容器,推动了容器的发展
      1. Registry #docker的仓库服务器,docker的注册表服务,托管运行镜像仓库的服务器。同时为仓库镜像提供对应的索引,和认证用户实现对应存储功能和用户名称空间分派的功能。
      2. Docker Daemon #docker的运行时环境,即docker镜像
      3. Docker Client #docker的客户端
      • 注意:上面三者之前都可以完全运行在不同的主机之上,本身都通过http或https通讯。
    • Docker重要的Object

      1. Container 容器,运行时的表现
      2. Image 镜像
      3. Network 网络
      4. Volume 存储卷
      5. Plugin 插件
      6. …等等
    • Docker的容器管理常用命令
      docker_004

    docker的安装

    • 依赖的基础环境

      1. 64 bits CPU
      2. Linux Kernel 3.10+
      3. Linux Kernel cgroups and namespaces
    • CentOS 7

      1. “Extras” repository 查看可以如下所示:
        docker_005
    • docker程序环境:
      1.环境配置文件:
      * /etc/sysconfig/docker-network
      * /etc/sysconfig/docker-storage
      * /etc/sysconfig/docker
      2. Unit File:
      * /usr/lib/systemd/system/docker.service
      3. Docker Registry配置文件:
      * /etc/containers/registries.conf
      4. docker-ce配置文件:
      * /etc/docker/daemon.json
      * daemon.json中所有可用参数:https://docs.docker.com/engine/reference/commandline/dockerd/

    • 配置docker的yum源

      1. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    • 安装docker yum install docker-ce

      1. 安装完成后可以使用rpm -ql docker-ce看安装情况
    • docker镜像加速器(可以在https://cr.console.aliyun.com/中找到自己的镜像加速)

      sudo mkdir -p /etc/docker
      sudo tee /etc/docker/daemon.json <<-'EOF'
      {
      "registry-mirrors": ["https://4mii0wlb.mirror.aliyuncs.com"]
      }
      EOF
      sudo systemctl daemon-reload
      sudo systemctl restart docker
      
    • 使用iptables -vnL可以查看docker自动生成的规则
      docker_001

    • 修改vim /usr/lib/systemd/system/docker.service文件

      1. 添加ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
        docker_002

      2. 修改完成后需要重新执行如下命令

        systemctl daemon-reload
        systemctl restart docker
        
      3. 再次使用iptables -vnL查看可以看到FORWARD已经修改为ACCEPT
        docker_003

    docker的使用

    1. 常用操作:
      • docker search:搜索镜像Search the Docker Hub for images
        1. docker search nginx #搜索nginx镜像
          docker_006
      • docker pull 下载镜像Pull an image or a repository from a registry
      • docker images 查看镜像List images
      • docker create 创建容器Create a new container
      • docker start 启动容器Start one or more stopped containers
      • docker run 在容器中运行命令Run a command in a new container
      • docker attach Attach to a running container
      • docker ps 查看正在运行的容器List containers
        1. docker ps -a #查看所有容器
        2. docker ps 等价于docker container ls
      • docker logs 查看容器日志Fetch the logs of a container
      • docker restart 重启一个容器Restart a container
      • docker stop 停止容器Stop one or more running containers
      • docker kill 杀死正在运行的容器Kill one or more running containers
      • docker rm 删除容器Remove one or more containers
      • docker port CONTAINER [PRIVATE_PORT[/PROTO]] #查看指定容器上的映射端口
        1. docker port web1 #查看web1容器上的映射端口
    • docker version #查看docker的版本信息,(可以看到客户端程序版本,和服务端程序版本)

    • docker info #查看docker的详细信息

      [root@gdy docker]# docker info
      Client:
      Debug Mode: false
      
      Server:
      Containers: 0  #当前容器数量
       Running: 0      #运行状态的容器数量
       Paused: 0       #暂停状态的容器数量
       Stopped: 0      #停止状态的容器数量
      Images: 0       #当前主机上有多少个镜像
      Server Version: 19.03.1         #服务器端版本
      Storage Driver: overlay2        #存储后端驱动
       Backing Filesystem: xfs         #在overlay2上建构的本地文件系统是xfs
       Supports d_type: true
      Native Overlay Diff: true
      Logging Driver: json-file       #日志驱动
      Cgroup Driver: cgroupfs         #控制组的驱动
      Plugins:                        #其他插件
       Volume: local                  #存储卷,支持本地
       Network: bridge host ipvlan macvlan null overlay       #网络,支持桥接(bridge host),overlay(叠加网络) 等
       Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog #日志
      Swarm: inactive         #支持Swarm,docker内部的容器编排,容器集群工具
      Runtimes: runc          #运行时环境runc
      Default Runtime: runc
      Init Binary: docker-init
      containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
      runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
      init version: fec3683
      Security Options:
      seccomp
      Profile: default
      Kernel Version: 3.10.0-957.el7.x86_64
      Operating System: CentOS Linux 7 (Core)
      OSType: linux
      Architecture: x86_64
      CPUs: 4
      Total Memory: 1.777GiB
      Name: gdy.gdy
      ID: LQG7:RAZT:CIRG:XDUP:WVIY:DZY2:PTMM:G7GG:BZF2:6OLB:EBLT:JYNW
      Docker Root Dir: /var/lib/docker
      Debug Mode: false
      Registry: https://index.docker.io/v1/
      Labels:
      Experimental: false
      Insecure Registries:        #非安全的仓库
      127.0.0.0/8
      Registry Mirrors:           #配置的容器加速,
      https://qx4pe1od.mirror.aliyuncs.com/
      Live Restore Enabled: false
      
      [root@gdy docker]#
      
    • docker --help #查看docker帮助,客户端命令

      1. Management Commands:系列的命令可以单独查看帮助

        Management Commands:
        builder     Manage builds
        config      Manage Docker configs
        container   Manage containers #管理容器的命令
        context     Manage contexts
        engine      Manage the docker engine
        image       Manage images
        network     Manage networks
        node        Manage Swarm nodes
        plugin      Manage plugins
        secret      Manage Docker secrets
        service     Manage services
        stack       Manage Docker stacks
        swarm       Manage Swarm
        system      Manage Docker
        trust       Manage trust on Docker images
        volume      Manage volume
        
    • docker container --help #查看docker管理容器的命令

      1. docker container ls #查看正在运行的容器
        • 等价于docker ps
        • docker -H 192.168.61.109:8888 ps #查看指定服务器下的容器信息
      2. docker container ls -a #详细查看容器信息
        • 等价于docker ps -a
      3. docker container start xdd #启动xdd容器
      4. docker container attach xdd #开启容器为xdd的终端
        • 按ctrl+p+q剥离终端,而不关闭终端
      5. docker container run --help #查看run 系列命令帮助
        1. -t 开启一个终端
        2. -i -t 进入交互式接口
        3. -d 后台运行容器
        4. --name 指定容器名
          • docker container run --name xdd -it alpine:3.8 #开启一个alpine3.8镜像,并同时启动交互式界面,为新启动的这个镜像命名为xdd
          • docker run --name xddbox -it busybox:latest #开启一个busybox中标签为latest(即:最新版)的镜像,并同时开启交互式界面,将新启动的这个镜像命名为xddbox
          • docker run --name web1 -d nginx:1.14-alpine #开启一个nginx:1.14镜像,-d表示在后台运行容器,将这个新启动的镜像命令为web1
          • docker run --name kvstor1 -d redis:4-alpine #后台启动一个容器,运行redis,tag标签为4-alpine,并将这个新启动的容器名为:kvstor1
          1. 注意:使用run命令启动镜像时,镜像不一定需要预先下载,可以在启动时会自动下载。
        5. --rm 停止后自动删除容器
          • docker run --name t1 -it --rm busybox:latest#创建容器,关闭后容器会被自动删除
        6. --network #为创建的容器指定网络,如果不指定,默认为桥接模式bridge
          • docker run --name t1 -it --network bridge --rm busybox:latest
          • docker run --name b2 -it --network container:b1 --rm busybox #新运行的容器b2和b1共享同一网络同一iP
          • docker run --name b2 -it --network host --rm busybox #新运行的容器b2和宿主机共享同一网络和ip
        7. -h --hostname #为容器创建的容器指定主机名,如果不指定,默认为容器id
          • docker run --name t1 -it --network bridge -h t1.xdd.com --rm busybox:latest #同上面例子,指定了主机名为t1.xdd.com
        8. --dns #为创建的容器指定dns服务器地址
          • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --rm busybox:latest #指定创建的容器dns为114.114.114.114
        9. --dns-search 指定搜索域
          • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest #指定创建的容器dns-search搜索域为:ilinux.io
        10. --add-host添加指定的容器本地主机名解析
          • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --add-host www.xdd.com:1.1.1.1 --rm busybox:latest #为新创建的主机添加www.xdd.com域名指定到1.1.1.1主机上
        11. -p,--publish-all选项的使用格式(注意-p选项可以多次使用)
          • -p <containerPort> #将指定的容器端口映射至主机所有地址的一个动态端口
          • -p <hostPort>:<containerPort> #将容器端口<containerPort>映射到指定的主机端口<hostPort>
          • -p <ip>::<containerPort> #将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口
          • -p <ip>:<hostPort>:<containerPort> #将指定的容器端口<containerPort>映射至主机指定的<ip>的端口<hostPort>
          1. "动态端口"指随机端口,具体的映射结果可使用docker port命令查看
        12. --volumes-from 复制使用其他容器的卷
          • docker run -it --name bbox2 --volumes-from bbox1 busybox#新启动的bbox2容器,复制使用bbox1中的卷配置地址。即bbox1和bbox2共享同一个卷的配置
        13. -e,--env 设定环境变量值
        14. --entrypoint string 覆盖镜像文件中使用entrypoint关键定义的命令
      6. docker container port CONTAINER [PRIVATE_PORT[/PROTO]]等价于docker port ...#查看指定容器上的端口映射
        • docker port web1 #查看web1上的端口映射
      7. docker container inspect name #查看指定容器的详细信息
        • -f 解析式 #使用json解析式查找指定属性值
          • docker container inspect -f {{.Mounts}} bbox1 #查找bbox1容器信息信息中的Mounts属性值
    • docker image --help #查看docker管理镜像的命令

      1. pull #手动下载镜像
        • docker image pull nginx:1.14-alpine下载nginx镜像
        • docker pull busybox 下载busybox
          1. busybox像一个盒子,使用链接链接成ls,或者cat等命令,他就可以当做linux上相应的命令使用。非常方便。android系统上就局域busybox做成的。
      2. rm 删除镜像
        • docker image rm xdd/httpd:latest删除标记为“xdd/httpd:latest”的标记
      3. ls 列出镜像
        • docker image ls --digests 显示镜像的完整信息
        • docker image ls --no-trunc 不按照缩略的方式输出
      4. inspect 查看镜像的详细信息
        • docker image inspect alpine:3.8 #查看alpine中Tag为3.8的镜像详细信息
          1. 其中“Cmd”节点信息表上,当前镜像启动为容器时,默认运行的是什么进程
      5. tag 管理镜像标签
        • docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] #根据镜像指定标签
          1. docker tag 7e0338fff785 xdd/httpd:v0.1-1 #将“7e0338fff785”为ID的镜像指定厂库为xdd下的httpd,标签为v0.1-1
          2. docker tag xdd/httpd:v0.1-1 xdd/httpd:latest #将标记为“xdd/httpd:v0.1-1”的镜像再创建一个标记为“xdd/httpd:latest”
      6. push 推送一个镜像
    • docker search alpine #查看alpine下的docker版本 https://hub.docker.com/_/alpine?tab=tags

      1. docker image pull alpine下载apline,默认从alpine:laest中下载
        • alpine:是程序镜像的微型版本,能提供基础运行的最小文件大小的版本。(生产环境中 不建议使用alpine版本的镜像)
    • docker network --help #网络相关命令

      1. ls #显示本地可用网络
        • docker network ls #显示本地可用网络
      2. create [OPTIONS] NETWORK #创建网络
        • -d,--driver string #指定网络类型,可选[bridge(桥接) host ipvlan macvlan null overlay],如果不指定,默认为bridge
        • --subnet #指定网络的子网络
        • --gateway #指定默认网关,如不指定,默认为子网络的第一个地址
          1. docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0 #创建一个mybr0的网络,网络模式为bridge桥接模式,子网络为172.26.0.0/16,网关为172.26.0.1
            • 相关命令:ip link set dev br-05c9d6fcc73b name docker1 #修改网络名称为docker1
      3. inspect [OPTIONS] NETWORK [NETWORK...] #查看网络详细信息
        • docker network inspect none #查看none网络详细信息
      4. rm #删除一个网络
    • docker build --help 根据dockerfile文件制作镜像

      1. 语法:docker build [OPTIONS] PATH | URL | -
        • PATH:指定dockerfile文件所在的父目录
        • URL:指定网络中的dockerfile的文件目录
      2. 参数:
        • -t 指定生成镜像的名称和tag
          • docker build -t tinyhttpd:v0.1-1 ./ 更具当前目录下的dockerfiel文件制作镜像tinyhttpd:v0.1-1
    • docker exec --help查看在容器中执行命令的帮助

      1. docker exec -it kvstor1 /bin/sh#在kvstor1容器中运行/bin/sh程序,并开启一个交互式界面

    Docker Images镜像管理

    • Docker镜像含有 启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器

      1. 采用分层构建机制,最低层为bootfs,其之为rootfs
        • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成会被卸载以节约内存资源;
        • rootfs:位于bootfs之上,表现为docker容器的根文件系统;
          1. 传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;
          2. docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层;
            docker_007
    • Docker Image Layer(docker的镜像层级)

    1. 位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)
    2. 最上层为"可读写"层,其下的均为"只读"层
      docker_008
    • Aufs高级多层统一文件系统
    1. advanced multi-layered unification filesystem:高级多层统一文件系统
    2. 用于为Linux文件系统实现“联合挂载”
    3. aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发;
    4. Docker最初使用aufs作为容器文件系统层,它目前仍作为存储后端之一来支持;
    5. aufs竞争产品是overlayfs,后者从3.18版本开始被合并到Linux内核;
    6. docker的分层镜像,除了aufs,docker还支持btrfs,devicemapper和vfs等
      • 在Ubuntu系统下,docker默认ubuntu的aufs;而在CentOS7上,用的是devicemapper;
    • Docker Registry镜像的统一存储位置Registry
    1. 启动容器时,docker daemon会 试图从本地获取相关的镜像;本地 镜像不存在时,将其从Registry中下载该镜像并保存到本地;
      docker_009
    2. Docker Registry分类
      • Registry用于保存docker镜像,包括镜像的层次结构和元数据
      • 用户可自建 Registry,也可使用官方的Docker Hub
      • 分类
        1. Sponsor Registry:第三方的registry,供客户和Docker社区使用
        2. Mirror Registry:第三方的registry,只让客户使用
        3. Vendor Registry:由发布Docker镜像的供应商提供的registry
        4. Private Registry:通过设有防火墙的额外的安全层的私有实体提供的registry
    3. Registry(repository and index)
      • Repository
        1. 由某特定的docker镜像的所有 迭代版本组成的镜像厂库
        2. 一个Registry中可以存在多个Repository
          • Repository可分为“顶层仓库”和“用户创库”
          • 用户仓库名称格式为“用户名/仓库名”
        3. 每个厂库可以包含多个Tag(标签),每个标签对应一个镜像
      • Index
        1. 维护用户账户、镜像的校验以及公共命名空间的信息
        2. 相当于为Registry提供另一个完成用户认证等功能的检索接口
    4. Docker Registry
      • Docker Registry中的镜像通常有开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如:“部署”到生产环境;
        docker_010

    镜像相关操作

    • 镜像的生成途径(制作镜像)
      1. Dockerfile
      2. 基于容器制作
      3. Docker Hub automated builds
        docker_011

    基于容器制作镜像

    • 在容器中创建一个镜像
    1. 语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
      1. -p 创建镜像时,使镜像暂停
      2. -c 修改镜像的Dockerfill指令,可以修改cmd命令等
        3 -a 指定镜像的制作作者
      • docker commit -p xddbox2 #根据正在运行的xddbox2镜像,创建一新的镜像,创建时,不许xddbox2在做任何操作。
      • docker commit -a "xdd <xdd@xdd.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 xdd/httpd:v0.2 根据xddbox2镜像制作新的镜像,修改了CMD命令,为["/bin/httpd","-f","-h","/data/html"] 注意必须是双引号
    #根据正在运行的xddbox2镜像创建一个镜像
    [root@gdy ~]# docker commit -p xddbox2
    sha256:7e0338fff785b7ac85bf8590417eca56f5e61af046ebcfa2614723d3a001791b
    #查看镜像
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              7e0338fff785        6 seconds ago       1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    # 将7e0338fff785镜像大一个仓库为xdd/httpd 标记为v0.1-1.
    [root@gdy ~]# docker tag 7e0338fff785 xdd/httpd:v0.1-1
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xdd/httpd           v0.1-1              7e0338fff785        2 minutes ago       1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    # 根据xdd/httpd:v0.1-1再添加一个标记Tag为 xdd/httpd:latest
    [root@gdy ~]# docker tag xdd/httpd:v0.1-1 xdd/httpd:latest
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xdd/httpd           latest              7e0338fff785        12 minutes ago      1.22MB
    xdd/httpd           v0.1-1              7e0338fff785        12 minutes ago      1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    #删除标记为xdd/httpd:latest的标记,不会删除镜像
    [root@gdy ~]# docker image rm xdd/httpd:latest
    Untagged: xdd/httpd:latest
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xdd/httpd           v0.1-1              7e0338fff785        14 minutes ago      1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    #重新在添加个标记
    [root@gdy ~]# docker tag xdd/httpd:v0.1-1 xdd/httpd:latest
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xdd/httpd           latest              7e0338fff785        14 minutes ago      1.22MB
    xdd/httpd           v0.1-1              7e0338fff785        14 minutes ago      1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    [root@gdy ~]# 
    

    推送仓库到远程服务器

    1. 先登录docker login -u 1263351411输入用户名和密码,会显示连接成功
    2. 制作镜像:docker commit -a "xdd <xdd@xdd.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 1263351411/xdd:latest
      • 注意:本地创库名称一定要和远程仓库名称一致
        docker_012
    3. 推送仓库到远程仓库docker push 1263351411/xdd
    [root@gdy ~]# docker login -u 1263351411
    Password:
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    xdd/httpd           v0.2                40e4281a313c        14 minutes ago      1.23MB
    xdd/httpd           latest              7e0338fff785        About an hour ago   1.22MB
    xdd/httpd           v0.1-1              7e0338fff785        About an hour ago   1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    [root@gdy ~]# docker commit -a "xdd <xdd@xdd.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p xddbox2 1263351411/xdd:latest
    sha256:8faf31d9f5aa6c9078a19df9f71ef03480f94472a799187257d30074a0913f8e
    [root@gdy ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    1263351411/xdd      latest              8faf31d9f5aa        4 seconds ago       1.23MB
    xdd/httpd           v0.2                40e4281a313c        15 minutes ago      1.23MB
    xdd/httpd           latest              7e0338fff785        About an hour ago   1.22MB
    xdd/httpd           v0.1-1              7e0338fff785        About an hour ago   1.22MB
    redis               4-alpine            442c73e7ad1d        3 days ago          20.4MB
    alpine              latest              961769676411        3 days ago          5.58MB
    busybox             latest              db8ee88ad75f        5 weeks ago         1.22MB
    nginx               1.14-alpine         8a2fb25a19f5        4 months ago        16MB
    alpine              3.8                 dac705114996        5 months ago        4.41MB
    [root@gdy ~]# docker push 1263351411/xdd
    The push refers to repository [docker.io/1263351411/xdd]
    f185c6337d6a: Pushed
    0d315111b484: Mounted from library/busybox 
    latest: digest: sha256:9d3fdb0a087e4c45d16734fa8c6d180d9d7e0171d70c55c3759b7c24336ec6c1 size: 734
    [root@gdy ~]#
    

    镜像导入和导出

    1. 导出语法docker save [OPTIONS] IMAGE [IMAGE...]
      1. 选项
        • --output,-o:写入文件
      • docker save -o xdd.gz xdd/httpd:v0.2 xdd/httpd:latest将“xdd/httpd:v0.2 xdd/httpd:latest”这两个镜像打包保存为xdd.gz
        • 打包后可以使用scp推送文件到指定主机:scp xdd.gz 192.168.61.108:/root/#将xdd.gz推送到108主机上的/root/目录下
    2. 导入语法docker load [OPTIONS]
      1. 选项:
        • --input,-i从tar中读取文件而不是从stdin中读取
        • --quiet,-q抑制负载输出
      • docker load -i xdd.gz在新的主机上可以使用load命令将打包好的文件加载

    docker容器虚拟化网络

    • docker network ls 查看docker支持的网络

      1. bridge #桥接网络,默认为docker容器的默认网络
      2. host #宿主机网络模型
      3. none #不指定网络,即相当于没有网卡
    • docker一共有四种网络模型

      1. closed container私有网络,即没有网卡。
      2. Bridged container桥接网络模型
      3. Joined container 联盟式网络(相当于两个容器之间共享网络,即两台主机共享同一个网卡等。)
      4. Open container开放式网络(通常开发的是物理网卡的网络接口,相当于共享宿主机网络)
        docker_013
    • docker network inspect bridge#查看bridge网络的配置信息
      docker_014

    • 使用ip命令模拟名称空间之间的通信

      1. ip netns add r2 #为宿主机添加一个网络名称空间为r2
      2. ip netns add r1 #为宿主机添加一个网络名称空间为r1
        • ip netns list *#查看宿主机的所有网络名称空间
        • ip netns exec r1 ifconfig #查看名称空间为r1的网络(如果没有可用网络,即没有显示)
        • ip netns exec r1 ifconfig -a #查看名称空间为r1的网络详细信息
      3. ip link add name veth1.1 type veth peer name veth1.2 #创建一组虚拟网卡对veth1.1和veth1.2
        • ip link show #可用查看虚拟网卡。
      4. ip link set dev veth1.1 netns r1#将虚拟网卡veth1.1移动到网络名称空间r1中
        • ip netns exec r1 ifconfig -a 可用看到已经移动过来的veth1.1网卡,但是没有激活
      5. ip netns exec r1 ip link set dev veth1.2 name eth0 #将网络名称r1中的虚拟网卡veth1.2的名称修改为eth0
      6. ifconfig veth1.1 10.1.0.2/24 up 激活虚拟网卡veth1.1,ip为10.1.0.2/24
      7. ip netns exec r1 ifconfig eth0 10.1.0.2/24 up #激活r1中的虚拟网卡eth0 ip为:10.1.0.2/24
        • ip netns exec r1 ifconfig #此时key看到激活后的虚拟网络eth0,已经激活
        • ping 10.1.0.2 #在宿主机上直接ping,可以看到链接成功
      8. ip link set dev veth1.2 netns r2#将虚拟网卡veth1.2移动到网络名称空间r2中
      9. ip netns exec r2 ifconfig veth1.2 10.1.0.3/24 up #激活r2中的虚拟网卡veth1.2 ip为 10.1.0.3/24
        10 ip netns exec r2 ping 10.1.0.2 使用r2名称空间访问r1名称空间的ip地址,可以链接。

    四种网络模型的创建

    • 相关命令
      1. --rm 停止后自动删除容器
        • docker run --name t1 -it --rm busybox:latest#创建容器,关闭后容器会被自动删除
      2. --network #为创建的容器指定网络,如果不指定,默认为桥接模式bridge
        • docker run --name t1 -it --network bridge --rm busybox:latest
      3. -h --hostname #为容器创建的容器指定主机名,如果不指定,默认为容器id
        • docker run --name t1 -it --network bridge -h t1.xdd.com --rm busybox:latest #同上面例子,指定了主机名为t1.xdd.com
      4. --dns #为创建的容器指定dns服务器地址
        • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --rm busybox:latest #指定创建的容器dns为114.114.114.114
      5. --dns-search 指定搜索域
        • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --rm busybox:latest #指定创建的容器dns-search搜索域为:ilinux.io
      6. --add-host添加指定的容器本地主机名解析
        • docker run --name t1 -it --network bridge -h t1.xdd.com --dns 114.114.114.114 --dns-search ilinux.io --add-host www.xdd.com:1.1.1.1 --rm busybox:latest #为新创建的主机添加www.xdd.com域名指定到1.1.1.1主机上
          7 -p,--publish-all选项的使用格式
        • -p <containerPort> #将指定的容器端口映射至主机所有地址的一个动态端口
        • -p <hostPort>:<containerPort> #将容器端口<containerPort>映射到指定的主机端口<hostPort>
        • -p <ip>::<containerPort> #将指定的容器端口<containerPort>映射至主机指定<ip>的动态端口
        • -p <ip>:<hostPort>:<containerPort> #将指定的容器端口<containerPort>映射至主机指定的<ip>的端口<hostPort>
        1. "动态端口"指随机端口,具体的映射结果可使用docker port命令查看
    1. closed container私有网络

      • docker run --name t1 -it --network none --rm busybox:latest#根据busybox:latest镜像创建一个容器,容器名为t1,容器停止后自动删除,容器使用的网络模型为none,即仅主机模式。
    2. Bridged container桥接模式

      • Docker0为NAT桥,因此容器一般获得的是私有网络地址
      • 可以把容器想像为宿主机NAT服务背后的主机
      • 如果开发容器或其上的服务为外部网络反问,需要在宿主机上为其定义DNAT规则,例如
        1. 对宿主机某IP地址的访问全部映射给某容器地址
          • 主机IP 容器IP
            • -A PREROUTING -d 主机IP -j DNAT --to-destination容器IP
        2. 对宿主机某IP地址的某端口的访问映射给某容器地址的某端口
          • 主机IP:PORT 容器IP:PORT
            • -A PREROUTING -d 主机IP -p {tcp|udp} --dport主机端口 -j DNAT --to-destination容器IP:容器端口
      • 为docker run命令使用-p选项即可实现端口映射,无需手动添加规则
      1. docker run --name web1 --network bridge -p 80 --rm xdd/httpd:v0.2启动xdd/httpd:v0.2镜像,将启动后的容器暴露内部80端口随机映射到宿主机上的一个端口。(注意:这里xdd/httpd:v0.2默认会启动一个httpd的web服务在80端口上,上面文档有说明配置方法)
        • 注意:如果宿主机上有多个ip地址,默认是映射到所有ip地址上对应的这个端口上。即0.0.0.0:port
        • docker inspect web1可以查看容器详细信息
        • iptables -t nat -vnl可以查看网络映射地址和端口
          docker_015
          docker_016
        • docker port web1可以查看容器web1上映射的端口信息
      2. docker run --name web1 --network bridge -p 192.168.61.109::80 --rm xdd/httpd:v0.2 同上,在宿主机的端口映射为:192.168.61.108:随机post <-- web1容器80端口
      3. docker run --name web1 --network bridge -p 80:80 --rm xdd/httpd:v0.2 同上,端口映射为:web1容器80 --> 0.0.0.0:80
      4. docker run --name web1 --network bridge -p 192.168.61.109:80:80 --rm xdd/httpd:v0.2 同上,端口映射为:web1容器80 --> 192.168.61.109:80
      • 如果需要多个端口,-p选项可以使用多次。
    3. Joined container联盟式容器网络

      • 联盟式容器时指使用某个已存在容器的网络接口的容器,接口被联盟内的各容器共享使用;因此联盟式容器彼此间完全隔离,例如:
        1. 创建一个监听与2222端口的http服务容器
          • docker run -d -it --rm -p 2222 busybox:latest /bin/httpd -p 2222 -f
        2. 创建一个联盟式容器,并查看监听的端口
          • docker run -it --rm --net container:web --name joincd busybox:latest netstat -tan
      • 联盟式容器彼此间虽然共享同一个网络名称空间,但其他名称空间如User、Mount等还是隔离的
      • 联盟式容器彼此间存在端口冲突的可能性,因此,通常只会在多个容器上的程序需要程序loopback接口互相通信、或对某已存在容器的网络属性进行监控时才使用此种模式的网络模型
      1. 创建联盟的两个容器
        • docker run --name b1 -it --rm busybox #正常先启动一个容器,默认会分配一个ip为桥接模式
          1. mkdir /tmp/dir创建目录
          2. echo "hello word" >/tmp/index.html #在tmp目录下创建index.html文件
          3. httpd -h /tmp/ #启动httpd服务器,root目录为/tmp目录下
        • docker run --name b2 -it --network container:b1 --rm busybox #启动第二个容器,指定和b1共享同一个网络。
        • 测试
          1. ls /tmp/ 可以看到谁然共享网络,单不会共享文件目录
          2. wget -O - -q 127.0.0.1 #可以看到能获取到80端口的web服务器文件内容“Hello word”
    4. Open container(共享主机网络)

      1. 建立和宿主机的联盟(共享宿主机网络)
        • docker run --name b2 -it --network host --rm busybox #新运行的容器b2和宿主机共享同一网络和ip

    docker网络相关配置

    1. 自定义docker0桥的网络属性信息:/etc/docker/daemon.json文件

      {
          "bip": "192.168.1.5/24", //docker0桥接网络ip和子掩码
          "fixed-cidr": "10.20.0.0/16",
          "fixed-cidr-v6": "2001:db8::/64",
          "mtu": 1500,
          "default-gateway": "10.20.1.1", //每个容器启动时,获得的默认网关
          "default-gateway-v6": "2001:db8:abcd::89", //每个容器启动时,获得的ipv6网关
          "dns": ["10.20.1.2","10.20.1.3"], //每个容器启动后自动拥有响应的服务器dns地址
          "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"] //docker客户端连接的docker服务器地址,默认为docker.sock表示连接本机。
      }
      
    2. dockerd守护进程的C/S,其默认仅监听Unix SOcket格式的地址/var/run/docker.sock;如果使用TCP套接字,需要修改/etc/docker/daemon.json文件中的"hosts"属性

      • hosts: ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"] #注意:ip端口可以自己定义

        • docker客户端访问不同服务器上的docker,可以向dockerd直接传递"-H|–host"选项
        [root@gdy ~]# cat /etc/docker/daemon.json 
        {
        "registry-mirrors": ["https://qx4pe1od.mirror.aliyuncs.com"],
        "bip": "10.10.0.1/16",
        "hosts": ["tcp://192.168.61.108:8888","unix:///var/run/docker.sock"]
        }
        
        [root@gdy ~]# systemctl stop docker
        [root@gdy ~]# systemctl restart docker
        [root@gdy ~]# ss -tnl
        State       Recv-Q Send-Q             Local Address:Port                            Peer Address:Port              
        LISTEN      0      128                            *:25672                                      *:*                  
        LISTEN      0      50                             *:3306                                       *:*                  
        LISTEN      0      128                            *:111                                        *:*                  
        LISTEN      0      128                            *:4369                                       *:*                  
        LISTEN      0      5                  192.168.122.1:53                                         *:*                  
        LISTEN      0      128                            *:22                                         *:*                  
        LISTEN      0      128                    127.0.0.1:631                                        *:*                  
        LISTEN      0      128               192.168.61.108:8888                                       *:*                  
        LISTEN      0      128                            *:15672                                      *:*                  
        LISTEN      0      100                    127.0.0.1:25                                         *:*                  
        LISTEN      0      128                    127.0.0.1:6010                                       *:*                  
        LISTEN      0      128                           :::5672                                      :::*                  
        LISTEN      0      128                           :::111                                       :::*                  
        LISTEN      0      128                           :::3888                                      :::*                  
        LISTEN      0      128                           :::4369                                      :::*                  
        LISTEN      0      128                           :::22                                        :::*                  
        LISTEN      0      128                          ::1:631                                       :::*                  
        LISTEN      0      100                          ::1:25                                        :::*                  
        LISTEN      0      128                          ::1:6010                                      :::*                  
        [root@gdy ~]#
        
        • 修改完成后再其他主机上可以使用如下命令访问:
          1. docker -H 192.168.61.108:8888 ps #查看指定docker主机的容器信息。
        • 注意:如果重新启动出现如下错误:
          docker_017
          1. 解决办法:修改/lib/systemd/system/docker.service配置文件,将ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock中的-H fd://去掉即可
            docker_018
    3. 创建网络

      • docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0 #创建一个mybr0的网络,网络模式为bridge桥接模式,子网络为172.26.0.0/16,网关为172.26.0.1
      • docker run --name t1 --it --net mybr0 busybox:latest # --net是--network的简写,从镜像busybox:latest中启动一个容器为t1,并加入mybr0网络
        docker_019

    docker存储卷

    • Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层
    • 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制
      docker_020
    1. 容器的问题:
      • 关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失
      • 存在的问题:
        1. 存储于联合文件系统中,不易于宿主机访问;
        2. 容器间数据共享不便
        3. 删除容器其数据会丢失
      • 解决方案:“卷(volume)”
        1. "卷"是容器上的一个或多个“目录”,此类目录可以绕过联合人就系统,与宿主机上的某个目录“绑定”(关联)
          docker_021
    2. Data volumes数据卷
      • 数据卷为持久数据或共享数据提供了几个有用的特性:
        1. Volume于容器初始化之时即会创建,有base image提供的卷中的数据会于此期间完成复制
        2. 数据卷可以在容器之间共享和重用
        3. 对数据卷的更改是直接进行的
        4. 更新映像时,不包括对数据卷的更改
        5. 即使删除容器本身,数据卷也会保持
      • Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时即不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作;
      • 卷为docker提供了独立于容器的数据管理机制
        1. 可以把镜像想像成静态文件,例如“程序”,把卷类比为动态内容,例如“数据”;于是,镜像可以重用,而卷可以共享;
        2. 卷实现了“程序(镜像)”和“数据(卷)”分离,以及“程序(镜像)”和"制作镜像的主机"分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境;
          docker_022
    3. 卷的类型(Volume types)
      • Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同;
        1. Bind mount volume(绑定挂载卷)
          • 指向主机文件系统上用户指定位置的卷
        2. Docker-managed volume(docker管理的卷)
          • Docker守护进程在主机文件系统中Docker拥有的一部分中创建托管卷(即:docker自己创建委托管理的卷)
            docker_023
    4. 在容器中使用Volumes(卷)
      • Docker-managed volume(docker自己托管的卷)创建方式
        1. docker run -it --name bbox1 -v /data busybox #根据busybox创建一个容器,并挂载一个卷在容器中的/data目录下
          • docker run -it --name bbox1 -v /data busybox#会在宿主机下/var/lib/docker/volumes/自动生成的id/_data目录下绑定容器的/data目录
        2. docker inspect -f {{.Mounts}} bbox1 #查看bbox1容器的卷、卷标识符及挂载的主机目录
      • Bind-mount Volume(绑定挂载卷)的创建方式
        1. docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox #根据busybox镜像创建一个容器,将宿主机上的“HOSTDIR”目录挂载到容器中的“VOLUMEDIR”目录
          • docker run -it --name bbox1 -v /data/volumes/b2:/data --rm busybox #指定宿主机/data/volumes/b2目录绑定容器的/data目录,注意:如果目录不存在会自动创建。
        2. docker inspect -f {{.Mounts}} bbox2 #查看bbox2容器的卷、标识符及挂载的主机目录。
    5. Sharing volumes(共享卷)
      • 有两种方法可以在容器之间共享卷
        1. 多个容器的卷使用同一主机目录,例如:
          • docker run -it --name c1 -v /docker/volumes/v1:/data busybox
          • docker run -it --name c2 -v /docker/volumes/v1:/data busybox
        2. 复制使用其他容器的卷,为docker run命令使用--volumes-from选项
          • docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox
          • docker run -it --name bbox2 --volumes-from bbox1 busybox
    展开全文
  • 容器技术概述

    2019-06-06 10:27:39
    -----容器技术概述----- 容器技术是这两年热门的话题,因为容器技术给我们带来了很多方便的地方,节约了不少成本,不管是在运维还是开发上。而如今最热门的开源容器工具就是docker了,虽然不少人已经使用过docker,...
  • docker容器技术

    千次阅读 2019-05-30 13:22:35
    容器技术是一种应用程序封装和交付的核心技术 容器技术的核心由以下几个内核技术组成: (1)Cgroups(Control Groups):资源管理 (2)NameSpace:进程隔离 a. 主机名称隔离 b. 网络隔离 c. 文件系统隔离 d. ...
  • 嵌入式Linux容器技术

    千次阅读 2019-08-13 14:59:21
    嵌入式Linux容器技术 一、Linux容器技术 Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。 LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,...
  • 容器技术经验谈

    2018-04-12 10:44:17
    以 Docker 为代表的容器技术逐渐走向企业的落地实践,技术开发者关心的不是容器技术如何“改变世界”,而是如何利用容器技术和自身的业务、场景结合起来,从而切实提高自己企业的开发效率和减少运维成本。...
  • 接上一篇文章【容器技术】Docker容器技术入门(一)今天接着上次聊一聊有关Docker网络、数据存储相关的技术点Docker网络模式01Dokcer 通过使用 Linu...
  • Docker 容器技术 — 容器网络

    千次阅读 多人点赞 2020-10-02 10:39:47
    文章目录目录容器网络容器网络类型bridge 模式host 模式Container 模式none 模式容器端口映射容器跨主机通信 容器网络 容器网络类型 Docker 提供几种类型的网络,它决定容器之间、容器与外界之前的通信方式。 查看...
  • 容器技术详解

    千次阅读 2018-11-21 21:03:59
    IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,咱们要交流要传授,如果翻译成“集装箱技术” 就有点拗口,所以结合中国人的...
  • 容器技术20年

    2020-11-17 16:09:42
    容器技术和云原生就是一对双螺旋体,容器技术催生了云原生思潮,云原生生态推动了容器技术发展。从2013年docker(container)技术诞生,到2015年CNCF这个云原生领域重量级联盟便成立,这不是历史的巧合而是历史的...
  • 容器技术之发展简史

    千次阅读 2020-10-16 13:36:20
    简介:容器技术催生了云原生思潮,云原生生态推动了容器技术发展。整理容器技术近 20 年的发展历史,大致可以将其分为四个历史阶段。作者 | 刘奖背景“云原生技术有利于各组织在公有云、私有云和混合云等新型动态...
  • Docker 容器技术 — Overview

    千次阅读 2020-10-01 14:39:31
    Docker 是一个 Golang 开发的开源项目,是一种轻量级的容器技术,可以轻松创建容器和基于容器的应用程序。本质是一种操作系统虚拟化技术,最初基于 Linux Kernel 的 cgroups 和 namespace 实现的 LXC 技术。 ...
  • Docker容器技术概述

    2019-08-24 22:49:55
    容器生态系统包括容器技术和容器平台技术(容器编排引擎、容器管理平台、基于容器的paas)。 容器技术是学习容器的核心知识;容器编排引擎在大规模生产部署中非常重要;容器管理平台是架构在容器编排引擎之上,抽象...
  • 容器技术及其应用

    2018-12-20 11:15:00
    一、容器技术及其应用 1. 内容摘要 近年来,容器技术及相关应用得到了国内外越来越多的关注度,研发和应用推广发展势头迅猛。在国外,容器技术已经形成了较成熟的生态圈;在国内,金融企业、互联网企业、IT企业...
  • 容器技术简介

    2017-07-21 10:43:51
    1.容器技术简介 对于容器,它首先是一个相对独立的运行环境,在这一点有点类似于虚拟机,但是不像虚拟机那样彻底。在容器内,应该最小化其对外界的影响,比如不能在容器内把host上的资源全部消耗,这就是资源控制...
  • 容器技术的概念

    2019-11-18 16:58:04
    容器技术是英文单词Linux Container的汉译。Linux Container两个单词,第一个Linux表明了容器技术一般是应用在Linux操作系统上面;Container意思有:容器,集装箱,货柜的意思,为了方便理解,这里采用集装箱的汉译...
  • 一、前言 说到容器,小编最先接触的容器还是tomcat这些... 这里小编就重点介绍一下容器技术的发展以及容器技术的黑马Docker。二、容器技术发展 小编觉得这张图非常棒,涵盖了容器技术的演变。 容器技术最早可以追溯
  • docker-容器技术

    千次阅读 2020-11-11 19:18:31
    容器技术 – 2 镜像管理 commit 打包镜像 docker commit 容器id 新镜像名称:标签 [root@node-0001 ~]# docker run -it centos:latest [root@02fd1719c038 ~]# rm -f /etc/yum.repos.d/*.repo [root@02fd1719c038 ~]#...
  • SDCC 2017之容器技术实战线上峰会

    千人学习 2017-12-19 14:27:46
    12月16日, 我们邀请到腾讯、华为、...具体内容包括容器技术在58同城的实践,蘑菇街容器平台的实践与落地心得、腾讯云容器服务架构实现介绍、微服务框架发展史、Kubernetes容器云平台实践、ServiceMesh-Linkerd的实践。
  • 虚拟化与容器技术

    2020-01-31 19:28:01
    虚拟化与容器技术
  • 美团的容器集群管理平台叫做HULK。漫威动画里的HULK在发怒时会变成“绿巨人”,它的这个特性和容器的“弹性伸缩”很像,所以我们给这个平台起名为HULK。...我们在探索容器技术时,很难放弃原有的资产。所以容器化...
  • 容器技术发展现状与展望

    千次阅读 2018-07-06 15:56:18
    一、容器技术发展现状容器技术主要可以分为容器运行技术和容器编排技术。其中:容器运行技术主要包括Docker和rkt等;容器编排技术主要包括Kubernetes、Meso...
  • Docker 容器技术 — 容器存储

    千次阅读 多人点赞 2020-10-02 10:40:46
    文章目录目录容器存储数据卷管理挂载时创建卷创建卷后挂载数据容器管理 容器存储 数据卷管理 核心选项: -v 宿主机目录:指定挂载到容器内的目录。 映射多个宿主机目录,只需要多写几个 -v 即可。 挂载时创建卷 ...
  • 传统的云计算是基于虚拟机技术的,而容器技术解决了虚拟机原来解决不了的问题。 云计算主要解决的是资源弹性的问题,感兴趣的可以看历史文章《不懂技术也能看懂云计算,大数据,人工智能》。 所谓资源,主要是指...
  • 本文将从什么是富容器、富容器适用场景、富容器技术实现三个角度全方位向大家解释富容器技术,同时对富容器感兴趣的同学可以扫描文章末尾二维码参与关于富容器的技术讨论。本文作者 PouchContainer 团队孙宏亮,更多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,803
精华内容 15,521
关键字:

容器技术