Slide 1

Slide 1 text

⽤用 Vagrant 與 Docker 拯救世界 Gea-Suan Lin KKBOX Technologies

Slide 2

Slide 2 text

Vagrant

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

VAGRANTFILE_API_VERSION = "2" ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "hashicorp/precise64" ! config.vm.define "db1" do |db| db.vm.hostname = "db1" db.vm.provision "shell", path: "db1.sh" db.vm.network "private_network", ip: "192.168.50.101" end ! config.vm.define "db2" do |db| db.vm.hostname = "db2" db.vm.provision "shell", path: "db2.sh" db.vm.network "private_network", ip: "192.168.50.102" end end

Slide 5

Slide 5 text

⽤用 Ruby 寫的

Slide 6

Slide 6 text

虛擬化管理⼯工具

Slide 7

Slide 7 text

包括了...

Slide 8

Slide 8 text

Image

Slide 9

Slide 9 text

Network

Slide 10

Slide 10 text

Environment

Slide 11

Slide 11 text

Script

Slide 12

Slide 12 text

Slide 13

Slide 13 text

早期只⽀支援 VirtualBox

Slide 14

Slide 14 text

後來⽀支援 KVM、 VMware 等等⽅方案

Slide 15

Slide 15 text

包括了今天要提到的 Docker

Slide 16

Slide 16 text

好處

Slide 17

Slide 17 text

可重複測試

Slide 18

Slide 18 text

每次環境相同

Slide 19

Slide 19 text

設定簡單

Slide 20

Slide 20 text

Docker

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Linux 上輕量級的 容器管理⼯工具

Slide 23

Slide 23 text

(微軟也打算要在 Windows 上實作) http://www.zdnet.com/article/docker-container-support- coming-to-microsofts-next-windows-server-release/

Slide 24

Slide 24 text

Microservices

Slide 25

Slide 25 text

優點

Slide 26

Slide 26 text

啟動速度快

Slide 27

Slide 27 text

節省資源

Slide 28

Slide 28 text

缺點

Slide 29

Slide 29 text

⺫⽬目前只有 Linux 平台

Slide 30

Slide 30 text

無法指定容器的 IP 位置 https://github.com/docker/docker/issues/6743

Slide 31

Slide 31 text

Vagrant + Docker

Slide 32

Slide 32 text

⽤用途

Slide 33

Slide 33 text

開發測試環境

Slide 34

Slide 34 text

Continuous Integration

Slide 35

Slide 35 text

設定範例

Slide 36

Slide 36 text

ENV["VAGRANT_DEFAULT_PROVIDER"] = "docker" VAGRANTFILE_API_VERSION = "2" ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "db1" do |db| db.vm.provision "shell", path: "db1.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker, override| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end ! config.vm.define "db2" do |db| db.vm.provision "shell", path: "db2.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end end

Slide 37

Slide 37 text

ENV["VAGRANT_DEFAULT_PROVIDER"] = "docker" VAGRANTFILE_API_VERSION = "2" ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "db1" do |db| db.vm.provision "shell", path: "db1.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker, override| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end ! config.vm.define "db2" do |db| db.vm.provision "shell", path: "db2.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end end

Slide 38

Slide 38 text

ENV["VAGRANT_DEFAULT_PROVIDER"] = "docker" VAGRANTFILE_API_VERSION = "2" ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "db1" do |db| db.vm.provision "shell", path: "db1.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker, override| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end ! config.vm.define "db2" do |db| db.vm.provision "shell", path: "db2.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end end

Slide 39

Slide 39 text

ENV["VAGRANT_DEFAULT_PROVIDER"] = "docker" VAGRANTFILE_API_VERSION = "2" ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "db1" do |db| db.vm.provision "shell", path: "db1.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker, override| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end ! config.vm.define "db2" do |db| db.vm.provision "shell", path: "db2.sh" db.vm.synced_folder "shared/", "/srv/shared" db.vm.provider "docker" do |docker| docker.image = "npoggi/vagrant-docker" docker.has_ssh = true end end end

Slide 40

Slide 40 text

Summary

Slide 41

Slide 41 text

We’re hiring [email protected]