Hướng Dẫn Triển Khai và Quản Lý Docker Hosts Từ Xa với Docker Machine trên Ubuntu 16.04

Quản Lý Docker Hosts Từ Xa với Docker Machine

Docker Machine là công cụ mạnh mẽ giúp bạn dễ dàng triển khai và quản lý nhiều Docker hosts từ xa, ngay trên máy tính cá nhân của mình. Những máy chủ này, hay còn gọi là Dockerized hosts, cho phép bạn chạy các Docker containers một cách hiệu quả.

Mặc dù Docker Machine có thể được cài đặt cả trên hệ thống cục bộ hoặc từ xa, nhưng phương pháp phổ biến nhất là cài đặt nó trên máy tính cá nhân (có thể là cài đặt trực tiếp hoặc trên máy ảo) và sử dụng nó để triển khai các máy chủ Dockerized từ xa.

Nếu bạn muốn triển khai Docker Machine hiệu quả, việc thuê VPS chất lượng cao là lựa chọn tối ưu. VPS giúp đảm bảo tài nguyên ổn định, hỗ trợ quản lý Docker Hosts từ xa mượt mà. Khám phá các gói thuê VPS phù hợp để nâng cao hiệu suất dự án của bạn ngay hôm nay!

Docker Machine hỗ trợ cài đặt trên nhiều hệ điều hành, bao gồm các bản phân phối Linux, Mac OS X và Windows. Trong hướng dẫn này, chúng ta sẽ cùng nhau cài đặt Docker Machine trên một máy cục bộ chạy Ubuntu 16.04 và sử dụng nó để triển khai các Droplets từ DataOnline.

Yêu cầu

Để theo dõi bài hướng dẫn này, bạn sẽ cần:

  • Một máy cục bộ chạy Ubuntu 16.04 với Docker được cài đặt (xem hướng dẫn Cách Cài Đặt và Sử Dụng Docker trên Ubuntu 16.04 để biết thêm chi tiết).

  • Khi tạo token, hãy đảm bảo nó có phạm vi read-write. Đây là mặc định, nên nếu bạn không thay đổi gì khi tạo, token sẽ có khả năng đọc-ghi. Để tiện sử dụng trên dòng lệnh, hãy gán token cho một biến như được hướng dẫn trong bài viết.

Bước 1 – Cài đặt Docker Machine trên máy tính cục bộ

Trong bước này, chúng ta sẽ tiến hành cài đặt Docker Machine trên máy cục bộ chạy Ubuntu 16.04.

Để tải và cài đặt binary của Docker Machine, gõ lệnh sau:

wget https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-$(uname -s)-$(uname -m)

Tên file tải về sẽ là docker-machine-Linux-x86_64. Hãy đổi tên file đó thành docker-machine để dễ sử dụng hơn:

mv docker-machine-Linux-x86_64 docker-machine

Làm cho file có quyền thực thi:

chmod +x docker-machine

Di chuyển hoặc sao chép file vào thư mục /usr/local/bin để có thể sử dụng như một lệnh hệ thống:

sudo mv docker-machine /usr/local/bin

Kiểm tra phiên bản để xác nhận đã cài đặt đúng:

docker-machine version

Kết quả xuất ra sẽ tương tự:

Output
docker-machine version 0.14.0, build 89b8332

Bước 2 – Cài đặt các Script bổ sung cho Docker Machine

Có ba script bash trong kho lưu trữ GitHub của Docker Machine, được thiết kế để tạo điều kiện thuận lợi cho việc sử dụng các lệnh dockerdocker-machine. Chúng cung cấp tính năng hoàn thành lệnh (command completion) và tùy biến prompt cho bash.

Trong bước này, chúng ta sẽ cài đặt ba script này trên máy cục bộ. Chúng sẽ được tải về và cài đặt vào thư mục /etc/bash_completion.d.

Script đầu tiên cho phép bạn thấy máy đang hoạt động từ prompt bash. Điều này hữu ích khi bạn làm việc với và chuyển đổi giữa nhiều máy chủ Dockerized. Script này có tên là docker-machine-prompt.bash. Để tải về, gõ lệnh:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash

Để hoàn tất cài đặt file trên, bạn sẽ cần thiết lập một giá trị tùy chỉnh cho biến PS1 trong file .bashrc của bạn. Mở file đó bằng nano (PS1 là biến đặc biệt dùng để tùy chỉnh prompt của bash):

nano ~/.bashrc

Trong file đó, có ba dòng bắt đầu bằng PS1. Chúng nên giống như sau:

~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

Với mỗi dòng, chèn $(__docker_machine_ps1 " [%s]") vào cuối để chúng trở thành:

~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1

Lưu và đóng file.

Script thứ hai có tên là docker-machine-wrapper.bash. Nó thêm một subcommand use cho lệnh docker-machine, giúp dễ dàng chuyển đổi giữa các Docker Machines. Để tải về, gõ:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash

Script thứ ba có tên là docker-machine.bash. Nó thêm tính năng hoàn thành lệnh cho các lệnh của docker-machine. Tải về bằng lệnh:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash

Để áp dụng các thay đổi vừa thực hiện, hãy đóng rồi mở lại terminal. Nếu bạn đăng nhập qua SSH, hãy thoát phiên làm việc và đăng nhập lại. Tính năng hoàn thành lệnh cho các lệnh docker và docker-machine bây giờ sẽ hoạt động.

Bước 3 – Triển khai một Dockerized Host sử dụng Docker Machine

Sau khi đã cài đặt Docker và Docker Machine trên máy cục bộ, bạn có thể triển khai một Droplet Dockerized trên tài khoản DataOnline của bạn bằng lệnh docker-machine create của Docker Machine. Nếu bạn chưa làm, hãy gán DataOnline API token cho một biến bash bằng lệnh:

export DOTOKEN=your-api-token

Lưu ý: Bài hướng dẫn này sử dụng DOTOKEN làm tên biến bash cho token API của DataOnline. Tên biến không nhất thiết phải là DOTOKEN và không nhất thiết phải viết hoa toàn bộ.

Để biến này có hiệu lực vĩnh viễn, hãy thêm nó vào file ~/.bashrc. Bước này là tùy chọn nhưng cần thiết nếu bạn muốn giá trị này được lưu qua các phiên làm việc của terminal.

Mở file đó bằng nano:

nano ~/.bashrc

Thêm một dòng như sau vào bất kỳ đâu trong file:

~/.bashrc
export DOTOKEN=your-api-token

Để kích hoạt biến ngay trong phiên làm việc hiện tại, gõ:

source ~/.bashrc

Để gọi lệnh docker-machine create thành công, bạn phải chỉ định (ít nhất) driver, API token (hoặc biến chứa giá trị token) và một tên duy nhất cho máy. Để tạo máy đầu tiên, gõ:

docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name

Quá trình tạo máy sẽ xuất ra một phần kết quả. Trong quá trình này, tên máy được tạo là ubuntu1604-docker:

Output
 ...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env ubuntu1604-docker

Một cặp SSH key được tạo ra cho máy mới để docker-machine có thể truy cập từ xa. Droplet được triển khai với hệ điều hành mong muốn, và Docker được cài đặt trên hệ thống. Khi lệnh hoàn tất, Droplet Docker của bạn đã hoạt động.

Để xem máy mới được tạo từ dòng lệnh, gõ:

docker-machine ls

Kết quả xuất ra sẽ tương tự:

Output
NAME               ACTIVE      DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
ubuntu1604-docker    -        digitalocean   Running   tcp://203.0.113.71:2376            v18.05.0-ce

Bước 4 – Chỉ định hệ đIều hành cơ sở khi tạo Dockerized Host

Theo mặc định, hệ điều hành cơ sở được sử dụng khi tạo Dockerized host với Docker Machine là Ubuntu LTS mới nhất. Tuy nhiên, tại thời điểm xuất bản bài viết này, lệnh docker-machine create vẫn sử dụng Ubuntu 16.04 LTS làm hệ điều hành cơ sở, mặc dù Ubuntu 18.04 là bản LTS mới nhất. Vì vậy, nếu bạn cần chạy Ubuntu 18.04 trên máy mới được triển khai, bạn sẽ phải chỉ định Ubuntu kèm theo phiên bản mong muốn bằng cách truyền tham số --digitalocean-image cho lệnh docker-machine create.

Ví dụ, để tạo máy sử dụng Ubuntu 18.04, gõ:

docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

Bạn không bị giới hạn ở Ubuntu. Bạn có thể tạo máy sử dụng bất kỳ hệ điều hành nào được DataOnline hỗ trợ. Ví dụ, để tạo máy sử dụng Debian 8, gõ:

docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name

Để triển khai Dockerized host sử dụng CentOS 7 làm hệ điều hành cơ sở, chỉ định tên image là centos-7-0-x64 như sau:

docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $DOTOKEN centos7-docker

Ngoài việc chọn hệ điều hành cơ sở, bạn còn có thể chỉ định kích thước của Droplet. Theo mặc định, nó là Droplet nhỏ nhất với 1 GB RAM, 1 CPU và ổ SSD 25 GB.

Tìm kích thước Droplet mà bạn muốn sử dụng bằng cách tra cứu slug tương ứng trong tài liệu API của DataOnline.

Ví dụ, để triển khai máy với 2 GB RAM, 2 CPU và ổ SSD 60 GB, sử dụng slug s-2vcpu-2gb:

docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name

Để xem tất cả các tham số (flags) cụ thể khi tạo Docker Machine sử dụng driver của DataOnline, gõ:

docker-machine create --driver digitalocean -h

Tip: Nếu bạn làm mới trang Droplet trong bảng điều khiển DataOnline, bạn sẽ thấy các máy mới được tạo bằng lệnh docker-machine.

Bước 5 – Thực thi các lệnh Docker Machine bổ sung

Bạn đã thấy cách triển khai Dockerized host sử dụng lệnh create. Bạn cũng đã biết cách liệt kê các máy Docker Machine có sẵn bằng lệnh ls. Trong bước này, bạn sẽ học thêm một số subcommand của docker-machine.

Để lấy thông tin chi tiết về một Dockerized host, sử dụng lệnh inspect, gõ:

docker-machine inspect machine-name

Kết quả xuất ra sẽ bao gồm các dòng như sau. Dòng “Image” cho biết phiên bản của bản phân phối Linux được sử dụng và dòng “Size” chỉ ra slug kích thước:

Output
...
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "203.0.113.71",
        "MachineName": "ubuntu1604-docker",
        "SSHUser": "root",
        "SSHPort": 22,
        ...
        "Image": "ubuntu-16-04-x64",
        "Size": "s-1vcpu-1gb",
        ...
    },

---

Để in cấu hình kết nối của một host, gõ:

docker-machine config machine-name

Kết quả xuất ra sẽ tương tự:

Output
--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://203.0.113.71:2376

Dòng cuối cùng của kết quả lệnh docker-machine config cho biết địa chỉ IP của host, nhưng bạn cũng có thể lấy thông tin này bằng cách gõ:

docker-machine ip machine-name

Nếu cần tắt máy chủ từ xa, bạn có thể dùng docker-machine để dừng nó:

docker-machine stop machine-name

Kiểm tra lại trạng thái máy:

docker-machine ls

Trạng thái máy sẽ thay đổi:

Ouput
NAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
ubuntu1604-docker                  digitalocean   Timeout

Để khởi động lại:

docker-machine start machine-name

Kiểm tra lại:

docker-machine ls

Bạn sẽ thấy trạng thái máy hiện là Running:

Ouput
NAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

ubuntu1604-docker         -        digitalocean   Running   tcp://203.0.113.71:2376           v18.05.0-ce

Sau đó, bạn có thể xóa máy bằng:

docker-machine rm machine-name

Droplet sẽ bị xóa kèm với SSH key được tạo bởi docker-machine. Bây giờ, khi liệt kê các Dockerized hosts, máy vừa xóa sẽ không còn hiển thị nữa:

docker-machine ls

Bước 6 – Thực thi các lệnh trên Dockerized Host qua SSH

Tới thời điểm này, bạn đã có thông tin về các máy, nhưng bạn còn có thể thực hiện nhiều thao tác hơn. Ví dụ, bạn có thể thực thi các lệnh Linux gốc trên một Docker host bằng cách sử dụng subcommand ssh của docker-machine từ máy cục bộ. Phần này giải thích cách thực hiện lệnh ssh qua docker-machine cũng như cách mở phiên SSH tới Dockerized host.

Giả sử bạn đã triển khai một máy với hệ điều hành Ubuntu, hãy thực thi lệnh sau từ máy cục bộ để cập nhật cơ sở dữ liệu gói trên Docker host:

docker-machine ssh machine-name apt-get update

Bạn thậm chí có thể áp dụng các bản cập nhật có sẵn bằng:

docker-machine ssh machine-name apt-get upgrade

Không chắc Docker host từ xa của bạn đang sử dụng kernel nào? Gõ lệnh:

docker-machine ssh machine-name uname -r

Ngoài việc sử dụng subcommand ssh để thực thi các lệnh trên Docker host từ xa, bạn cũng có thể dùng nó để đăng nhập vào máy chủ. Chỉ cần gõ:

docker-machine ssh machine-name

Prompt của bạn sẽ thay đổi để phản ánh việc bạn đã đăng nhập vào máy chủ từ xa:

Output
root@machine-name#

Để thoát khỏi máy chủ từ xa, gõ:

exit

Bước 7 – Kích hoạt Dockerized Host

Kích hoạt một Docker host sẽ kết nối Docker client cục bộ của bạn với hệ thống đó, giúp bạn có thể thực thi các lệnh docker thông thường trên máy từ xa. Để kích hoạt một Docker host, gõ lệnh sau:

eval $(docker-machine env machine-name)

Ngoài ra, bạn có thể kích hoạt nó bằng lệnh:

docker-machine use machine-name

Tip: Khi làm việc với nhiều Docker hosts, lệnh docker-machine use là cách dễ nhất để chuyển đổi giữa các máy.

Sau khi gõ một trong những lệnh trên, prompt bash của bạn sẽ thay đổi để cho thấy Docker client đang trỏ tới Docker host từ xa. Nó sẽ có dạng, với tên của host được hiển thị ở cuối prompt:

username@localmachine:~ [machine-name]$

Bây giờ, bất kỳ lệnh docker nào bạn gõ tại prompt này sẽ được thực thi trên máy từ xa.

Nếu có một host đang hoạt động trên terminal mà lệnh docker-machine ls được chạy, dấu sao (*) dưới cột ACTIVE sẽ cho biết đó là host đang hoạt động:

Output
NAME                ACTIVE          DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
ubuntu1604-docker   *        digitalocean   Running   tcp://203.0.113.71:2376             v18.05.0-ce

Để thoát khỏi Docker host từ xa, gõ:

docker-machine use -u

Bạn sẽ trở lại prompt của máy cục bộ.

Bây giờ, hãy tạo các container trên máy từ xa.

Bước 8 – Tạo Docker Containers trên Dockerized Host từ xa

Cho đến nay, bạn đã triển khai một Droplet Dockerized trên tài khoản DataOnline và đã kích hoạt nó – tức là, Docker client của bạn đang trỏ tới máy đó. Bước tiếp theo hợp lý là khởi tạo các container trên máy đó. Ví dụ, hãy thử chạy container Nginx chính thức.

Sử dụng lệnh docker-machine use để chọn máy từ xa của bạn:

docker-machine use machine-name

Sau đó, thực thi lệnh sau để chạy một container Nginx trên máy đó:

docker run -d -p 8080:80 --name httpserver nginx

Trong lệnh này, chúng ta đang ánh xạ cổng 80 trong container Nginx sang cổng 8080 trên Dockerized host để có thể truy cập trang Nginx mặc định từ bất cứ đâu.

Nếu lệnh được thực thi thành công, bạn có thể truy cập trang Nginx mặc định bằng cách mở trình duyệt Web và truy cập:http://docker_machine_ip:8080

Trong khi Docker host vẫn đang được kích hoạt (như được hiển thị bởi tên trong prompt), bạn có thể liệt kê các image trên máy đó:

docker images

Kết quả xuất ra sẽ bao gồm image Nginx bạn vừa sử dụng, cùng với các image khác mà bạn đã tải về trước đó:

Output
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        3 weeks ago         109MB

Bạn cũng có thể liệt kê các container đang chạy trên máy:

docker ps

Nếu container Nginx bạn chạy trong bước này là container duy nhất đang hoạt động, kết quả sẽ như sau:

Output
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4284f9d25548        nginx               "nginx -g 'daemon of…"   20 minutes ago      Up 20 minutes       0.0.0.0:8080->80/tcp   httpserver

Để thoát khỏi prompt của máy từ xa (lệnh này cũng sẽ đóng terminal):

exit

Lưu ý: Nếu bạn có ý định tạo container trên máy từ xa, Docker client của bạn phải đang trỏ tới máy đó – tức là, nó phải là máy đang hoạt động trong terminal bạn đang sử dụng. Nếu không, container sẽ được tạo trên máy cục bộ. Hãy để prompt của bạn là người hướng dẫn.

Bước 9 – Vô hiệu hóa báo cáo lỗi

Theo mặc định, bất cứ khi nào có nỗ lực triển khai một Dockerized host bằng Docker Machine thất bại hoặc Docker Machine gặp sự cố, một số thông tin chẩn đoán sẽ tự động được gửi tới một tài khoản Docker trên Bugsnag. Nếu bạn không thoải mái với điều này, bạn có thể vô hiệu hóa báo cáo bằng cách tạo một file rỗng có tên no-error-report trong thư mục .docker/machine của bạn.

Để tạo file, gõ:

touch ~/.docker/machine/no-error-report

Kiểm tra file để xem thông báo lỗi nếu việc triển khai thất bại hoặc Docker Machine gặp sự cố.

Kết luận

Bài hướng dẫn này đã chỉ ra cách cài đặt và sử dụng Docker Machine để triển khai nhiều Docker Droplets từ xa chỉ với một máy cục bộ. Giờ đây, bạn có thể dễ dàng triển khai các Dockerized hosts trên tài khoản DataOnline của mình, tùy theo yêu cầu của dự án.

Để quản lý Docker Hosts từ xa với Docker Machine, một hệ thống mạnh mẽ là cần thiết. Mua VPS với cấu hình tùy chỉnh sẽ giúp bạn tối ưu hóa quy trình triển khai. Tìm hiểu các tùy chọn mua VPS để sở hữu giải pháp lưu trữ đáng tin cậy cho dự án của bạn!

Để tìm hiểu thêm về Docker Machine, bạn có thể tham khảo tài liệu chính thức trên trang web của Docker Machine. Ba script Bash được sử dụng trong bài viết này cũng đã được lưu trữ trên trang GitHub để bạn có thể tham khảo và sử dụng.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *