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(管住虚拟机,Docker的介绍和安装。官网、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集团高级软件工程师
杰罗姆 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
的。请阅读由 迈克 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
打包应用程序时,我纳闷了。我们怎么须要再多一个运用打包系统(packaging
system)?我早已经把自个儿的 Java 程序打包成 JAR 或 WAR
了。在花了些日子阅读了关于 Docker 的素材后,我了解了 Docker
应用包(application package)的意思。Docker 就是虚拟机和你的像 WAR 或
JAR
那样的应用包之间的大桥。一方面来说,虚拟机是极度重量级的(耗资源),因为移植时要附带些不要求的事物。另一方面来说,应用代码包(the
application code
packages)是这么些的轻量的,并没有附带丰硕可相信地运行起来的音信。Docker
很好地平衡了这两方面。

在 Docker 中,应用程序包(application
package)意味着一个含有了应用程序代码和所需安插环境的包。例如,在 Java
中大家一般把咱们的 Web 应用程序打包在一个 WAR 文件中。这几个 WAR
文件是一个可怜简便的软件包,它仅仅包涵了应用程序的代码。但应用程序须求一定安顿的环境去高效地运作起来。有时候安排的条件和付出时的环境是不一样的。例如开发者使用
Java 7 开发顺序,但配备时的环境是在 OpenJDK Java 6 中;又可能是在 Mac
上开发的,但在 RHEL 上配置。景况也有或许是:有一部分系统库(system
libraries)在开发条件和效仿条件(staging
environment)中,在不相同的应用程序上有差其余功能。Docker
通过不仅仅打包应用程序,也卷入应用程序的倚重环境来缓解那几个题材。

$ tree
.
├── boxes
│   └── precise64.box
└── works

2 directories, 1 files

初阶应用 Docker

在 Fedora
机器上拔取那篇博文中的指令安装
Docker

$ vagrant up
$ vagrant ssh

然后安装 Docker Fedora 镜像:

$ sudo docker pull mattdm/fedora

地方的命令会从  上下载 Docker Fedora 镜像。
设置了 Docker Fedora 镜像后,我们得以利用下边发号施令列出所有的镜像:

$ sudo docker images

REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
shekhargulati/node_image_007   latest              e12b3054d981        50 minutes ago      470.3 MB (virtual 601.8 MB)

mattdm/fedora                         12.04               8dbd9e392a96        7 months ago        131.5 MB (virtual 131.5 MB)

地点列表中率先个镜像就是自己在此以前成立的。它打包了 NodeJS 及 Express
Fremework。第一个镜像就是储存的 Docker Fedora 镜像了。

当今,大家在 Docker 容器内运行一个剧本:

$ sudo docker run -t -i -p 3000 mattdm/fedora /bin/bash

在运作完上边的命令后,大家就在 Docker
的器皿里面了。大家可以透过 ls 命令列出所有的吩咐。

当今咱们创造上面的目录结构 /home/shekhar/dev

$ mkdir -p home/shekhar/dev
$ cd home/shekhar/dev

明天,我会安装 NodeJS。运行下面的通令去在 Fedora Docker 镜像上设置
Node:

$ sudo yum install npm

接着,大家设置 Express 框架:

$ npm install express -g

Express 框架安装后,大家制造一个新的 Express 程序,然后运行它:

$ express myapp
$ cd myapp
$ npm install
$ node app.js

上边会在 3000 端口启动 NodeJS Express 程序。

今昔开拓另一个命令行标签,列出富有的 Docker 进程:

$ sudo docker ps
CONTAINER ID        IMAGE                                 COMMAND             CREATED             STATUS              PORTS                     NAMES
4a5715a915e5        mattdm/fedora   /bin/bash           5 minutes ago       Up 5 minutes        0.0.0.0:49157->3000/tcp   red_duck

你会专注到,3000 端口和本机上的 49157 绑定了。你可以通过上边所示的 curl 命令测试
Express 应用:

$ curl 0.0.0.0:49157
<!DOCTYPE html><html><head><title>Express</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>Express</h1><p>Welcome to Express</p></body></html>

方今 commit 镜像,然后 push 到 Docker
镜像注册表(registry)。在您做那步事先,你必须通过 去挂号一个
Docker 注册表。

$ sudo docker commit 4a5715a915e5 shekhargulati/node_image_007
$ sudo docker push shekhargulati/node_image_007

请使用你协调的用户名和镜像名。

从而,我的率先个镜像已经上传到 Docker
注册表下面了: 

您可以使用 pull 命令下载那一个镜像:

$ docker pull shekhargulati/node_image_007

那就是明日的始末。保持反馈!


原文:Day 21: Docker–The Missing
Tutorial
翻译整理:Segmentfault

 

成立命令:

$ mkdir vagrant_projects
$ mkdir boxes
$ mkdir works

接下来把下载好的 Box 放到 boxes 文件夹下,然后命令转到 boxes
目录下(cd boxes),然后实施添加 Box 命令:

$ vagrant box add ubuntu precise64.box

添加后从此,可以查看所增进的 Box 列表:

$ vagrant box list
ubuntu64 (virtualbox, 0)

命令转到 works 目录下(cd works)接着举办先河化虚拟机:

$ vagrant init ubuntu64

开头化完结后,会在当前目录下生成一个 VagrantFile
配置文件,里面是对虚拟机环境的部分配备(可以手动修改),然后启动虚拟机:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 5.1
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/xishuai/vagrant_project/works
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

虚拟机启动好将来(可以在 VirtualBox
中查阅是不是已启动),就足以登录虚拟机了:

$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Tue Dec 27 10:16:06 2016 from 10.0.2.2
vagrant@precise64:~$ 

这一个命令就表示已经进入了 Ubuntu
的连串,可以像在虚拟机中应用同一选拔它了。

当然也得以把你配好的 Box 导出出来,给其外人使用,执行命令:

$ cd ~/VirtualBox\ VMs/works_default_1482820841651_93029
$ vagrant package  --output works_default_1482820841651_93029 --base ubuntu64.box

Vagrant 命令列表:

  • vagrant box list:查看box列表
  • vagrant add box box 名字 box地址:添加box,自动帮您生成
    Vagrantfile
  • vagrant init box 名字:初始化 Vagrantfile
  • vagrant up:启动虚拟机
  • vagrant ssh:连接虚拟机
  • vagrant halt:关闭虚拟机
  • vagrant reload:重新加载 Vagrantfile 文件
  • vagrant suspend:暂时挂起虚拟机
  • vagrant destroy:销毁虚拟机
  • vagrant status:查看虚拟机运行状态
  • vagrant package:导出 Box

在使用 Vagrant 的时候,碰着了这么一个标题:创制的 Ubuntu
虚拟机,要求拜访外部互联网,所以必要将虚拟机的网络方式设置为桥接形式(Bridged),于是就动用
VirtualBox 进行安装,但设置成功之后,每一次 Vagrant
启动虚拟机的时候,都会开展互连网情势重置,但假如用 VirtualBox
启动以来,就不曾什么难点。

澳门金沙国际 5

本条难题搞了久久,最后的化解方案是修改 Vagrantfile
配置文件,添加如下配置:

config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)"
config.vm.boot_timeout = 20

boot_timeout是链接超时设置(20
秒),bridge末端表示桥接的互联网方式(WiFi
网络),若是不开展设置的话,每趟启动虚拟机的时候,会举行拔取网络方式:

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Specific bridge 'en1: Wi-Fi (AirPort)' not found. You may be asked to specify
==> default: which network to bridge to.
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: Thunderbolt 1
3) en2: Thunderbolt 2
4) p2p0
5) awdl0
6) bridge0
7) vmnet1
8) vmnet8
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to?     

是因为事先的 Ubuntu 版本太低(12.04),安装 .NET Core
的时候,遇到了一些标题,后来又换了一个 Ubuntu
Box(版本
14.04),但配备的时候,又遇上了上面难题:

$ vagrant init ubuntu_server1
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
xishuaideMacBook-Pro:ubuntu_server1 xishuai$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu_server1'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu_server1_default_1482924693668_66404
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default: 
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Mounting shared folders...
    default: /vagrant => /Users/xishuai/vagrant_project/ubuntu_server1
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

mount: unknown filesystem type 'vboxsf'

消除方案(参考 Vagrant error : Failed to mount folders in Linux
guest):

$ vagrant plugin install vagrant-vbguest

其它,附一些 Linux 常用命令:

  • command &:将经过放在后台执行
  • ctrl + z:暂停当前历程 并放入后台
  • jobs:查看当前后台职责
  • bg( %id):将任务转为后台执行
  • fg( %id):将职务调回前台
  • kill( %id):杀掉职务

参考资料:

  • Vagrant
    安装配备
  • 用 Vagrant 管理虚拟机
  • 高效创造跨平台开发条件 vagrant + virtualbox +
    box
  • 发端选用 Vagrant
  • windows 下 使用 vagrant 来治本 linux
    虚机开发环境
  • Vagrant PUBLIC
    NETWORKS

相关文章