Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04
Docker đơn giản hóa quá trình quản lý các quy trình ứng dụng trong containers . Trong khi các containers tương tự như máy ảo theo một số cách nhất định, chúng nhẹ hơn và thân thiện với tài nguyên hơn. Điều này cho phép các nhà phát triển chia nhỏ môi trường ứng dụng thành nhiều dịch vụ riêng biệt.Đối với các ứng dụng phụ thuộc vào một số dịch vụ, việc sắp xếp tất cả các containers để khởi động, giao tiếp và tắt cùng nhau có thể nhanh chóng trở nên khó sử dụng. Docker Compose là một công cụ cho phép bạn chạy các môi trường ứng dụng đa containers dựa trên các định nghĩa được đặt trong file YAML. Nó sử dụng các định nghĩa dịch vụ để xây dựng các môi trường hoàn toàn có thể tùy chỉnh với nhiều containers có thể chia sẻ mạng và data volumes .
Trong hướng dẫn này, ta sẽ trình bày cách cài đặt Docker Compose trên server Ubuntu 20.04 và cách bắt đầu sử dụng công cụ này.
Yêu cầu
Để theo dõi bài viết này, bạn cần :
- Truy cập vào máy local hoặc server phát triển Ubuntu 20.04 với quyền là user không phải root với các quyền sudo. Nếu bạn đang sử dụng server từ xa, bạn nên cài đặt firewall đang hoạt động. Để cài đặt những điều này, vui lòng tham khảo Hướng dẫn cài đặt server ban đầu cho Ubuntu 20.04 của ta .
 - Docker được cài đặt trên server hoặc máy local của bạn, làm theo các Bước 1 và 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 20.04 .
 
Bước 1 - Cài đặt Docker Compose
Để đảm bảo ta có được version ổn định nhất được cập nhật của Docker Compose, ta sẽ download phần mềm này từ kho lưu trữ Github chính thức của nó.
 Trước tiên, hãy xác nhận version  mới nhất hiện có trong trang phát hành của họ. Tại thời điểm viết bài này, version  ổn định nhất hiện tại là 1.26.0 .
 Lệnh sau sẽ tải về 1.26.0 phát hành và lưu các  file  thực thi tại /usr/local/bin/docker-compose , mà sẽ làm cho phần mềm này  trên phạm vi global  truy cập như docker-compose :
- sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
 
Tiếp theo, hãy đặt các quyền chính xác để lệnh docker-compose có thể thực thi được:
- sudo chmod +x /usr/local/bin/docker-compose 
 
Để xác minh cài đặt thành công, bạn có thể chạy:
- docker-compose --version 
 
Bạn sẽ thấy kết quả tương tự như sau:
Outputdocker-compose version 1.26.0, build 8a1c60f6 Docker Compose hiện đã được cài đặt thành công  trên hệ thống.  Trong phần tiếp theo,  ta  sẽ xem cách  cài đặt  file  docker-compose.yml và  cài đặt  và chạy một môi trường được chứa trong containers  với công cụ này.
 Bước 2 -  Cài đặt  file  docker-compose.yml
 Để trình bày cách  cài đặt  file  docker-compose.yml và làm việc với Docker Compose,  ta  sẽ tạo môi trường  web server  bằng cách sử dụng hình ảnh Nginx chính thức từ Docker Hub , cơ quan đăng ký Docker công khai. Môi trường được chứa này sẽ phân phát một file  HTML tĩnh.
Bắt đầu bằng cách tạo một folder mới trong folder chính của bạn, sau đó chuyển vào đó:
- mkdir ~/compose-demo 
 - cd ~/compose-demo 
 
Trong folder này, hãy cài đặt một folder ứng dụng để làm tài liệu root cho môi trường Nginx của bạn:
- mkdir app 
 
Sử dụng editor   bạn muốn , tạo index.html mới trong folder  app :
- nano app/index.html 
 
Đặt nội dung sau vào file này:
<!doctype html> <html lang="en"> <head>     <meta charset="utf-8">     <title>Docker Compose Demo</title>     <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css"> </head> <body>      <h1>This is a Docker Compose Demo Page.</h1>     <p>This content is being served by an Nginx container.</p>  </body> </html>  Lưu file   khi bạn hoàn tất. Nếu bạn đang sử dụng nano , bạn có thể thực hiện điều đó  bằng lệnh  CTRL+X , sau đó là Y và ENTER để xác nhận.
 Tiếp theo, tạo file  docker-compose.yml :
- nano docker-compose.yml 
 
Chèn nội dung sau vào file  docker-compose.yml của bạn:
version: '3.7' services:   web:     image: nginx:alpine     ports:       - "8000:80"     volumes:       - ./app:/usr/share/nginx/html Tệp docker-compose.yml thường bắt đầu bằng định nghĩa version . Điều này sẽ cho Docker Compose biết  ta  đang sử dụng version  cấu hình nào.
 Sau đó,  ta  có khối services , nơi  ta   cài đặt  các dịch vụ là một phần của môi trường này. Trong trường hợp của  ta ,  ta  có một dịch vụ duy nhất được gọi là web . Dịch vụ này sử dụng hình ảnh nginx:alpine và  cài đặt  chuyển hướng cổng với chỉ thị ports . Tất cả các yêu cầu trên cổng 8000 của  server  (hệ thống mà bạn đang chạy Docker Compose) sẽ được chuyển hướng đến containers  web trên cổng 80 , nơi Nginx sẽ chạy.
 Chỉ thị volumes sẽ tạo một  dung lượng  chia sẻ giữa  server  và containers . Thao tác này sẽ chia sẻ folder  app local  với containers  và ổ đĩa sẽ được đặt tại /usr/share/nginx/html bên trong containers , sau đó sẽ overrides  lên root  tài liệu mặc định cho Nginx.
Lưu và đóng file .
  Ta  đã  cài đặt  một trang demo và một file  docker-compose.yml để tạo một môi trường  web server  được chứa đựng sẽ phục vụ nó. Trong bước tiếp theo,  ta  sẽ đưa môi trường này lên với Docker Compose.
Bước 3 - Chạy Docker Compose
 Với file  docker-compose.yml , giờ đây  ta  có thể thực thi Docker Compose để nâng cao môi trường của  ta . Lệnh sau sẽ  download  các  Docker image  cần thiết, tạo containers  cho dịch vụ web và chạy môi trường được chứa trong chế độ nền:
- docker-compose up -d 
 
Docker Compose trước tiên sẽ tìm kiếm hình ảnh đã xác định trên hệ thống local của bạn và nếu nó không thể tìm thấy hình ảnh, nó sẽ download hình ảnh từ Docker Hub. Bạn sẽ thấy kết quả như thế này:
OutputCreating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done Môi trường của bạn hiện đang hoạt động trong nền. Để xác minh containers đang hoạt động, bạn có thể chạy:
- docker-compose ps 
 
Lệnh này sẽ hiển thị cho bạn thông tin về các containers đang chạy và trạng thái của chúng, cũng như bất kỳ chuyển hướng cổng nào hiện đang diễn ra:
Output       Name                     Command               State          Ports         ---------------------------------------------------------------------------------- compose-demo_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp  Như vậy,  bạn có thể truy cập ứng dụng demo bằng cách trỏ trình duyệt  của bạn  tới localhost:8000 nếu bạn đang chạy bản demo này trên máy local   của bạn  hoặc your_server_domain_or_IP :8000 nếu bạn đang chạy bản demo này trên  server  từ xa.
Bạn sẽ thấy một trang như thế này:
 Bởi vì  dung lượng  chia sẻ mà bạn đã  cài đặt  trong file  docker-compose.yml giữ các file  folder  app của bạn đồng bộ hóa với root  tài liệu của containers . Nếu bạn thực hiện bất kỳ thay đổi nào đối với index.html , chúng sẽ được containers  tự động chọn và do đó được phản ánh trên trình duyệt của bạn khi bạn  reload  trang.
Trong bước tiếp theo, bạn sẽ thấy cách quản lý môi trường được chứa trong containers của bạn bằng các lệnh Docker Compose.
Bước 4 - Làm quen với Docker Soạn lệnh
 Bạn đã thấy cách  cài đặt  file  docker-compose.yml và  cài đặt  môi trường của bạn với docker-compose up .  Đến đây bạn  sẽ thấy cách sử dụng lệnh Docker Compose để quản lý và tương tác với môi trường được chứa trong containers  của bạn.
 Để kiểm tra log  được tạo bởi containers  Nginx của bạn, bạn có thể sử dụng lệnh logs :
- docker-compose logs 
 
Bạn sẽ thấy kết quả tương tự như sau:
OutputAttaching to compose-demo_web_1 web_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1  | /docker-entrypoint.sh: Configuration complete; ready for start up web_1  | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-" Nếu bạn muốn tạm dừng thực thi môi trường mà không thay đổi trạng thái hiện tại của containers , bạn có thể sử dụng:
- docker-compose pause 
 
OutputPausing compose-demo_web_1 ... done Để tiếp tục thực thi sau khi tạm dừng:
- docker-compose unpause 
 
OutputUnpausing compose-demo_web_1 ... done Lệnh stop sẽ chấm dứt việc thực thi containers , nhưng nó sẽ không phá hủy bất kỳ dữ liệu nào được liên kết với containers  của bạn:
- docker-compose stop 
 
OutputStopping compose-demo_web_1 ... done Nếu bạn muốn xóa các containers , mạng và ổ đĩa được liên kết với môi trường được chứa trong containers  này, hãy sử dụng lệnh down :
- docker-compose down 
 
OutputRemoving compose-demo_web_1 ... done Removing network compose-demo_default  Lưu ý  điều này sẽ không xóa hình ảnh cơ sở được Docker Compose sử dụng để tạo ra môi trường của bạn (trong trường hợp của  ta  là nginx:alpine ). Bằng cách này,  khi  nào bạn làm cho môi trường  của bạn  hoạt động trở lại với docker-compose up , quá trình sẽ nhanh hơn nhiều vì hình ảnh đã có  trên hệ thống. 
Trong trường hợp bạn cũng muốn xóa hình ảnh cơ sở khỏi hệ thống của bạn , bạn có thể sử dụng:
- docker image rm nginx:alpine 
 
OutputUntagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a Lưu ý : Vui lòng tham khảo hướng dẫn của  ta  về Cách cài đặt và sử dụng Docker để tham khảo chi tiết hơn về các lệnh Docker.
Kết luận
Trong hướng dẫn này, ta đã biết cách cài đặt Docker Compose và cài đặt môi trường được chứa trong containers dựa trên hình ảnh web server Nginx. Ta cũng đã biết cách quản lý môi trường này bằng cách sử dụng lệnh Soạn.
 Để có tài liệu tham khảo đầy đủ về tất cả các lệnh docker-compose có sẵn, hãy kiểm tra tài liệu chính thức .
Các tin liên quan
Cách chia sẻ dữ liệu giữa các container Docker2020-05-21
Cách sử dụng Traefik 1.7.21 làm Reverse Proxy cho Docker Containers trên CentOS 7
2020-05-12
Cách cài đặt Drupal với Docker Compose
2020-04-25
Cách xây dựng và triển khai ứng dụng Flask bằng Docker trên Ubuntu 18.04
2020-04-05
Como Conteinerizar um aplicativo Laravel para desenvolvimento com o Docker Compose em Ubuntu 18.04
2020-02-20
Cách tạo ứng dụng Node.js với Docker [Quickstart]
2020-02-06
Cách cài đặt Docker Compose trên Debian 10
2020-01-30
Cách chứa một ứng dụng Laravel để phát triển với Docker Compose trên Ubuntu 18.04
2020-01-23
Cách chứa một ứng dụng Laravel để phát triển với Docker Compose trên Ubuntu 18.04
2020-01-23
Lưu trữ một ứng dụng Ruby on Rails để phát triển với Docker Compose
2019-12-27

