摘要:?jiǎn)?dòng)虛擬機(jī),命令關(guān)閉虛擬機(jī),查看運(yùn)行狀態(tài)。此外如果修改了,也是執(zhí)行該命令重新創(chuàng)建容器。該命令會(huì)同時(shí)會(huì)在前臺(tái)啟動(dòng)容器并打印容器內(nèi)的控制臺(tái)日志,方便查看是否啟動(dòng)成功。安裝通過(guò)部署也是十分簡(jiǎn)單,不用糾結(jié)版本和依賴及配置的問(wèn)題。
虛擬化、容器化是這幾年來(lái)十分流行的一個(gè)理念,它使用“隔離”的手段,將不同服務(wù)的依賴、配置等隔離開(kāi)來(lái),
大大降低了管理成本及維護(hù)負(fù)擔(dān)。
vagrant是一款抽象層次更高的虛擬環(huán)境配置工具,基于virtualbox或者docker。
通過(guò)配置文件定義虛擬環(huán)境的各項(xiàng)參數(shù),之后vagrant就能自動(dòng)幫你搞定這些繁瑣事情。
接下來(lái)是不是該折騰下vagrant如何模擬集群、搞devops了?
No、No,我使用這把牛刀的最初目的是為了殺雞,把它當(dāng)一個(gè)方便的、自動(dòng)化的linux虛擬機(jī)使用,哈哈。
在平時(shí)的學(xué)習(xí)和折騰中,比如說(shuō)看到了一個(gè)新鮮的東西,想搭建一個(gè)看看,把玩把玩。
這個(gè)時(shí)候,如果在自己的主系統(tǒng)中搗鼓各種不熟悉的應(yīng)用和服務(wù),
一來(lái)如果出問(wèn)題可能會(huì)把系統(tǒng)搞炸,二來(lái)系統(tǒng)本身的復(fù)雜環(huán)境也會(huì)影響到服務(wù)和應(yīng)用的搭建。
而且,把服務(wù)安裝在自己的系統(tǒng)里,和把服務(wù)安裝到遠(yuǎn)程主機(jī)上去,無(wú)論是ssh上去還是最終體驗(yàn)自己的成果,
那感覺(jué)是完全不一樣的。所以,我需要:
一個(gè)完全隔離的沙盒環(huán)境,并且是一個(gè)完整的linux系統(tǒng),就像一臺(tái)遠(yuǎn)程的主機(jī)那樣。
對(duì)一個(gè)買不起阿里云的碼農(nóng)來(lái)說(shuō),該虛擬環(huán)境能夠給人一種是遠(yuǎn)程主機(jī)的錯(cuò)覺(jué)。
一個(gè)選擇是virtualbox,但是初始的配置和安裝很麻煩。并且要用virutlabox的命令行工具,有些麻煩。
所以,用vagrant解決這個(gè)問(wèn)題。
雖然debian的源里有vagrant,但是還是建議去官方網(wǎng)站下載安裝最新版,老版本的vagrant有一些bug,在之前使用的時(shí)候就碰到過(guò)。使用命令:
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的前端,因此如果沒(méi)有安裝virtualbox的話,得先安裝virtualbox。
安裝一臺(tái)虛擬機(jī)執(zhí)行命令:
mkdir ~/myproject && cd ~/myproject vagrant init debian/contrib-jessie64 vagrant up # 下載box鏡像并且安裝
vagrant init命令會(huì)在本地目錄中創(chuàng)建vagrantFile。打開(kāi)這個(gè)文件,可以看到:
Vagrant.configure("2") do |config| config.vm.box = "debian/contrib-jessie64" end
config.vm.box為debian/contrib-jessie64,這項(xiàng)配置指定該虛擬機(jī)使用什么鏡像初始化。
vagrant為我們預(yù)制了大量的豐富鏡像,成為box。比如說(shuō),上面的debian/contrib-jessie64,那么在vagrant初始化的時(shí)候就會(huì)下載對(duì)應(yīng)的鏡像然后安裝虛擬機(jī)。
更多box可以在這里找到:https://app.vagrantup.com/box...
好,當(dāng)vagrant up執(zhí)行成功時(shí),虛擬機(jī)環(huán)境也就創(chuàng)建好了。
假如這個(gè)時(shí)候,打開(kāi)virtualbox,你會(huì)發(fā)現(xiàn)實(shí)際上vagrant創(chuàng)建了一個(gè)virtualbox的虛擬機(jī)。
Vagrantfile中配置了虛擬機(jī)的各項(xiàng)基本參數(shù)。
網(wǎng)絡(luò)配置首先是虛擬機(jī)網(wǎng)絡(luò),和virtualbox一樣,它有三種類型的網(wǎng)絡(luò):
NAT映射。
host-only。
橋接。
vagrant默認(rèn)為在NAT映射,虛擬機(jī)是在一個(gè)私有網(wǎng)絡(luò)內(nèi)部,并且通過(guò)NAT方式訪問(wèn)外網(wǎng)。
這種方式主機(jī)是看不到虛擬機(jī)的,因此,需要配置端口映射:
config.vm.network "forwarded_port", guest: 80, host: 8080
這樣,虛擬機(jī)的80端口就被映射為主機(jī)的8080端口。
第二種方式,私有網(wǎng)絡(luò),配置如下:
config.vm.network "private_network", ip: "192.168.50.4"
虛擬機(jī)和主機(jī)在同一個(gè)私有網(wǎng)絡(luò)內(nèi),主機(jī)和虛擬機(jī)能夠互相訪問(wèn)。
但是,這個(gè)私有網(wǎng)絡(luò)是被虛擬出來(lái)的,根本不連接外網(wǎng),所以虛擬機(jī)無(wú)法訪問(wèn)外網(wǎng)。
當(dāng)然,從網(wǎng)絡(luò)的角度來(lái)看,主機(jī)也在這個(gè)私有網(wǎng)絡(luò)里,而且主機(jī)能夠連接外網(wǎng)。
理論上可以通過(guò)配置將主機(jī)作為跳板(將私有網(wǎng)絡(luò)網(wǎng)卡和真實(shí)網(wǎng)卡橋接),讓這個(gè)私有網(wǎng)絡(luò)內(nèi)的虛擬機(jī)也能訪問(wèn)網(wǎng)絡(luò)。
第三鐘方式,橋接網(wǎng)絡(luò):
config.vm.network "public_network" # DHCP獲取ip config.vm.network "public_network", ip: "192.168.0.17" # 靜態(tài)ip config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)" # 指定橋接網(wǎng)卡
橋接網(wǎng)絡(luò)即將虛擬機(jī)置入和主機(jī)同一網(wǎng)絡(luò)內(nèi)。假如主機(jī)通過(guò)無(wú)線網(wǎng)卡連接了自己的wifi,那么虛擬機(jī)就像一臺(tái)真實(shí)機(jī)器一樣也連接到了這臺(tái)wifi,有該wifi網(wǎng)絡(luò)的ip地址。
可以按照自己的需要選擇。比如我,想催眠自己把這臺(tái)虛擬機(jī)想象成遠(yuǎn)程的服務(wù)器,就使用第三種方式,然后給個(gè)主機(jī)名,通過(guò)主機(jī)名訪問(wèn)里面的服務(wù)。
共享文件夾默認(rèn)vagrant已經(jīng)將存放vagrantfile文件的目錄映射到虛擬機(jī)的/vagrant下。
當(dāng)然,也可以自己配置添加更多的目錄:
config.vm.synced_folder "src/", "/srv/website"主機(jī)名
config.vm.hostname = "myserver"
主機(jī)名不僅用于網(wǎng)絡(luò),當(dāng)有多臺(tái)虛擬機(jī)時(shí),也用來(lái)標(biāo)記區(qū)分不同的虛擬機(jī)。
內(nèi)存和CPu默認(rèn)是512M,如下配置修改:
config.vm.provider "virtualbox" do |v| v.memory = 1024 v.cpus = 2 endvagrant使用
好了,當(dāng)配置完Vagrantfile文件后,使用vagrant reload命令重新使之生效。
vagrant up啟動(dòng)虛擬機(jī),vagrant halt命令關(guān)閉虛擬機(jī),vagrant status查看運(yùn)行狀態(tài)。vagrant destory刪除虛擬機(jī)。
最重要的是,vagrant sshssh到虛擬機(jī)上去。
好了,現(xiàn)在我假象的遠(yuǎn)程服務(wù)器已經(jīng)搭建安裝完畢了。
接下來(lái),開(kāi)始在服務(wù)器上安裝些有趣的服務(wù)了。
先是安裝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的一個(gè)輔助工具,可以將一組docker的配置、啟動(dòng)參數(shù)等寫入到配置文件里去,然后通過(guò)docker compose管理。
安裝docker-compose,這個(gè)工具是python編寫的,因此pip安裝它:
pip install docker-composedocker安裝nginx
由于使用的是docker-compose,安裝nginx十分方便,全部配置文件化。
首先在本地新建一個(gè)目錄,所有與nginx有關(guān)的配置文件都放在這里:
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鏡像,在第一次啟動(dòng)時(shí),會(huì)自動(dòng)下載鏡像并創(chuàng)建docker容器。
在這里,docker鏡像不存儲(chǔ)任何的狀態(tài)信息,鏡像內(nèi)的服務(wù)所有會(huì)讀寫的文件目錄,都映射到了主機(jī)的文件系統(tǒng)來(lái)。
之后,執(zhí)行docker-compose up來(lái)初始化容器。此外:
如果修改了docker-compose.yml,也是執(zhí)行該命令重新創(chuàng)建容器。
該命令會(huì)同時(shí)會(huì)在前臺(tái)啟動(dòng)容器并打印容器內(nèi)的控制臺(tái)日志,方便查看是否啟動(dòng)成功。
切記容器內(nèi)部不存放狀態(tài),所有的文件系統(tǒng)讀寫都要映射出來(lái),以防丟失。
之后,還需要配置nginx的配置文件,從docker-compose.yml可以看到,
配置文件放在了./conf中。我是直接從原生安裝的nginx的配置文件中直接拷貝過(guò)來(lái)的一份。
當(dāng)一切都配置好后,使用docker-compose start啟動(dòng)服務(wù)。之后,使用docker ps就能夠看到運(yùn)行中的服務(wù)了。使用docker-compose stop停止服務(wù)。
可以看到,使用docker將nginx容器化后,不僅運(yùn)行實(shí)例和整個(gè)系統(tǒng)隔離,
而且,nginx的相關(guān)的所有配置可以全部存放在一個(gè)局部目錄內(nèi)。甚至還可以直接提交到git上去。
在另外一臺(tái)機(jī)器,無(wú)論環(huán)境如何,只要安裝了docker和docker-compose,就能從這些配置文件中docker-compose up一下,快速創(chuàng)建并部署nginx服務(wù)。
通過(guò)docker部署redis也是十分簡(jiǎn)單,不用糾結(jié)版本和依賴及配置的問(wèn)題。
首先是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即可啟動(dòng)。
最后有了vagrant,我就在本地?fù)碛辛艘粋€(gè)完全的、方便的linux沙盒環(huán)境,可以用來(lái)嘗試各種新玩意,試驗(yàn)自己的新想法。
有了docker,我可以先將需要的服務(wù)在本地配置、調(diào)試好。由于docker的隔離性,所以只要本地的docker配置和服務(wù)配置無(wú)誤,那么就能夠用這些配置直接快速的在遠(yuǎn)程服務(wù)器上部署。
之后有時(shí)間,我準(zhǔn)備將我在一臺(tái)國(guó)外vps的小水管上的服務(wù),將其配置抽取為一組配置文件,之后使用這組配置文件,以后無(wú)論在那臺(tái)vps上都能快速部署。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27434.html
摘要:代碼目錄使用數(shù)據(jù)卷從容器內(nèi)映射到宿主機(jī),配置文件等也是通過(guò)數(shù)據(jù)卷映射到容器內(nèi)。比如中這里與的連接方式這是鏡像構(gòu)建,這里改了服務(wù)器,并安裝了若干擴(kuò)展。使用啟動(dòng)啟動(dòng)所有服務(wù)命令行總結(jié)具體可訪問(wèn) 前言 Laravel官方開(kāi)發(fā)環(huán)境推薦的是Homestead(其實(shí)就是一個(gè)封裝好的Vagrant box),我感覺(jué)這個(gè)比較重,于是自己用Docker compose編排了一套開(kāi)發(fā)環(huán)境,在這里分享下。 ...
摘要:代碼目錄使用數(shù)據(jù)卷從容器內(nèi)映射到宿主機(jī),配置文件等也是通過(guò)數(shù)據(jù)卷映射到容器內(nèi)。比如中這里與的連接方式這是鏡像構(gòu)建,這里改了服務(wù)器,并安裝了若干擴(kuò)展。使用啟動(dòng)啟動(dòng)所有服務(wù)命令行總結(jié)具體可訪問(wèn) 前言 Laravel官方開(kāi)發(fā)環(huán)境推薦的是Homestead(其實(shí)就是一個(gè)封裝好的Vagrant box),我感覺(jué)這個(gè)比較重,于是自己用Docker compose編排了一套開(kāi)發(fā)環(huán)境,在這里分享下。 ...
摘要:基于近期學(xué)習(xí)的內(nèi)容,整理與網(wǎng)絡(luò)相關(guān)的知識(shí)。針對(duì)這一問(wèn)題,采用網(wǎng)絡(luò)來(lái)解決。但這篇博客的重點(diǎn)不在,我們可以在啟動(dòng)時(shí),為其指定一個(gè)分布式存儲(chǔ),從而使得我們能夠?qū)嶒?yàn)網(wǎng)絡(luò)。 基于近期學(xué)習(xí)的 Docker 內(nèi)容,整理與 Docker 網(wǎng)絡(luò)相關(guān)的知識(shí)。實(shí)驗(yàn)環(huán)境:Centos 7.4 Docker 版本如下: Client: Version: 18.03.1-ce API versio...
摘要:快速開(kāi)始跨主機(jī)網(wǎng)絡(luò)方案原生第三方方案之前介紹了搭建集群,所以在此直接選用自帶的方案來(lái)做,和完美結(jié)合。直接檢查網(wǎng)絡(luò)列表發(fā)現(xiàn)已經(jīng)在其中。 Docker overlay 網(wǎng)絡(luò)搭建 Overlay網(wǎng)絡(luò)是指通過(guò)在現(xiàn)有網(wǎng)絡(luò)上疊加一個(gè)軟件定義的邏輯網(wǎng)絡(luò),最大程度的保留原有網(wǎng)絡(luò),通過(guò)定義其上的邏輯網(wǎng)絡(luò),實(shí)現(xiàn)業(yè)務(wù)邏輯,解決原有數(shù)據(jù)中心的網(wǎng)絡(luò)問(wèn)題。 快速開(kāi)始 Docker跨主機(jī)網(wǎng)絡(luò)方案 docker ...
閱讀 2615·2023-04-25 15:07
閱讀 719·2021-11-24 10:21
閱讀 2323·2021-09-22 10:02
閱讀 3530·2019-08-30 15:43
閱讀 3243·2019-08-30 13:03
閱讀 2302·2019-08-29 17:18
閱讀 3599·2019-08-29 17:07
閱讀 1889·2019-08-29 12:27