摘要:啟動虛擬機,命令關閉虛擬機,查看運行狀態。此外如果修改了,也是執行該命令重新創建容器。該命令會同時會在前臺啟動容器并打印容器內的控制臺日志,方便查看是否啟動成功。安裝通過部署也是十分簡單,不用糾結版本和依賴及配置的問題。
虛擬化、容器化是這幾年來十分流行的一個理念,它使用“隔離”的手段,將不同服務的依賴、配置等隔離開來,
大大降低了管理成本及維護負擔。
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上都能快速部署。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 ...
閱讀 2596·2023-04-25 15:07
閱讀 705·2021-11-24 10:21
閱讀 2298·2021-09-22 10:02
閱讀 3517·2019-08-30 15:43
閱讀 3222·2019-08-30 13:03
閱讀 2287·2019-08-29 17:18
閱讀 3586·2019-08-29 17:07
閱讀 1873·2019-08-29 12:27