xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 每日资讯 2019-09-28 16:45 的文章
当前位置: 新濠国际登录平台 > 每日资讯 > 正文

Docker 是一个开源的应用容器引擎,镜像文件、新

Docker介绍

Docker是指容器化技术,用于支持创建和实验Linux Container。借助Docker,你可以将容器当做重量轻、模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对容器的高效创建、部署和复制,并能将其从一个环境顺利迁移至另外一个环境。

Docker官方网站:

Github Docker 源码:

基础特性

  • 基于C/S架构应用程序
  • 模块化
  • 层与镜像版本控制
  • 支持回滚
  • 快速部署

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

Docker基础架构图

新濠国际登录平台 1

  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器
  • Docker 容器通过 Docker 镜像来创建
  • DOCKER_HOST:真正运行容器的主机
  • Containers:容器,独立运行的一个或一组应用
  • Images:镜像,用于创建 Docker 容器的模板
  • Registry:镜像仓库

镜像image与容器Container区别

  • 镜像是静态的,不会运行
  • 容器则是动态的,有生命周期

Docker容器镜像站:

Docker object

  • image
  • containers
  • networks
  • volumes
  • plugins

add by zhj:

Vagrant(官网、github)是一款构建虚拟开发环境的工具,支持 Window,Linux,Mac OS,Vagrant 中的 Boxes 概念类似于 Docker(实质是不同的),你可以把它看作是一个箱子,里面装了一些东西,Vagrant 创建虚拟机的时候,需要用到 Box ,它里面包含了虚拟机配置、虚拟机硬盘镜像和 Vagrant 配置的压缩包,有了 Box,你不需要再重新下载 ISO 镜像文件、新建虚拟机、修改虚拟机等配置,而是直接运行你所需要的操作系统。

新濠国际登录平台 2

Docker的安装

      可以简单的认为docker是对LXC(Linux Container)封装,它提供一种比LXC高级的API。Docker使用Go语言开发,利用了Linux提供的LXC,AUFS,namespace和cgroup技术。实现了文件系统,资源和网络的隔离,最终目标是实现类似PaaS平台的应用隔离。最大的优势在于相比重量级虚拟机如KVM、Xen、VMWare、VirtualBox而言启动快,占有资源小,迁移也非常方便。docker目前只运行在Linux上,不过这个Linux可以是上面说的重量级虚拟机,也可以是直接基于裸机的Linux。按docker公司高级软件工程师 Jerome Petazzoni的说法:“重量级” 的虚拟化包括KVM、Xen、VMWare、VirtualBox以及其他的虚拟化系统。“轻量级”指的就是OpenVZ、VServer、(LXC)containers,zones等等。我认为,“重量级”的虚拟化推动IaaS(就是我们经常说道的“云”)的发展,而“轻量级“虚拟化则推动PaaS的发展,这些有利于更广泛地进行“云”部署。docker使用场景参见:八个Docker的真实应用场景 和 Docker 的应用场景在哪里?

更多 Vagrant 概念,参考:Vagrant 是什么,不是什么。

Docker 是一个开源的应用容器引擎。

直接在CentOS上安装Docker

首先安装之前先卸载之前的旧版本:

$ sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-selinux 
                  docker-engine-selinux 
                  docker-engine

安装docker依赖包:

$ sudo yum install -y yum-utils 
  device-mapper-persistent-data 
  lvm2

添加docker源(如果Docker官方下载的速度太慢也可以使用阿里的镜像源:

$ sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker:

$ sudo yum install docker-ce

安装完直接启动docker即可:

~]# systemctl start docker

使用docker version 可以看到我们安装docker的版本

~]# docker version 
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:20:16 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:58 2018
  OS/Arch:      linux/amd64
  Experimental: false

      另外,美团网技术团队的Docker系列之一:入门介绍 也不错。

Vagrant 支撑 VirtualBox、HyperV、VMWare 等虚拟机软件,我 Mac 电脑装的是 VMWare Fusion,但 Vagrant 支持是收费的(79 美元),好黑呀,不过 VirtualBox 是免费的,我又安装了个 VirtualBox(大概 300 M),以便做示例。

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

使用Vagrant + Virtual Box快速搭建Docker环境

Vagrant介绍
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。我们可以使用它来干如下这些事:

  • 建立和删除虚拟机
  • 配置虚拟机运行参数
  • 管理虚拟机运行状态
  • 自动配置和安装开发环境
  • 打包和分发虚拟机运行环境

Vagrant的运行,需要依赖某项具体的虚拟化技术,最常见的有VirtualBox以及VMWare两款,早期,Vagrant只支持VirtualBox,后来才加入了VMWare的支持。

Vagrant安装和使用

Vagrant是基于其他虚拟化产品来创建虚拟机的,这里我们选择开源产品Virtual Box,我们先安装Virtual Box和Vagrant:

  • Virtual Box下载地址:
  • Vagrant下载地址:

下载好之后先使用vagrant init centos/7生成默认的Vagrntfile,然后使用vagrant up即可自动创建虚拟机,我们为了配置Docker环境需要更改下Vagrantfile,在创建虚拟机的时候自动安装docker环境(配置config.vm.provision "shell"选项)并且按照自己的要求配置虚拟机的规模和网络。

我的Vagrantfile配置如下

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [
    {
        :name => "docker-1",
    :eth1 => "172.16.56.11",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/7"
  boxes.each do |opts|
    config.vm.define opts[:name] do |config|
      config.vm.hostname = opts[:name]
      config.vm.provider "vmware_fusion" do |v|
        v.vmx["memsize"] = opts[:mem]
        v.vmx["numvcpus"] = opts[:cpu]
      end
      config.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", opts[:mem]]
        v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
      end
      config.vm.network :public_network, ip: opts[:eth1]
    end
  end

#  config.vm.synced_folder "../sync", "/home/vagrant/sync"

  config.vm.provision "shell", inline: <<-SHELL
      yum -y install wget
      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      yum makecache
      yum install -y yum-utils device-mapper-persistent-data lvm2
      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      yum makecache fast
      yum -y install docker-ce
      sudo systemctl start docker
  SHELL
end

之后使用vagrant up创建即可

λ vagrant up
Bringing machine 'docker-1' up with 'virtualbox' provider...
==> docker-1: Importing base box 'centos/7'...

 [KProgress: 20%
 [KProgress: 40%
 [KProgress: 90%
 [K==> docker-1: Matching MAC address for NAT networking...
==> docker-1: Checking if box 'centos/7' is up to date...
==> docker-1: Setting the name of the VM: docker-1_docker-1_1534247086153_83300
==> docker-1: Clearing any previously set network interfaces...
==> docker-1: Preparing network interfaces based on configuration...
    docker-1: Adapter 1: nat
    docker-1: Adapter 2: bridged
==> docker-1: Forwarding ports...
    docker-1: 22 (guest) => 2222 (host) (adapter 1)
==> docker-1: Running 'pre-boot' VM customizations...
==> docker-1: Booting VM...
==> docker-1: Waiting for machine to boot. This may take a few minutes...
    docker-1: SSH address: 127.0.0.1:2222
    docker-1: SSH username: vagrant
    docker-1: SSH auth method: private key
    docker-1: 
    docker-1: Vagrant insecure key detected. Vagrant will automatically replace
    docker-1: this with a newly generated keypair for better security.
    docker-1: 
    docker-1: Inserting generated public key within guest...
==> docker-1: Machine booted and ready!
==> docker-1: Checking for guest additions in VM...

...

在这个过程中Vagrant会帮我们创建好一台Centos 7的虚拟机并安装好Docker环境,使用vagrant ssh直接登陆虚拟机

λ vagrant ssh
Last login: Wed Aug 15 15:54:32 2018 from 10.0.2.2
[vagrant@docker-1 ~]$ sudo docker version
Client:
 Version:           18.06.0-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        0ffa825
 Built:             Wed Jul 18 19:08:18 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.0-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       0ffa825
  Built:            Wed Jul 18 19:10:42 2018
  OS/Arch:          linux/amd64
  Experimental:     false
[vagrant@docker-1 ~]$

Vagrantfile中有一项config.vm.synced_folder可以配置本地文件夹同步到虚拟机,挂载本地文件夹到虚拟机中需要VBoxAdditions的支持,这个可以在虚拟机起来之后在安装,也可以参考vagrant-vbguest这个插件的使用,这个功能比较适合开发人员,可以在本地编写代码而在Linux环境中调试代码运行。

Docker和vagrant都是最近才开始了解学习的,有什么错误或者不对的地方还请大家指正,有什么不懂的也可以一起交流。

 

使用 Vagrant 的目的,就是方便在虚拟机中做 Consul 的集群(Mac OS、Ubuntu 安装及使用 Consul)。

Docker 的优点


  • 运行时的性能可以获取极大提升(经典的案例是提升97%)
    管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
  • 敏捷
    像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
  • 灵活
    将应用和系统“容器化”,不添加额外的操作系统。
  • 轻量
    你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
  • 便宜
    开源的,免费的,低成本的。由现代Linux内核支持并驱动。轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
  • 生态系统
    正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.还有不计其数的社区和第三方应用。
  • 云支持
    不计其数的云服务提供创建和管理Linux容器框架。
    有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。Performance Characteristics of VMs vs Docker Containers by Boden Russel (IBM)
    Performance characteristics of traditional v ms vs docker containers
  • 简化程序:
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
  • 避免选择恐惧症:
    如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
  • 节省开支:
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

 

安装 Vagrant(使用 homebrew)

Docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。容器对象,镜像类;

新濠国际登录平台 3

  • Docker 镜像(Images)
    Docker 镜像是用于创建 Docker 容器的模板。
  • Docker 容器(Container)
    容器是独立运行的一个或一组应用。
  • Docker 客户端(Client)
    Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。
  • Docker 主机(Host)
    一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
  • Docker 仓库(Registry)
    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
    Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
  • Docker Machine
    Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

新濠国际登录平台 4

$ brew install vagrant

几个月以前,红帽(Red Hat)宣布了在 Docker 技术上和 dotCloud 建立合作关系。在那时候,我并没有时间去学习关于 Docker 的知识,所以在今天,趁着这个 新濠国际登录平台,30 天的挑战,我决定去学习一下 Docker 究竟是怎样的。这篇博文并不是说以后怎么在 OpenShift 上用 Docker 的。请阅读由 Mike McGrath 撰写的 "关于 OpenShift 和 Docker 的技术思考"。也可以看看这个 Stackoverflow 的问题,了解一下 Docker 和 OpenShift 的差别。

安装好 Vagrant 之后,就可以使用初始化 Box 了,你可以使用别人封装好的 Box,也可以自己封装 Box,比如下面命令:

什么是 Docker?

Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。

Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。Docker 利用了 LXC, cgroups 和 Linux 自己的内核。和传统的虚拟机不同的是,一个 Docker 容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。这里有一个 Stackoverflow 的答案,里面非常详细清晰地描述了所有 Docker 不同于纯粹的 LXC 的功能特性

Docker 会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux 服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

Docker 由下面这些组成:

  1. Docker 服务器守护程序(server daemon),用于管理所有的容器。
  2. Docker 命令行客户端,用于控制服务器守护程序。
  3. Docker 镜像:查找和浏览 docker 容器镜像。它也访问这里得到:
$ vagrant box add ubuntu/trusty64

我为什么要关心这些?

Docker 之所以有用,是因为把代码从一个机器迁移到另一个机器经常是困难的。它尝试去使得软件迁移的过程变得更加可信和自动化。Docker 容器可以移植到所有支持运行 Docker 的操作系统上。

可以看这篇文章了解更多:how the Fedora Project is embracing Docker

ubuntu/trusty64是一个公开 Boxes(更多 Boxes)。运行上面第一行命令后,Vagrant 会在工作目录下创建 Vagrantfile 配置文件。在线下载 Box 会比较慢,你可以先下载 Box 之后,再加载本地的 Box 进行初始化。

但是我已经在使用虚拟机(VMs)了

到现在为止,要把程序可靠地移植的唯一选择是虚拟机(Virtual Machines,VMs)。虚拟机现在已经很常见了,但虚拟机是非常低级,它提供的是完整的操作系统环境。虚拟机的问题是,迁移的时候太大了。它们包含了大量类似硬件驱动、虚拟处理器、网络接口等等并不需要的信息。 虚拟机也需要比较长时间的启动,同时也会消耗大量的内存、CPU 资源。

Docker 相比起来就非常轻量级了。运行起来就和一个常规程序差不多。这个容器不仅仅运行快,创建一个镜像和制作文件系统快照也很快。它可以在 EC2, RackSpace VMs 那样的虚拟环境中运行。事实上,在 Mac 和 Windows 系统上使用 Docker 的更好方式是使用 Vagrant。Docker 的初衷其实是发挥类似 VM 的作用,但它启动得更快和需要更少的资源。

我使用的是 Ubuntu 64 Box:,其他 Box 下载地址:

它就像 Vagrant 一样吗?

我遇到的一个疑问是,我应该用 Vagrant 还是 Docker 去为我的下一个项目创建沙箱环境?答案再一次是一样的。

Docker 比起 Vagrant 来说,运行起来会更加省资源。Vagrant 提供的环境其实是基于 Virtual Box 提供的虚拟机。可以阅读 Stackoverflow 的这个回答了解更多。

下载好 Box 之后,你可以创建这样的工作目录:

本文由新濠国际登录平台发布于每日资讯,转载请注明出处:Docker 是一个开源的应用容器引擎,镜像文件、新

关键词: