摘要:启动虚拟机,命令关闭虚拟机,查看运行状态。此外如果修改了,也是执行该命令重新创建容器。该命令会同时会在前台启动容器并打印容器内的控制台日志,方便查看是否启动成功。安装通过部署也是十分简单,不用纠结版本和依赖及配置的问题。
虚拟化、容器化是这几年来十分流行的一个理念,它使用“隔离”的手段,将不同服务的依赖、配置等隔离开来,
大大降低了管理成本及维护负担。
vagrant是一款抽象层次更高的虚拟环境配置工具,基于virtualbox或者docker。
通过配置文件定义虚拟环境的各项参数,之后vagrant就能自动帮你搞定这些繁琐事情。
接下来是不是该折腾下vagrant如何模拟集群、搞devops了?
No、No,我使用这把牛刀的最初目的是为了杀鸡,把它当一个方便的、自动化的linux虚拟机使用,哈哈。
在平时的学习和折腾中,比如说看到了一个新鲜的东西,想搭建一个看看,把玩把玩。
这个时候,如果在自己的主系统中捣鼓各种不熟悉的应用和服务,
一来如果出问题可能会把系统搞炸,二来系统本身的复杂环境也会影响到服务和应用的搭建。
而且,把服务安装在自己的系统里,和把服务安装到远程主机上去,无论是ssh上去还是最终体验自己的成果,
那感觉是完全不一样的。所以,我需要:
一个完全隔离的沙盒环境,并且是一个完整的linux系统,就像一台远程的主机那样。
对一个买不起阿里云的码农来说,该虚拟环境能够给人一种是远程主机的错觉。
一个选择是virtualbox,但是初始的配置和安装很麻烦。并且要用virutlabox的命令行工具,有些麻烦。
所以,用vagrant解决这个问题。
虽然debian的源里有vagrant,但是还是建议去官方网站下载安装最新版,老版本的vagrant有一些bug,在之前使用的时候就碰到过。使用命令:
sudo apt-get install virtualbox wget https://releases.hashicorp.com/vagrant/2.1.4/vagrant_2.1.4_x86_64.deb sudo dpkg -i vagrant_2.1.4_x86_64.deb
由于vagrant是virtualbox的前端,因此如果没有安装virtualbox的话,得先安装virtualbox。
安装一台虚拟机执行命令:
mkdir ~/myproject && cd ~/myproject vagrant init debian/contrib-jessie64 vagrant up # 下载box镜像并且安装
vagrant init命令会在本地目录中创建vagrantFile。打开这个文件,可以看到:
Vagrant.configure("2") do |config| config.vm.box = "debian/contrib-jessie64" end
config.vm.box为debian/contrib-jessie64,这项配置指定该虚拟机使用什么镜像初始化。
vagrant为我们预制了大量的丰富镜像,成为box。比如说,上面的debian/contrib-jessie64,那么在vagrant初始化的时候就会下载对应的镜像然后安装虚拟机。
更多box可以在这里找到:https://app.vagrantup.com/box...
好,当vagrant up执行成功时,虚拟机环境也就创建好了。
假如这个时候,打开virtualbox,你会发现实际上vagrant创建了一个virtualbox的虚拟机。
Vagrantfile中配置了虚拟机的各项基本参数。
网络配置首先是虚拟机网络,和virtualbox一样,它有三种类型的网络:
NAT映射。
host-only。
桥接。
vagrant默认为在NAT映射,虚拟机是在一个私有网络内部,并且通过NAT方式访问外网。
这种方式主机是看不到虚拟机的,因此,需要配置端口映射:
config.vm.network "forwarded_port", guest: 80, host: 8080
这样,虚拟机的80端口就被映射为主机的8080端口。
第二种方式,私有网络,配置如下:
config.vm.network "private_network", ip: "192.168.50.4"
虚拟机和主机在同一个私有网络内,主机和虚拟机能够互相访问。
但是,这个私有网络是被虚拟出来的,根本不连接外网,所以虚拟机无法访问外网。
当然,从网络的角度来看,主机也在这个私有网络里,而且主机能够连接外网。
理论上可以通过配置将主机作为跳板(将私有网络网卡和真实网卡桥接),让这个私有网络内的虚拟机也能访问网络。
第三钟方式,桥接网络:
config.vm.network "public_network" # DHCP获取ip config.vm.network "public_network", ip: "192.168.0.17" # 静态ip config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)" # 指定桥接网卡
桥接网络即将虚拟机置入和主机同一网络内。假如主机通过无线网卡连接了自己的wifi,那么虚拟机就像一台真实机器一样也连接到了这台wifi,有该wifi网络的ip地址。
可以按照自己的需要选择。比如我,想催眠自己把这台虚拟机想象成远程的服务器,就使用第三种方式,然后给个主机名,通过主机名访问里面的服务。
共享文件夹默认vagrant已经将存放vagrantfile文件的目录映射到虚拟机的/vagrant下。
当然,也可以自己配置添加更多的目录:
config.vm.synced_folder "src/", "/srv/website"主机名
config.vm.hostname = "myserver"
主机名不仅用于网络,当有多台虚拟机时,也用来标记区分不同的虚拟机。
内存和CPu默认是512M,如下配置修改:
config.vm.provider "virtualbox" do |v| v.memory = 1024 v.cpus = 2 endvagrant使用
好了,当配置完Vagrantfile文件后,使用vagrant reload命令重新使之生效。
vagrant up启动虚拟机,vagrant halt命令关闭虚拟机,vagrant status查看运行状态。vagrant destory删除虚拟机。
最重要的是,vagrant sshssh到虚拟机上去。
好了,现在我假象的远程服务器已经搭建安装完毕了。
接下来,开始在服务器上安装些有趣的服务了。
先是安装docker:
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce
Docker Compose是docker的一个辅助工具,可以将一组docker的配置、启动参数等写入到配置文件里去,然后通过docker compose管理。
安装docker-compose,这个工具是python编写的,因此pip安装它:
pip install docker-composedocker安装nginx
由于使用的是docker-compose,安装nginx十分方便,全部配置文件化。
首先在本地新建一个目录,所有与nginx有关的配置文件都放在这里:
mkdir nginx cd nginx
然后,编辑docker-compose.yml文件:
# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab: version: "2" services: nginx: image: nginx:stable-alpine network_mode: host volumes: - ./conf:/etc/nginx - ./html:/var/www/html - ./log:/var/log/nginx ports: - "80:80" environment: - NGINX_HOST=your.domain - NGINX_PORT=80
其中,nginx:stable-alpine为选择的docker镜像,在第一次启动时,会自动下载镜像并创建docker容器。
在这里,docker镜像不存储任何的状态信息,镜像内的服务所有会读写的文件目录,都映射到了主机的文件系统来。
之后,执行docker-compose up来初始化容器。此外:
如果修改了docker-compose.yml,也是执行该命令重新创建容器。
该命令会同时会在前台启动容器并打印容器内的控制台日志,方便查看是否启动成功。
切记容器内部不存放状态,所有的文件系统读写都要映射出来,以防丢失。
之后,还需要配置nginx的配置文件,从docker-compose.yml可以看到,
配置文件放在了./conf中。我是直接从原生安装的nginx的配置文件中直接拷贝过来的一份。
当一切都配置好后,使用docker-compose start启动服务。之后,使用docker ps就能够看到运行中的服务了。使用docker-compose stop停止服务。
可以看到,使用docker将nginx容器化后,不仅运行实例和整个系统隔离,
而且,nginx的相关的所有配置可以全部存放在一个局部目录内。甚至还可以直接提交到git上去。
在另外一台机器,无论环境如何,只要安装了docker和docker-compose,就能从这些配置文件中docker-compose up一下,快速创建并部署nginx服务。
通过docker部署redis也是十分简单,不用纠结版本和依赖及配置的问题。
首先是dokcer-compose.yml文件:
# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab: version: "2" services: redis: image: redis:4.0.5-alpine network_mode: host volumes: - ./data:/data ports: - "6379:6379" command: [redis-server, "--appendonly", "yes"]
好了,之后docer-compose up初始化,docker-compose start即可启动。
最后有了vagrant,我就在本地拥有了一个完全的、方便的linux沙盒环境,可以用来尝试各种新玩意,试验自己的新想法。
有了docker,我可以先将需要的服务在本地配置、调试好。由于docker的隔离性,所以只要本地的docker配置和服务配置无误,那么就能够用这些配置直接快速的在远程服务器上部署。
之后有时间,我准备将我在一台国外vps的小水管上的服务,将其配置抽取为一组配置文件,之后使用这组配置文件,以后无论在那台vps上都能快速部署。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27434.html
摘要:代码目录使用数据卷从容器内映射到宿主机,配置文件等也是通过数据卷映射到容器内。比如中这里与的连接方式这是镜像构建,这里改了服务器,并安装了若干扩展。使用启动启动所有服务命令行总结具体可访问 前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下。 ...
摘要:代码目录使用数据卷从容器内映射到宿主机,配置文件等也是通过数据卷映射到容器内。比如中这里与的连接方式这是镜像构建,这里改了服务器,并安装了若干扩展。使用启动启动所有服务命令行总结具体可访问 前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下。 ...
摘要:基于近期学习的内容,整理与网络相关的知识。针对这一问题,采用网络来解决。但这篇博客的重点不在,我们可以在启动时,为其指定一个分布式存储,从而使得我们能够实验网络。 基于近期学习的 Docker 内容,整理与 Docker 网络相关的知识。实验环境:Centos 7.4 Docker 版本如下: Client: Version: 18.03.1-ce API versio...
摘要:快速开始跨主机网络方案原生第三方方案之前介绍了搭建集群,所以在此直接选用自带的方案来做,和完美结合。直接检查网络列表发现已经在其中。 Docker overlay 网络搭建 Overlay网络是指通过在现有网络上叠加一个软件定义的逻辑网络,最大程度的保留原有网络,通过定义其上的逻辑网络,实现业务逻辑,解决原有数据中心的网络问题。 快速开始 Docker跨主机网络方案 docker ...
阅读 2562·2023-04-25 15:07
阅读 694·2021-11-24 10:21
阅读 2241·2021-09-22 10:02
阅读 3505·2019-08-30 15:43
阅读 3192·2019-08-30 13:03
阅读 2268·2019-08-29 17:18
阅读 3567·2019-08-29 17:07
阅读 1854·2019-08-29 12:27