Cách sử dụng vagrant
TIL
487
Vagrant
15
Male avatar

manhdung viết ngày 22/07/2016

Flow

==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /home/manhdung/python
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

Ban đầu box chuẩn bị network: Nó luôn dùng hai adapter, adapter 1 để nat ra ngoài internet, adapter 2 để cho phép host và guest giao tiếp hai chiều với nhau

SSH

port 22/sshd của guest được port forward ra port 2222 trên host, port này chỉ listen trên loopback interface. Do đó ngoài truy cập box qua địa chỉ host only port 22 còn có thể truy cập qua 127.0.0.1:2222

Mặc định Vagrant sử dụng một user có tên là vagrant, user này có quyền root nhưng không cần passwd, lý do, xem trong file
/etc/sudoers.d/vagrant

vagrant ALL=(ALL) NOPASSWD:ALL

Login vào user này mặc định dùng ssh key based nhưng là insecure, lý do vagrant box được public hoàn toàn trên internet nên đã phơi bày cả public/private key pair này lên internet rồi.

Private key nằm trên host:
~/.vagrant.d/insecure_private_key

Public key nằm trong box - guest machine:
/home/vagrant/.ssh/authorized_keys
Vagrant sẽ kiểm tra có thể login được user vagrant này bằng insecure public/private key pair hay không. Quá trình này chính là: default: Warning: Remote connection disconnect. Retrying…

Cấu hình ssh này của vagrant nói chung rất ổn, cứ để măc định là được rồi.

Sau đó hostname của box sẽ được set theo Vagrantfile config.vm.hostname

Shared folder

Mặc định vagrant sẽ mount /vagrant trên guest với thư mục chứa Vagrantfile trên host. Có thể thay đổi cấu hình mặc định này

Provision

Là các thiết lập môi trường cơ bản như cài cài dịch vụ, cấu hình dịch vụ, mặc định chỉ chạy một lần, tất nhiên có thể ép nó chạy lại, nếu bạn có bổ sung mới. Có nhiều phương tiện để thực hiện provisioning như shell, ansible, thậm chí là docker...

Storage(Disk) và box

Có thể bạn để ý thấy chỉ có cấu hình memory, cpu cho guest mà không thấy có disk. Disk của box có định dạng vmdk của vmware, không phải vdi, native disk của virtualbox. Và khi phân phối các box, disk đã được include rồi, bên cạnh file vmdk đã cố định size, còn có thông tin trong box.ovf cho biết

<DiskSection>
    <Info>List of the virtual disks used in the package</Info>
    <Disk ovf:capacity="42949672960" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#streamOptimized" vbox:uuid="40857455-6616-490d-8b54-81f701ac4020"/>
  </DiskSection>

42949672960 tương đương 40G

Thông tin về các nội dung trong box bao gồm cả disk có thể tìm thấy:
~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20160602.0.0/virtualbox

box-disk1.vmdk  
box.ovf  
metadata.json  
Vagrantfile

cho thấy box này được sử dụng với provider là virtualbox.

Khi run box, xem trong box thì storage chiếm đến 40G nhưng đó là con số ảo, con số tối đa mà storage box có thể chiếm đến, được định nghĩa sẵn trong package box của vagrant. Cần có giới hạn này để guest box không ngốn sạch storage của host.

Khi tìm thông tin về running box trong ~/VirtualBox VMs/ sẽ thấy box-disk1.vmdk có lớn hơn trong ~/.vagrant.d chừng 423M nhưng lại ít hơn con số 40G rất nhiều, chừng 2G, đó là con số thực tế đang dùng. Virtualbox cấp phát storage theo kiểu dùng đến đâu cấp đến đó để guest sử dụng hiệu quả storage từ host đem lại.

manhdung 20-07-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

manhdung

44 bài viết.
239 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
67 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 2 năm trước
67 11
Male avatar
45 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết hơn 1 năm trước
45 4
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
Bài viết liên quan
Male avatar
0 0
Tình cờ buổi sáng bạn tới công ty, đang trong tâm trạng hí hửng để code tiếp chức năng hôm trước code dang dở, đang hí hửng gọi thằng em dậy “vagr...
skul169 viết hơn 1 năm trước
0 0
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
239 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!