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