Thứ sáu, 04/11/2016 | 00:00 GMT+7

Làm việc với Docker Containers

Docker là một công cụ chứa phổ biến được sử dụng để cung cấp cho các ứng dụng phần mềm một hệ thống file chứa mọi thứ chúng cần để chạy. Sử dụng containers Docker đảm bảo phần mềm sẽ hoạt động theo cùng một cách, dù nó được triển khai ở đâu, bởi vì môi trường thời gian chạy của nó nhất quán một cách tàn nhẫn.

Trong hướng dẫn này, ta sẽ cung cấp tổng quan ngắn gọn về mối quan hệ giữa Docker image và containers Docker. Sau đó, ta sẽ xem xét chi tiết hơn cách chạy, bắt đầu, dừng và loại bỏ các containers .

Tổng quat

Ta có thể coi Docker image như một mẫu trơ được sử dụng để tạo containers Docker. Hình ảnh thường bắt đầu bằng hệ thống file root và thêm các thay đổi hệ thống file và các tham số thực thi tương ứng của chúng trong các lớp chỉ đọc, có thứ tự. Không giống như một bản phân phối Linux điển hình, một Docker image thường chỉ chứa các yếu tố cơ bản cần thiết để chạy ứng dụng. Các hình ảnh không có trạng thái và chúng không thay đổi. Thay vào đó, chúng tạo thành điểm bắt đầu cho các containers Docker.

Hình ảnh trở nên sống động với lệnh docker run , lệnh này tạo vùng chứa bằng cách thêm lớp đọc-ghi lên trên hình ảnh. Sự kết hợp giữa các lớp chỉ đọc đứng đầu với một lớp đọc-ghi được gọi là hệ thống file liên hợp . Khi một thay đổi được thực hiện đối với file hiện có trong containers đang chạy, file được sao chép ra khỏi không gian chỉ đọc vào lớp đọc-ghi, nơi các thay đổi được áp dụng. Phiên bản trong lớp đọc-ghi ẩn file root nhưng không xóa file đó. Các thay đổi trong lớp đọc-ghi chỉ tồn tại trong một cá thể containers riêng lẻ. Khi một containers bị xóa, mọi thay đổi sẽ bị mất trừ khi thực hiện các bước để duy trì chúng.

Làm việc với Container

Mỗi lần bạn sử dụng lệnh docker run , nó sẽ tạo một containers mới từ hình ảnh bạn chỉ định. Đây có thể là một nguồn gây nhầm lẫn, vì vậy ta hãy xem xét một số ví dụ:

Bước 1: Tạo hai containers

Lệnh docker run sau đây sẽ tạo một containers mới bằng cách sử dụng hình ảnh ubuntu cơ sở. -t sẽ cung cấp cho ta một terminal và -i sẽ cho phép ta tương tác với nó. Ta sẽ dựa vào lệnh mặc định trong tệp Docker của hình ảnh cơ sở Ubuntu , bash , để thả ta vào một shell .

  • docker run -ti ubuntu

Dấu nhắc dòng lệnh thay đổi để cho biết ta đang ở bên trong containers với quyền là user root , theo sau là ID containers 12 ký tự.

Ta sẽ thực hiện thay đổi bằng cách lặp lại một số văn bản vào /tmp của containers , sau đó sử dụng cat để xác minh nó đã được lưu thành công.

  • echo "Example1" > /tmp/Example1.txt
  • cat /tmp/Example1.txt
Output
Example1

Bây giờ, hãy thoát khỏi containers .

  • exit

Các containers Docker ngừng chạy ngay sau khi lệnh mà chúng đưa ra hoàn tất, vì vậy containers của ta đã dừng lại khi ta thoát khỏi bash shell. Nếu ta chạy docker ps , lệnh hiển thị các containers đang chạy, ta sẽ không thấy của ta .

  • docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Nếu ta thêm cờ -a , cờ hiển thị tất cả các vùng chứa, đã dừng hoặc đang chạy, thì containers của ta sẽ xuất hiện trên danh sách:

  • docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

Khi containers được tạo, nó được cấp ID containers và tên được tạo ngẫu nhiên. Trong trường hợp này, 11cc47339ee1 là ID containers và small_sinoussi là tên được tạo ngẫu nhiên. ps -a hiển thị các giá trị đó, cũng như hình ảnh mà từ đó containers được tạo ( ubuntu ), khi containers được tạo ( six minutes ago ) và lệnh được chạy trong đó ( /bin/bash ). Đầu ra cũng cung cấp trạng thái của containers ( Exited ) và cách đây bao lâu containers đã vào trạng thái đó ( 6 seconds ago ). Nếu containers vẫn đang chạy, ta sẽ thấy trạng thái “Lên”, theo sau là thời gian nó đã chạy.

Nếu ta chạy lại cùng một lệnh, một containers hoàn toàn mới sẽ được tạo:

  • docker run -ti ubuntu

Ta có thể biết đó là một containers mới vì ID trong dấu nhắc lệnh khác và khi ta tìm kiếm file Example1 của bạn , ta sẽ không tìm thấy nó:

  • cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

Điều này có thể làm cho dữ liệu có vẻ như đã biến mất, nhưng không phải vậy. Ta sẽ thoát khỏi containers thứ hai ngay bây giờ để thấy rằng nó và containers đầu tiên của ta với file ta đã tạo, đều có trên hệ thống.

  • exit

Khi ta liệt kê lại các containers , cả hai đều xuất hiện:

  • docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

Bước 2: Khởi động lại containers đầu tiên

Để khởi động lại containers hiện có, ta sẽ sử dụng lệnh start với cờ -a để gắn vào nó và cờ -i để làm cho nó tương tác, theo sau là ID hoặc tên containers . Đảm bảo thay thế ID của containers của bạn trong lệnh dưới đây:

  • docker start -ai 11cc47339ee1

Ta thấy mình ở bash của container nhắc lại và khi ta cat file ta tạo ra trước đó, nó vẫn còn ở đó.

  • cat /tmp/Example1.txt
Output
Example1

Bây giờ ta có thể thoát khỏi containers :

  • exit

Kết quả này cho thấy những thay đổi được thực hiện bên trong containers vẫn tồn tại thông qua việc dừng và khởi động nó. Chỉ khi containers bị xóa thì nội dung mới bị xóa. Ví dụ này cũng minh họa rằng các thay đổi được giới hạn cho từng containers . Khi ta bắt đầu một containers thứ hai, nó phản ánh trạng thái ban đầu của hình ảnh.

Bước 3: Xóa cả hai containers

Ta đã tạo hai containers và ta sẽ kết thúc hướng dẫn ngắn gọn của bạn bằng cách xóa chúng. Lệnh docker rm , chỉ hoạt động trên các containers đã dừng, cho phép bạn chỉ định tên hoặc ID của một hoặc nhiều containers , vì vậy ta có thể xóa cả hai bằng cách sau:

  • docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

Cả hai container và bất kỳ thay đổi nào ta thực hiện bên trong chúng đều đã biến mất.

Kết luận

Ta đã xem xét chi tiết lệnh docker run để xem cách nó tự động tạo containers mới mỗi khi chạy. Ta cũng đã biết cách xác định vị trí một containers đã dừng, khởi động nó và kết nối với nó. Nếu bạn muốn tìm hiểu thêm về cách quản lý containers , bạn có thể quan tâm đến hướng dẫn, Đặt tên containers Docker: 3 Mẹo cho người mới bắt đầu .


Tags:

Các tin liên quan

Cách cấu hình môi trường kiểm tra tích hợp liên tục với Docker và Docker Compose trên Ubuntu 14.04
2016-11-03
Cách cấu hình môi trường kiểm tra tích hợp liên tục với Docker và Docker Compose trên Ubuntu 16.04
2016-11-03
Cách cài đặt và sử dụng Docker trên CentOS 7
2016-11-02
Cách gỡ lỗi và khắc phục các sự cố thường gặp của Docker
2016-10-20
Cách cài đặt Prometheus bằng Docker trên CentOS 7
2016-01-15
Cách cài đặt Prometheus bằng Docker trên Ubuntu 14.04
2016-01-12
Cách cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.04
2015-11-19
Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.04
2015-11-19
Cách dọn dẹp môi trường Docker của bạn bằng CloudSlang trên CoreOS Cluster
2015-06-10
Cách quản lý triển khai nhiều node của bạn với Máy Rancher và Docker trên Ubuntu 14.04
2015-04-27