阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用 Vagrant 和 Docker 在一个 VM 中进行开发

386次阅读
没有评论

共计 7075 个字符,预计需要花费 18 分钟才能阅读完成。

理由

1. 用 Vagrant 开发很酷 - 一个项目 / 组件一个 VB

2. 用 Vagrant 开发很垃圾 - 缓慢的 Chef/Puppet/Ansible,多个巨大的 VM,遍地重复的软件。

3. Docker 带来独立的仅有一个 VM 的 VM 盒子。

4. CoreOS 内整合了 docker, 产品发布时候会做得很完美。

5.  开发者开心!编码和发布太容易了。

像我,你可以(或不可以)喜欢用 Vagrant 发布。为一个项目存储使用多个 VM 是不可思议的:像 Ansibe 之类的工具意味着你的 VM 将总是反映产品的环境。

假如你是揽活的人或者有许多项目,然而,可能是你有几十个 Vagrant 盒子在你的 dev 文件夹,慢慢吸收上亿磁盘空间。这是 vagrant 垃圾的地方。。。提别是有多个小 SSD 的时候。

进入:Docker. 一个从一个机器上管理容器的开源的工具。为所有我们的来自一个 VM 的项目,我们将使用容器作为“迷你 vagrants”. 我假设你这里用的是 Mac- 我不了解 windows.

让我们投入 docker! 

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

步骤一:设置 CoreOS

我们要使用 CoreOS 和 Vagrant 来安装 Docker,取代 Docker 推荐的 Ubuntu vagrant 文件安装。Screw 的建议。

为什么用 CoreOS?

CoreOS 是一个雄心勃勃的旨在简单、可伸缩服务部署的 linux 发行版。它是轻量级的,并且自带 Docker 的预安装。它的目的是让服务 Docker-based 应用变得容易。这就是为什么选择该 OS(系统)的原因 - 文件体积小、建议的安装方式都值得称赞!所以、我真的想去实测一下它。

Note:CoreOS 在 alpha 中已被创建。这意味着它在 SSH 回话中,可能发生随机重启的现象,但从长远的角度来看,希望是有帮助的。这个是需要注意下的。

安装

你从 CoreOS 的 Github 的仓库中进行安装,CoreOS 团队做了一个非常棒的工作。

你只需要按照下面的要求去做:

  1. 安装 1.3.1 版本以上的 Vagrant 和 4.0 版本以上的 VirtualBox。
    你可以通过 vagrant –version 命令检查你的 vagrant 版本,如果需要下载新的版本可以从 vagrant 的官网上去下载。

  2. 下载已经提供含有你开发使用根目录文件夹的 CoreOS vagrant 文件。在 Vagrant 中会安装 CoreOS。
    vagrant 的文件在这里。

  3. 添加端口转发到 Vagrant 的 web 服务器:
    命令是:config.vm.network :forwarded_port, guest: 80, host: 8080

  4. 需要注意的是默认情况下共享文件夹没有启用:
    可以通过下面的命令开启你 vagrant 文件的共享文件夹:
    config.vm.network “private_network”,
    ip: “10.1.2.3” *config.vm.synced_folder “.”, 
    “/home/core/share”, id: “core”,
    :nfs => true,
    :mount_options => [‘nolock,vers=3,udp’]*
    我们已经修改了 IP 地址,CoreOS 提供了专用网络:他们使用的 IP 地址是在公共地址的范围内(即别人公开的可访问的机器)。整个 10.X.X.X 的 IP 地址段都是私有的,这样的话可以避免冲突。

你可能已经清楚了安装步骤:我们已经创建了一个 vagrant 文件,添加了连接 CoreOS 分布式的 URL,设置了共享文件夹的网络。和其他 Vagrant 的配置步骤相似,只是没有其他的 Chef/Puppet/Ansible。

CoreOS 已经预先安装好了 docker,所以不需要马上做一些配置和软件的安装。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107824p2.htm

第二步: 设置 Docker

Docker 已经安装了, 但是它需要一个“基础图像”来运行。我们所有的容器都将会在这个 OS 中运行。本质上, 是所有项目的 OS 虚拟机。
我们使用 Ubuntu:

> docker pull ubuntu

这下载了所有我们会用到的 ubuntu 基础图像(12.04, 12.10)。让我们来确认一下这个步骤创建了一个新的容器(说明如下):

> docker run -name=”test” -t -i ubuntu /bin/bash

下面我们要做的依次是:

  1. 让 Docker 创建开始并且运行一个新的容器(docker run)

  2. 命名新的容器为“test”(name=”test”).
    这让我们操作容器变得更简单,并且当我们列出容器时,我们就知道哪个是哪个了。

  3. 创建一个违终端,并让其保持打开(-t -i)

  4. 让 ubuntu 成为新容器的基础图像(ubuntu)

  5. 在新容器中运行 /bin/bash.

Docker 需要一个程序来运行一个容器. 更重要的。这包括两层意思: 容器不能脱离程序而运行,    并且当程序结束时容器也将结束. 我们以后将继续讨论这个问题.

你现在在 CoreOS 的一个 Ubuntu 容器中. 一个小型的 Ubuntu 虚拟机就可以用了。

第三步: 创建开发环境

现在我们可以离开 Docker 了. 我们要设置一个基础的 LAMP 堆栈, 这是很容易安装的. 根据你自己的需要调整这个堆栈也是很重要的.

我们将通过命令行来操作容器, 而不是通过 Docker 文件. 这是对 docker 如何工作的介绍.

初始设置

我们已经在 Ubuntu 容器中了。如果不是, 重新运行上面的命令来启动一个 Ubuntu 容器.

Ubuntu 是一个很小的容器. 其中有很多我们需要的东西都没有装. 基本操作如下:

  1. 增加 universe/multiverse 到 apt 源:
    > echo “$(cat /etc/apt/sources.list) universe multiverse” > /etc/apt/sources.list
    这是增加 ‘ universe multiverse’ 到 apt-get 的源列表. 正如之前所说, 这是一个准 Ubuntu 系统的安装,并且在默认时是不具备的.

  2. > apt-get update

  3. 安装 curl, wget, vim, build-essential, git:
    > apt-get install curl wget vim-tiny

我们基本上完成了环境的搭建. 首先, 将这些改变提交给新的 Docker 容器。这样我们就不用每次都这么做了(注: 这也是你使用 Dockerfiles 文件的原因.)

理由

1. 用 Vagrant 开发很酷 - 一个项目 / 组件一个 VB

2. 用 Vagrant 开发很垃圾 - 缓慢的 Chef/Puppet/Ansible,多个巨大的 VM,遍地重复的软件。

3. Docker 带来独立的仅有一个 VM 的 VM 盒子。

4. CoreOS 内整合了 docker, 产品发布时候会做得很完美。

5.  开发者开心!编码和发布太容易了。

像我,你可以(或不可以)喜欢用 Vagrant 发布。为一个项目存储使用多个 VM 是不可思议的:像 Ansibe 之类的工具意味着你的 VM 将总是反映产品的环境。

假如你是揽活的人或者有许多项目,然而,可能是你有几十个 Vagrant 盒子在你的 dev 文件夹,慢慢吸收上亿磁盘空间。这是 vagrant 垃圾的地方。。。提别是有多个小 SSD 的时候。

进入:Docker. 一个从一个机器上管理容器的开源的工具。为所有我们的来自一个 VM 的项目,我们将使用容器作为“迷你 vagrants”. 我假设你这里用的是 Mac- 我不了解 windows.

让我们投入 docker! 

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Docker 和一个正常的虚拟机有何区别? http://www.linuxidc.com/Linux/2013-12/93740.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

Docker 将改变所有事情 http://www.linuxidc.com/Linux/2013-12/93998.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

步骤一:设置 CoreOS

我们要使用 CoreOS 和 Vagrant 来安装 Docker,取代 Docker 推荐的 Ubuntu vagrant 文件安装。Screw 的建议。

为什么用 CoreOS?

CoreOS 是一个雄心勃勃的旨在简单、可伸缩服务部署的 linux 发行版。它是轻量级的,并且自带 Docker 的预安装。它的目的是让服务 Docker-based 应用变得容易。这就是为什么选择该 OS(系统)的原因 - 文件体积小、建议的安装方式都值得称赞!所以、我真的想去实测一下它。

Note:CoreOS 在 alpha 中已被创建。这意味着它在 SSH 回话中,可能发生随机重启的现象,但从长远的角度来看,希望是有帮助的。这个是需要注意下的。

安装

你从 CoreOS 的 Github 的仓库中进行安装,CoreOS 团队做了一个非常棒的工作。

你只需要按照下面的要求去做:

  1. 安装 1.3.1 版本以上的 Vagrant 和 4.0 版本以上的 VirtualBox。
    你可以通过 vagrant –version 命令检查你的 vagrant 版本,如果需要下载新的版本可以从 vagrant 的官网上去下载。

  2. 下载已经提供含有你开发使用根目录文件夹的 CoreOS vagrant 文件。在 Vagrant 中会安装 CoreOS。
    vagrant 的文件在这里。

  3. 添加端口转发到 Vagrant 的 web 服务器:
    命令是:config.vm.network :forwarded_port, guest: 80, host: 8080

  4. 需要注意的是默认情况下共享文件夹没有启用:
    可以通过下面的命令开启你 vagrant 文件的共享文件夹:
    config.vm.network “private_network”,
    ip: “10.1.2.3” *config.vm.synced_folder “.”, 
    “/home/core/share”, id: “core”,
    :nfs => true,
    :mount_options => [‘nolock,vers=3,udp’]*
    我们已经修改了 IP 地址,CoreOS 提供了专用网络:他们使用的 IP 地址是在公共地址的范围内(即别人公开的可访问的机器)。整个 10.X.X.X 的 IP 地址段都是私有的,这样的话可以避免冲突。

你可能已经清楚了安装步骤:我们已经创建了一个 vagrant 文件,添加了连接 CoreOS 分布式的 URL,设置了共享文件夹的网络。和其他 Vagrant 的配置步骤相似,只是没有其他的 Chef/Puppet/Ansible。

CoreOS 已经预先安装好了 docker,所以不需要马上做一些配置和软件的安装。

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107824p2.htm

提交容器

试想想 Docker 当做是 git.  我们已经对 Ubuntu 做了一些修改, 必须承认这减少了我们的工作量.

和 Git 一样, Docker 减少了每个容器的差别,而不是整个系统. 这意味着我们至于要保存我们安装的软件以及我们改变的文件. 多厉害!

  1. 退出 Ubuntu 容器:
    > ctrl-d
    这将使容器消失. 我们用 the/bin/bash 程序开始容器 (> docker run -name=”test” -t -i ubuntu /bin/bash), 并且当这个开始程序结束时这个容器也就消失了.

  2. 列出所有 Docker 容器:
    > docker ps -a
    - a 选项列出了所有的容器.docker ps 列出了运行的容器.

  3. 我们在列表中可以看见自己的容器:

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    4bf2ba69c69c        ubuntu:12.04        /bin/bash           5 seconds ago       Exit 0                                  test
  4. 提交改变给新的容器:
    > docker commit test custom/base
    我们已经使用 ID 而不是名字写了 docker commit 4bf2b custom/base 来只是我们改变的那个容器.

这创建了一个叫做 custom/base 的新容器,这个新容器保存了所有已经做过的修改. 和 Ubuntu 一样我们可以启动这个容器 docker run […] custom/base. 这就好了.

可以通过键入 docker images 查看可用的容器. 你会看见新的 Ubuntu 图像, 以及新的 custom/base 图像.

这是基础: 创建一个包含部分修改的新容器(用命令行也行, 但最好使用 Docker files 文件), 并且提交和运行.

建立协议栈

我们将安装一个基于我们创建的容器的 LAMP 协议栈. 这不是必须的,安装 Python, ruby, golang 可以由你自己来选择.

首先,用下列步骤来创建一个新的容器:

> docker run -name=”lamp” -t -i custom/base /bin/bash

这个 shell 已经装载了我们刚才修改的那个容器. 再为我们的基础协议栈安装 mysql、apache 和 PHP.

> apt-get install apache2 mysql-server php5 libapache2-mod-php5

厉害. 跳过这些服务的配置,因为其中有很简单的向导. 如果失败了就加入头 Linode Library.

软件安装和配置完成了, 将这些修改提交给新的容器. 按 ctrl- d 回到 CoreOS, 然后按照如下方法提交容器:

> docker commit lamp custom/lamp

运行协议栈并且转发端口

我们已经做到了可以开始使用 Docker 容器这一步. 不过有几个前提条件: 转发端口, 并且是数据库和网络服务可以自动运行.

幸运的, 端口可以通过命令行轻松设置(用 dockerfiles 文件设置更简单):

> docker run -t -i -p 80:80 -p 3306:3306 -v /home/core/vagrant/project:/var/www/project custom/lamp /bin/bash

接下来我们要做:

  1. 再次使用伪 shell 运行容器(-t -i)

  2. 将容器端口 80 和 3306 设置的和 CoreOS 相同的端口 (-p 80:80 -p 3306:3306)

  3. 从 CoreOS 安装一个卷到容器, 同时这个卷也被安装在 Vagrant 上. 这是装在我们机器上的开发文件(-v /from:/to)

现在, 我们可以通过 localhost:8080(由 Vagrant 转发的端口)在容器中运行的网络服务了. 整理一下环境,现在可以开始开发我们的应用了.

从这里开始

你应该熟悉 docker 的高级功能,如提交、运行、图像以及通过向导创建新的工作开发环境。

通过 docker 可以做很多事情. 以下一些你可以参考:

  • 使用 docker 的 supervisord – 需要一个在容器中运行的程序来保持它处于活动状态. Supervisord 是一个可以再前台运行的管理程序. 在 supervisord.conf 文件中设置你的服务并且通过 docker 启动 supervisord 来保持你的容器处于活动状态.

  • 通过 Docker 资料库分享图像

  • 在你的机构里面分享容器和图像. 保持你的开发环境健全, 使开发更简单.

  • docker的数据库管理 – 在 Docker 中数据存储 (storage in general, actually) 是较难管理的. 在 docker 中有一个相关的向导. 更多信息 here,here, and here.

  • 使用 dockerfiles文件 - 这将使你不必手动创建容器.

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计7075字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993113
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...