Thứ tư, 23/01/2019 | 00:00 GMT+7

Cách cài đặt và sử dụng Docker Compose trên CentOS 7

Docker là một công cụ tuyệt vời để tự động hóa việc triển khai các ứng dụng Linux bên trong containers phần mềm, nhưng để thực sự tận dụng hết tiềm năng của nó, tốt nhất là mỗi thành phần của ứng dụng của bạn chạy trong containers riêng của nó. Đối với các ứng dụng phức tạp với nhiều thành phần, việc sắp xếp tất cả các containers khởi động và tắt cùng nhau (chưa kể đến việc nói chuyện với nhau) có thể nhanh chóng trở nên khó sử dụng.

Cộng đồng Docker đã đưa ra một giải pháp phổ biến có tên Fig , cho phép bạn sử dụng một file YAML duy nhất để sắp xếp tất cả các cấu hình và containers Docker của bạn. Điều này trở nên phổ biến đến nỗi group Docker quyết định tạo Docker Compose dựa trên nguồn Fig, hiện không được dùng nữa. Docker Compose giúp user sắp xếp các quy trình của containers Docker dễ dàng hơn, bao gồm khởi động, tắt và cài đặt liên kết nội bộ containers và dung lượng .

Trong hướng dẫn này, bạn sẽ cài đặt version mới nhất của Docker Compose để giúp bạn quản lý các ứng dụng đa containers và sẽ khám phá các lệnh cơ bản của phần mềm.

Docker và Docker composer khái niệm

Sử dụng Docker Compose yêu cầu sự kết hợp của nhiều khái niệm Docker khác nhau trong một, vì vậy trước khi bắt đầu, ta hãy dành một phút để xem xét các khái niệm khác nhau có liên quan. Nếu bạn đã quen thuộc với các khái niệm Docker như dung lượng , liên kết và chuyển tiếp cổng thì bạn có thể cần tiếp tục và chuyển sang phần tiếp theo.

Docker image

Mỗi containers Docker là một version local của Docker image . Bạn có thể coi Docker image như một bản cài đặt Linux hoàn chỉnh. Thông thường một cài đặt tối thiểu chỉ chứa tối thiểu các gói cần thiết để chạy hình ảnh. Những hình ảnh này sử dụng kernel của hệ thống server , nhưng vì chúng đang chạy bên trong containers Docker và chỉ thấy hệ thống file của riêng chúng, nên hoàn toàn có thể chạy một bản phân phối như CentOS trên server Ubuntu (hoặc ngược lại).

Hầu hết các Docker image được phân phối qua Docker Hub , được duy trì bởi group Docker. Hầu hết các dự án nguồn mở phổ biến đều có một hình ảnh tương ứng được tải lên Docker Registry, bạn có thể sử dụng hình ảnh này để triển khai phần mềm. Khi có thể, tốt nhất bạn nên lấy các hình ảnh “chính thức” vì chúng được group Docker đảm bảo tuân theo các phương pháp hay nhất của Docker.

Giao tiếp giữa các Docker image

Vùng chứa Docker được cách ly với server , nghĩa là theo mặc định, server không có quyền truy cập vào hệ thống file bên trong containers Docker, cũng như không có bất kỳ phương tiện giao tiếp nào với nó qua mạng. Điều này có thể gây khó khăn cho việc cấu hình và làm việc với hình ảnh đang chạy bên trong containers Docker.

Docker có ba cách chính để giải quyết vấn đề này. Đầu tiên và phổ biến nhất là để Docker chỉ định các biến môi trường sẽ được đặt bên trong containers Docker. Sau đó, mã chạy bên trong containers Docker sẽ kiểm tra giá trị của các biến môi trường này khi khởi động và sử dụng chúng để tự cấu hình đúng cách.

Một phương pháp thường được sử dụng khác là một data volumes Docker . Dung lượng Docker có hai loại - nội bộ và chia sẻ.

Việc chỉ định một ổ đĩa bên trong chỉ nghĩa là đối với một folder mà bạn chỉ định cho một containers Docker cụ thể, dữ liệu sẽ được duy trì khi containers bị xóa. Ví dụ: nếu bạn cần đảm bảo các file log của bạn vẫn tồn tại, bạn có thể chỉ định một dung lượng nội bộ /var/log .

Ổ đĩa được chia sẻ ánh xạ một folder bên trong containers Docker vào một folder trên server . Điều này cho phép bạn dễ dàng chia sẻ file giữa containers Docker và server .

Cách thứ ba để giao tiếp với Docker container là thông qua mạng. Docker cho phép giao tiếp giữa các containers Docker khác nhau thông qua links , cũng như chuyển tiếp cổng, cho phép bạn chuyển tiếp các cổng từ bên trong containers Docker tới các cổng trên server lưu trữ. Ví dụ: bạn có thể tạo một liên kết để cho phép các containers WordPress và MariaDB Docker của bạn nói chuyện với nhau và sử dụng chuyển tiếp cổng để hiển thị WordPress với thế giới bên ngoài để user có thể kết nối với nó.

Yêu cầu

Để theo dõi bài viết này, bạn cần những thứ sau:

Khi những điều này đã có, bạn sẽ sẵn sàng làm theo.

Bước 1 - Cài đặt Docker Compose

Để có được bản phát hành mới nhất, hãy dẫn đầu tài liệu Docker và cài đặt Docker Compose từ file binary trong repository lưu trữ GitHub của Docker.

Kiểm tra bản phát hành hiện tại và nếu cần, hãy cập nhật nó trong lệnh bên dưới:

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Tiếp theo, đặt các quyền để làm cho file binary có thể thực thi:

  • sudo chmod +x /usr/local/bin/docker-compose

Sau đó, xác minh cài đặt thành công bằng cách kiểm tra version :

  • docker-compose --version

Thao tác này sẽ in ra version bạn đã cài đặt:

Output
docker-compose version 1.23.2, build 1110ad01

Đến đây bạn đã cài đặt Docker Compose, bạn đã sẵn sàng chạy một ví dụ “Hello World”.

Bước 2 - Chạy containers với Docker Compose

Cơ quan đăng ký Docker công khai, Docker Hub, bao gồm một hình ảnh “Hello World” đơn giản để trình diễn và thử nghiệm. Nó minh họa cấu hình tối thiểu cần thiết để chạy một containers bằng Docker Compose: một file YAML gọi một hình ảnh duy nhất.

Đầu tiên, tạo một folder cho file YAML của ta :

  • mkdir hello-world

Sau đó thay đổi vào folder :

  • cd hello-world

Bây giờ, hãy tạo file YAML bằng editor yêu thích của bạn. Hướng dẫn này sẽ sử dụng Vi:

  • vi docker-compose.yml

Vào chế độ insert , bằng cách nhấn i , sau đó đưa các nội dung sau vào file :

docker-compos.yml
my-test:   image: hello-world 

Dòng đầu tiên sẽ là một phần của tên containers . Dòng thứ hai chỉ định hình ảnh nào sẽ sử dụng để tạo containers . Khi bạn chạy lệnh docker-compose up nó sẽ tìm kiếm một hình ảnh local theo tên được chỉ định, hello-world .

Với điều này tại chỗ, nhấn ESC để thoát khỏi chế độ insert . Nhập :x rồi ENTER để lưu và thoát khỏi file .

Để xem hình ảnh trên hệ thống của bạn theo cách thủ công, hãy sử dụng lệnh docker images :

  • docker images

Khi không có hình ảnh local nào, chỉ có tiêu đề cột hiển thị:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

Bây giờ, khi vẫn ở trong folder ~/hello-world , hãy thực thi lệnh sau để tạo containers :

  • docker-compose up

Lần đầu tiên ta chạy lệnh, nếu không có hình ảnh local nào có tên hello-world , Docker Compose sẽ lấy nó từ repository công cộng Docker Hub:

Output
Pulling my-test (hello-world:)... latest: Pulling from library/hello-world 1b930d010525: Pull complete . . .

Sau khi kéo hình ảnh, docker-compose tạo một containers , đính kèm và chạy chương trình hello , từ đó xác nhận cài đặt dường như đang hoạt động:

Output
. . . Creating helloworld_my-test_1... Attaching to helloworld_my-test_1 my-test_1 | my-test_1 | Hello from Docker. my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | . . .

Sau đó, nó sẽ in giải thích về những gì nó đã làm:

Output
. . . my-test_1 | To generate this message, Docker took the following steps: my-test_1 | 1. The Docker client contacted the Docker daemon. my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. my-test_1 | (amd64) my-test_1 | 3. The Docker daemon created a new container from that image which runs the my-test_1 | executable that produces the output you are currently reading. my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it my-test_1 | to your terminal. . . .

Vùng chứa Docker chỉ chạy khi lệnh còn hoạt động, vì vậy khi hello chạy xong, containers sẽ dừng lại. Do đó, khi bạn nhìn vào các quy trình đang hoạt động, tiêu đề cột sẽ xuất hiện, nhưng containers hello-world sẽ không được liệt kê vì nó không chạy:

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

Sử dụng cờ -a để hiển thị tất cả các containers , không chỉ những vùng đang hoạt động:

  • docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 50a99a0beebd hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago hello-world_my-test_1

Đến đây bạn đã thử nghiệm chạy một containers , bạn có thể chuyển sang khám phá một số lệnh Docker Compose cơ bản.

Bước 3 - Học Docker Soạn lệnh

Để giúp bạn bắt đầu với Docker Compose, phần này sẽ trình bày về các lệnh chung mà công cụ docker-compose hỗ trợ.

Lệnh docker-compose hoạt động trên cơ sở từng folder . Bạn có thể có nhiều group containers Docker chạy trên một máy - chỉ cần tạo một folder cho mỗi containers và một file docker-compose.yml cho mỗi folder .

Lúc này, bạn đã tự chạy docker-compose up , từ đó bạn có thể sử dụng CTRL-C để đóng containers . Điều này cho phép các thông báo gỡ lỗi được hiển thị trong cửa sổ terminal . Tuy nhiên, điều này không lý tưởng; khi chạy trong quá trình production , nó sẽ mạnh mẽ hơn để có docker-compose hành động giống như một dịch vụ hơn. Một cách đơn giản để làm điều này là thêm tùy chọn -d khi bạn thiết up phiên của bạn :

  • docker-compose up -d

docker-compose sẽ chuyển sang nền.

Để hiển thị group các containers Docker của bạn (cả đã dừng và hiện đang chạy), hãy sử dụng lệnh sau:

  • docker-compose ps -a

Nếu một containers bị dừng, State sẽ được liệt kê là Exited , như thể hiện trong ví dụ sau:

Output
Name Command State Ports ------------------------------------------------ hello-world_my-test_1 /hello Exit 0

Một containers đang chạy sẽ hiển thị Up :

Output
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp

Để dừng tất cả các containers Docker đang chạy cho một group ứng dụng, hãy chạy lệnh sau trong cùng folder với file docker-compose.yml mà bạn đã sử dụng để khởi động group Docker:

  • docker-compose stop

Lưu ý: tính docker-compose kill cũng có sẵn nếu bạn cần tắt mọi thứ một cách mạnh mẽ hơn.

Trong một số trường hợp, containers Docker sẽ lưu trữ thông tin cũ của chúng trong một ổ đĩa nội bộ. Nếu bạn muốn bắt đầu lại từ đầu, bạn có thể sử dụng lệnh rm để xóa hoàn toàn tất cả các containers tạo nên group containers của bạn:

  • docker-compose rm

Nếu bạn thử bất kỳ lệnh nào trong số các lệnh này từ một folder khác với folder chứa containers Docker và file .yml , nó sẽ trả về lỗi:

Output
ERROR: Can't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml

Phần này đã trình bày những kiến thức cơ bản về cách thao tác containers với Docker Compose. Nếu bạn cần kiểm soát nhiều hơn các containers của bạn , bạn có thể truy cập hệ thống file của containers Docker và làm việc từ dấu nhắc lệnh bên trong containers của bạn, một quá trình được mô tả trong phần tiếp theo.

Bước 4 - Truy cập hệ thống file containers Docker

Để làm việc trên dấu nhắc lệnh bên trong containers và truy cập hệ thống file của nó, bạn có thể sử dụng lệnh thực thi của docker exec .

Ví dụ “Hello World” sẽ thoát ra sau khi nó chạy, vì vậy, để kiểm tra trình thực thi docker exec , hãy khởi động một containers sẽ tiếp tục chạy. Theo mục đích của hướng dẫn này, hãy sử dụng hình ảnh Nginx từ Docker Hub.

Tạo một folder mới có tên nginx và chuyển vào đó:

  • mkdir ~/nginx
  • cd ~/nginx

Tiếp theo, tạo một file docker-compose.yml trong folder mới của bạn và mở nó trong editor :

  • vi docker-compose.yml

Tiếp theo, thêm các dòng sau vào file :

~ / nginx / docker -omp.yml
nginx:   image: nginx 

Lưu file và thoát. Bắt đầu containers Nginx dưới dạng quy trình bằng lệnh sau:

  • docker-compose up -d

Docker Compose sẽ download hình ảnh Nginx và containers sẽ bắt đầu ở chế độ nền.

Đến đây bạn cần CONTAINER ID cho containers . Liệt kê tất cả các containers đang chạy bằng lệnh sau:

  • docker ps

Bạn sẽ thấy một cái gì đó tương tự như sau:

Output of `docker ps`
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b86b6699714c nginx "nginx -g 'daemon of…" 20 seconds ago Up 19 seconds 80/tcp nginx_nginx_1

Nếu bạn muốn tạo ra một sự thay đổi hệ thống file bên trong container này, bạn muốn lấy ID của nó (trong ví dụ này b86b6699714c ) và sử dụng docker exec để bắt đầu một vỏ bên trong container:

  • docker exec -it b86b6699714c /bin/bash

Tùy chọn -t mở ra một terminal và tùy chọn -i làm cho nó tương tác. /bin/bash mở một shell bash cho containers đang chạy.

Sau đó, bạn sẽ thấy dấu nhắc bash cho containers tương tự như:

root@b86b6699714c:/# 

Từ đây, bạn có thể làm việc từ dấu nhắc lệnh bên trong containers của bạn . Tuy nhiên, hãy nhớ rằng trừ khi bạn đang ở trong một folder được lưu như một phần của data volumes , các thay đổi sẽ không xuất hiện ngay sau khi containers được khởi động lại. Ngoài ra, hãy nhớ rằng hầu hết các Docker image được tạo bằng các bản cài đặt Linux rất tối thiểu, vì vậy một số tiện ích dòng lệnh và công cụ bạn quen dùng có thể không có mặt.

Kết luận

Đến đây bạn đã cài đặt Docker Compose, đã kiểm tra cài đặt của bạn bằng cách chạy ví dụ “Hello World” và khám phá một số lệnh cơ bản.

Mặc dù ví dụ “Hello World” đã xác nhận cài đặt của bạn, nhưng cấu hình đơn giản không cho thấy một trong những lợi ích chính của Docker Compose - có thể đưa một group Docker container lên và xuống cùng một lúc. Để xem sức mạnh của Docker Compose trong hoạt động, hãy xem Cách bảo mật một ứng dụng Node.js được chứa đựng bằng Nginx, Let's Encrypt và Docker Compose cũng như 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 . Mặc dù các hướng dẫn này hướng đến Ubuntu 16.04 và 18.04, các bước có thể được điều chỉnh cho CentOS 7.


Tags:

Các tin liên quan

Cách sử dụng Traefik làm reverse-proxy cho container Docker trên Debian 9
2019-01-08
Cách thiết lập registry Docker riêng trên Ubuntu 18.04
2019-01-07
Cách thiết lập triển khai nhiều node với Rancher 2.1, Kubernetes và Docker Machine trên Ubuntu 18.04
2019-01-03
Cách tạo ứng dụng Node.js với Docker
2018-11-29
Cách quản lý triển khai nhiều node với Máy Rancher và Docker trên Ubuntu 16.04
2018-10-30
Cách cài đặt và sử dụng Docker trên Ubuntu 16.04
2018-10-19
Cách cung cấp và quản lý server Docker từ xa bằng Máy Docker trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật OpenFaaS bằng Docker Swarm trên Ubuntu 16.04
2018-09-19
Cách cài đặt Docker Compose trên Debian 9
2018-09-06
Cách cài đặt và sử dụng Docker trên Debian 9
2018-09-04