Dockerized là một tiện ích chạy các lệnh, trình thông dịch và các ứng dụng khác trong một vùng chứa Docker. Điều này giúp bạn không phải cài đặt thủ công từng lệnh (và các lệnh phụ thuộc) vào hệ thống cục bộ của bạn. Sử dụng Dockerized cho phép bạn dùng thử một công cụ mới, tận dụng một công cụ cho một tác vụ một lần hoặc đảm bảo nhóm của bạn đang sử dụng cùng một phiên bản của một công cụ.
Trong hướng dẫn này, hãy tìm hiểu thêm về Dockerized là gì và cách cài đặt nó. Ngoài ra, bạn có thể làm theo một số ví dụ về tình huống để bắt đầu thấy Dockerized có thể hữu ích với bạn như thế nào.
Ghi chú: Có nhiều ứng dụng riêng biệt được đặt tên là Dockerized , Dockerize hoặc tên rất giống vậy. Hướng dẫn này thảo luận về công cụ được lưu trữ trên kho lưu trữ GitHub datastack-net/dockerized .
Trước khi bạn bắt đầu
- Nếu bạn chưa thực hiện, hãy tạo một tài khoản Linode và Compute Instance. Xem hướng dẫn Bắt đầu với Linode và Tạo Compute Instance của chúng tôi .
- Làm theo hướng dẫn Thiết lập và Bảo mật Phiên bản Compute của chúng tôi để cập nhật hệ thống của bạn. Bạn cũng có thể muốn đặt múi giờ, cấu hình tên máy chủ, tạo tài khoản người dùng giới hạn và tăng cường quyền truy cập SSH.
Ghi chú: Các bước trong hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo
. Nếu bạn không quen với sudo
lệnh này, hãy xem hướng dẫn Người dùng và Nhóm Linux .
Dockerized là gì?
Dockerized đóng gói một bộ công cụ dòng lệnh hữu ích, cho phép bạn sử dụng các công cụ đó mà không cần cài đặt thêm. Ngay khi cài đặt, Dockerized bao gồm nhiều công cụ phát triển phổ biến (như git, npm và pip), CLI cơ sở dữ liệu (như mysql và postgres), mạng (như wget và telnet) và nhiều công cụ khác. Để biết danh sách, hãy xem phần Lệnh được hỗ trợ trên trang GitHub readme. Bạn thậm chí có thể mở rộng Dockerized bằng các lệnh bổ sung, do đó bạn không bị giới hạn chỉ ở những lệnh được bao gồm theo mặc định.
Dockerized thực hiện tất cả những điều này bằng cách tận dụng Docker và Docker Compose. Mỗi lệnh Dockerized tạo một vùng chứa Docker tạm thời với công cụ được cung cấp. Các vùng chứa này cho phép bạn chạy từng thiết lập phần mềm mà không cần thêm cài đặt hoặc phụ thuộc vào hệ thống của bạn.
Dockerized có nhiều trường hợp sử dụng và bạn có thể đã nghĩ ra một số trường hợp của riêng mình. Nhưng có hai loại nổi bật hơn cả.
- Thử nghiệm các công cụ mới. Dockerized cho phép bạn thử nghiệm một loạt các công cụ mà không cần phải cài đặt từng công cụ. Điều này cho phép bạn so sánh và khám phá các khả năng của công cụ mà không cần phải cài đặt và lộn xộn với nhiều ứng dụng mà bạn có thể không bao giờ sử dụng lại.
- Chạy các tác vụ một lần. Ngôn ngữ lập trình rất giỏi trong việc chạy các tác vụ dùng một lần, nhưng thông thường chúng yêu cầu bạn phải cài đặt trình thông dịch và các phụ thuộc của trình thông dịch. Dockerized bao gồm nhiều trình thông dịch tập lệnh, nghĩa là bạn có thể tạo và chạy tập lệnh mà không cần cài đặt thêm trên hệ thống của mình.
Cách cài đặt Dockerized
Dockerized được phân phối dưới dạng nhị phân được biên dịch trước và phụ thuộc bên ngoài duy nhất của nó là Docker. Sau khi bạn thiết lập xong, bạn có thể chạy tất cả các lệnh được bao gồm với Dockerized — cũng như bất kỳ lệnh bổ sung nào bạn thêm vào.Ghi chúCác hướng dẫn cài đặt này sẽ hoạt động với hầu hết các bản phân phối Linux và macOS. Dockerized cũng hỗ trợ Windows, nhưng điều đó nằm ngoài phạm vi của hướng dẫn này. Để xem hướng dẫn chính thức cho tất cả các hệ điều hành được hỗ trợ, hãy xem phần
Cài đặt có trong tệp readme GitHub Dockerized.
Cài đặt Docker
Dockerized chạy lệnh thông qua các container Docker, do đó bạn cần cài đặt Docker để có thể sử dụng Dockerized.
Trên hầu hết các hệ thống Linux, bạn có thể cài đặt Docker Engine bằng cách làm theo hướng dẫn Cài đặt và Sử dụng Docker của chúng tôi . Ngoài ra, bạn cần thêm bất kỳ người dùng không phải root nào mà bạn muốn chạy Dockerized vào docker
nhóm người dùng. Làm theo phần về chạy Docker với tư cách là người dùng không phải root trong hướng dẫn được liên kết ở trên để xem lệnh phù hợp để thực hiện việc đó.
Tải xuống và cài đặt Dockerized
Để cài đặt Dockerized, hãy tải xuống tệp zip mới nhất tương ứng với hệ điều hành của bạn, giải nén tệp zip và thêm bin
thư mục Dockerized vào biến PATH.
1.Tải xuống gói Dockerized cho hệ điều hành của bạn từ trang Releases trên GitHub. Cách nhanh nhất để thực hiện là sử dụng một lệnh duy nhất như lệnh được hiển thị bên dưới. Lệnh này sẽ lấy thông tin về bản phát hành mới nhất, tìm URL tải xuống cho hệ điều hành đã chỉ định và tải xuống gói.
curl -s https://api.github.com/repos/datastack-net/dockerized/releases/latest \
| grep "browser_download_url.*dockerized.*linux-x86_64.zip" \
| tail -n 1 \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -O dockerized.zip -qi -
Nếu bạn đang sử dụng macOS, hãy thay thế linux-x86_64.zip
lệnh trên bằng một trong các chuỗi sau:
- Apple Silicon:
mac-arm64.zip
- Thông tin:
mac-x86_64.zip
2.Vì Dockerized được đóng gói dưới dạng tệp zip, bạn cần có cách để giải nén tệp. Hướng dẫn này sử dụng lệnh unzip , có trong macOS nhưng không có trong hầu hết các bản phân phối Linux. Người dùng Linux trước tiên nên cài đặt unzip thông qua trình quản lý gói của họ:
Ubuntu, Debian và nhiều bản phân phối khác sử dụng trình quản lý gói APT:
sudo apt install unzip
CentOS/RHEL, AlmaLinux, Rocky Linux 8 (trở lên) và Fedora:
sudo dnf install unzip
3.Giải nén gói Dockerized vào một thư mục mới trong thư mục gốc của bạn ( ~/dockerized/
).
unzip dockerized.zip -d ~/dockerized/
4.Sửa đổi biến môi trường PATH của bạn để bao gồm nhị phân Dockerized. Có nhiều phương pháp để thực hiện việc này, mặc dù hướng dẫn này đề cập đến hai cách phổ biến.
Chỉ cài đặt cho người dùng hiện tại: Thêm dockerzied/bin
thư mục vào biến PATH.
export PATH="$PATH:$HOME/dockerized/bin"
Cài đặt cho tất cả người dùng: Thêm liên kết tượng trưng của tệp nhị phân Dockerized vào một thư mục hiện có mà tất cả người dùng đều có thể truy cập và đảm bảo rằng thư mục đó nằm trong biến PATH của hệ thống.
Đầu tiên, hãy di chuyển dockerized/
thư mục đến một vị trí tập trung hơn.
sudo mv ~/dockerized/ /usr/local/lib/dockerized/
Sau đó, tạo liên kết tượng trưng trong thư mục trên đường dẫn shell của hệ thống. Thông thường, /usr/local/bin/
là trên đường dẫn đó, nhưng hãy thay đổi trong ví dụ này nếu cần.
sudo ln -s /usr/local/lib/dockerized/bin/dockerized /usr/local/bin/dockerized
5.Xác minh thiết lập bằng cách kiểm tra chạy lệnh từ Dockerized. Để biết hướng dẫn, hãy xem phần Chạy lệnh với Dockerized bên dưới.
Chạy lệnh với Dockerized
Để bắt đầu sử dụng Dockerized để chạy một trong các công cụ dòng lệnh đi kèm, hãy nhập lệnh sau. Thay COMMAND bằng lệnh bạn muốn chạy.
dockerized COMMAND
Ví dụ, bạn có thể sử dụng tiện ích npm (có trong Dockerized). Ví dụ cơ bản, hãy chạy lệnh bên dưới để kiểm tra phiên bản npm đang sử dụng:
dockerized npm --version
Lần đầu tiên lệnh được chạy, Dockerized sẽ tải xuống hình ảnh phù hợp cần thiết cho công cụ liên quan. Sau đó, bạn sẽ thấy đầu ra của lệnh.
[+] Running 10/10
⠿ npm Pulled
[...]
8.5.2
Nếu bạn chạy lệnh bên ngoài Dockerized, bạn có thể nhận thấy đầu ra khác hoặc nhận được lỗi không tìm thấy lệnh. Điều này là do hệ thống của bạn đang chạy phiên bản khác của tiện ích được Dockerized sử dụng hoặc, nhiều khả năng là, tiện ích không được cài đặt cục bộ trên hệ thống của bạn.
Để minh họa rõ hơn, sau đây là một Hello, world!
lệnh thực thi đơn giản sử dụng một trong các trình thông dịch có trong Dockerized, Lua .
dockerized lua -e 'print("Hello, world!")'
Hello, world!
Sau đây là một số cách sử dụng Dockerized nâng cao hơn. Mỗi cách này đều nhằm mục đích bao quát một trường hợp sử dụng, cung cấp cho bạn các cơ sở và một số ý tưởng về cách bạn có thể sử dụng Dockerized. Các khả năng rất rộng, nhưng những ví dụ này nhằm mục đích giúp bạn bắt đầu và thể hiện nhiều hơn về khả năng của Dockerized.
Lập trình bảo trì cơ sở dữ liệu
Dockerized bao gồm các container cho một số ngôn ngữ kịch bản, bao gồm Lua, Python và Ruby. Các ngôn ngữ kịch bản rất giỏi trong việc hoàn thành các tác vụ một lần và điều này phù hợp với mô hình của Dockerized. Bạn không cần phải cài đặt trình thông dịch kịch bản và các phụ thuộc bất cứ khi nào bạn cần chạy một kịch bản đơn giản, một lần.
Ví dụ này, mặc dù cơ bản, nhưng sẽ cho bạn thấy cách thiết lập một tập lệnh Ruby để sửa đổi cơ sở dữ liệu.
1.Tạo một thư mục cho tập lệnh và chuyển vào thư mục đó. Ví dụ này đặt thư mục mới vào thư mục home của người dùng hiện tại.
mkdir ~/ruby-script
cd ~/ruby-script
2.Sử dụng lệnh Gem đi kèm với Dockerized để cài đặt sqlite3
Ruby gem. Lệnh bên dưới đảm bảo rằng gem được cài đặt vào thư gem/
mục con của thư mục hiện tại.
dockerized gem install sqlite3 --install-dir ./gems
3.Tạo một test.rb
tệp trong thư mục và cung cấp cho nó nội dung được hiển thị ở đây. Mã ví dụ có các bình luận giải thích chức năng của từng phần.
Tóm lại, tập lệnh kết nối với tệp cơ sở dữ liệu SQLite. Nó hiển thị kết quả từ một bảng nhất định nếu có. Nếu không có kết quả nào, tập lệnh sẽ chèn một số mục nhập.
# Alter the load path for Ruby to include the local gem path
$LOAD_PATH.unshift 'gems/gems/sqlite3-1.6.0-x86_64-linux/lib'
# Import the sqlite3 gem
require 'sqlite3'
# Make a connection to test.db; configure to process rows as hashes
db = SQLite3::Database.open 'test.db'
db.results_as_hash = true
# Create a table if it does not already exist
db.execute 'CREATE TABLE IF NOT EXISTS the_data (id INTEGER PRIMARY KEY, name TEXT);'
# Define an array of values to be inserted into the table
name_array = ["first name", "second name", "third name"]
# Fetch everything in the table
results = db.query 'SELECT name FROM the_data;'
# If there is anything in the table, display what is there; if there is
# not anything in the table, insert the values from name_array
first_result = results.next
if first_result
puts "Results found!"
puts first_result["name"]
results.each do |result|
puts result["name"]
end
else
puts "No results found"
puts "Inserting new records"
name_array.each do |new_name|
db.execute 'INSERT INTO the_data (name) VALUES (?);', new_name
end
end
4.Chạy tập lệnh bằng cách sử dụng container Ruby từ Dockerized.
dockerized ruby test.rb
Lần đầu tiên chạy tập lệnh, bạn sẽ thấy thông báo không tìm thấy bản ghi nào và đang thêm bản ghi mới.
No results found
Inserting new records
Chạy lại tập lệnh và bạn sẽ thấy tập lệnh lấy kết quả đã chèn vào bảng ở lần chạy trước.
Results found!
first name
second name
third name
Máy chủ HTTP tĩnh
Dockerized bao gồm một số công cụ có thể phục vụ các tệp tĩnh qua HTTP — ví dụ như Node, Python và Ruby. Những công cụ này có thể hữu ích nếu bạn muốn kiểm tra một số tệp trang web tĩnh mà không cần chuẩn bị toàn bộ dự án.
Python cung cấp một cách dễ dàng để xem điều này hoạt động thông qua http.server
mô-đun của nó.
1.Tạo một thư mục cho các tệp trang web tĩnh, sau đó thay đổi vào thư mục đó. Ví dụ này sử dụng một thư mục trong thư mục gốc của người dùng hiện tại.
mkdir ~/simple-website
cd ~/simple-website
2.Cung cấp cho thư mục một index.html
trang đích. Từ đó, bạn có thể cung cấp bất kỳ nội dung bổ sung nào bạn muốn. Sau đây là một ví dụ cơ bản.
<!doctype html>
<html lang="en">
<head>
<title>A Simple Website</title>
</head>
<body>
<p>This is a test website.</p>
</body>
</html>
3.Chạy lệnh Dockerized sau để phục vụ các tệp trang web tĩnh trong thư mục hiện tại. -p
Tùy chọn này cho phép bạn chuyển tiếp một cổng từ bên trong vùng chứa đến máy chủ.
dockerized -p 8080:8080 python -m http.server 8080
Trong trường hợp này, http.server
phục vụ nội dung trên cổng 8080
của vùng chứa và -p
tùy chọn cũng chuyển tiếp cổng đó đến cổng 8080
trên máy chủ.
4.Điều hướng đến cổng máy chủ 8080
trong trình duyệt web và bạn sẽ thấy nội dung của trang web.
This is a test website.
Cách Thêm Nhiều Lệnh Vào Dockerized
Trong khi Dockerized đi kèm với một bộ lệnh hữu ích, bạn có thể muốn mở rộng chức năng hiện có và thêm lệnh mới. Vì Dockerized sử dụng Docker Compose , bạn có thể tạo các tệp Compose bổ sung để xác định các lệnh mới. Sau đó, bạn có thể chỉ định vị trí của các tệp Compose thông qua việc sử dụng các biến môi trường Dockerized.
1.Xác định lệnh mới trong các tệp Docker Compose: Các tệp Compose được sử dụng để xác định các lệnh bổ sung để sử dụng với Dockerized. Một tệp duy nhất có thể lưu trữ nhiều lệnh hoặc bạn có thể tạo một tệp cho mỗi lệnh. Nếu bạn muốn các lệnh được người dùng khác sử dụng, hãy đảm bảo rằng những người dùng đó có thể truy cập tệp Compose tương ứng. Nếu không, nếu người dùng hiện tại của bạn là người dùng dự định duy nhất, tệp đó có thể được lưu trữ trong thư mục gốc của bạn.Ví dụ, tạo một tệp mới có tên new-command.yml
là có nội dung sau:
version: "3"
services:
example:
image: curlimages/curl:latest
entrypoint: ["curl"]
Điều này tạo ra một dịch vụ mới có tên là example
. Tên dịch vụ này định nghĩa lệnh Dockerized, do đó một dịch vụ có tên example
được gọi bằng cách chạy dockerized example
. Dịch vụ sử dụng hình ảnh Docker curlimages/curl và entrypoint
yêu cầu Dockerized chạy curl
lệnh trong vùng chứa ngay lập tức bất cứ khi nào dịch vụ được gọi.
2.Chỉ định vị trí của các tệp Compose trong Dockerized: Sau khi bạn đã tạo các tệp Compose, bạn cần cho Dockerized biết nơi để tìm kiếm. Điều này được thực hiện thông qua việc sử dụng các tệp cấu hình môi trường ( dockerized.env
), có thể được lưu trữ trong thư mục gốc của bạn (để bạn có thể truy cập lệnh mới trên toàn cầu) hoặc trong một thư mục dự án cụ thể (để bạn có thể truy cập lệnh từ bên trong một thư mục dự án nhất định). Theo cách này, Dockerized cho phép bạn áp dụng phạm vi cho các lệnh bổ sung, phù hợp với người dùng và thư mục dự án cụ thể. Có hai biến có thể được sử dụng để chỉ định vị trí tương đối của các tệp Compose: ${HOME}
(tương ứng với thư mục gốc của người dùng) và ${DOCKERIZED_PROJECT_ROOT}
(tương ứng với thư mục làm việc hiện tại).
Để tiếp tục với ví dụ ở bước trước, hãy tạo một tệp mới trong thư mục gốc của bạn có tên dockerized.env
là:
COMPOSE_FILE="${COMPOSE_FILE};${HOME}/new-command.yml"
Thao tác này cập nhật COMPOSE_FILE
cài đặt để bao gồm cả lệnh tích hợp sẵn ( ${COMPOSE_FILE}
biến) và lệnh mới ( ${HOME}/new-command.yml
). Có thể thêm các vị trí bổ sung bằng cách sử dụng dấu chấm phẩy ( ;
) làm dấu phân cách.
Bạn có thể kiểm tra ví dụ này bằng cách chạy lệnh mới được xác định như hiển thị bên dưới, thay example.com bằng URL của bất kỳ trang web hoặc điểm cuối API nào mà bạn muốn xuất ra.
dockerized example example.com
Vì example
tên dịch vụ Dockerized được ánh xạ tới lệnh curl nên việc chạy lệnh thực sự diễn ra curl
từ bên trong vùng chứa Docker và hiển thị nội dung của trang web được cung cấp.
Để biết thêm hướng dẫn về cách xác định lệnh mới hoặc điều chỉnh cài đặt Dockerized, hãy xem phần Tùy chỉnh của tệp readme trên GitHub.
Nguồn: https://www.linode.com/docs/guides/running-commands-with-dockerized/