Cách cài đặt và sử dụng Docker Compose trên Ubuntu 14.04
Docker là một công cụ tuyệt vời, 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 cuối cùng group Docker quyết định tạo ra version của riêng họ dựa trên nguồn Fig. Họ gọi nó là Docker Compose . Nói tóm lại, nó làm cho việc xử lý các quy trình điều phối của các containers Docker (chẳng hạn như khởi động, tắt và cài đặt liên kết nội bộ containers và dung lượng ) thực sự dễ dàng.
Đến cuối bài viết này, bạn sẽ cài đặt Docker và Docker Compose và hiểu cơ bản về cách hoạt động của Docker Compose.
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 nên lấy 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 theo mặc định, 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ư bất kỳ phương tiện giao tiếp nào với nó qua mạng. Không cần phải nói, điều này làm cho việc cấu hình và làm việc với hình ảnh chạy bên trong containers Docker theo mặc định trở nên khó khăn.
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 muốn đảm bảo các file log của bạn được treo xung quanh, 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 , mà ta sẽ khám phá trong bài viết về data volumes Docker .
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à chuyển tiếp cổng để đưa WordPress ra 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:
- Ubuntu 14.04 Server
- User không phải root có quyền sudo ( Cài đặt server ban đầu với Ubuntu 14.04 giải thích cách cài đặt điều này.)
Bước 1 - Cài đặt Docker
Đầu tiên, hãy cài đặt Docker nếu bạn chưa cài đặt. Cách nhanh nhất để cài đặt Docker là download và cài đặt lệnh cài đặt của chúng (bạn sẽ được yêu cầu nhập password sudo).
- wget -qO- https://get.docker.com/ | sh
Lệnh trên download và thực thi một lệnh cài đặt nhỏ do group Docker viết. Nếu bạn không tin tưởng các tập lệnh của bên thứ ba hoặc muốn biết thêm chi tiết về những gì tập lệnh đang thực hiện, hãy xem các hướng dẫn trong hướng dẫn DigitalOcean Docker hoặc tài liệu cài đặt riêng của Docker.
Làm việc với Docker là một khó khăn nếu user của bạn không được cấu hình chính xác, vì vậy hãy thêm user của bạn vào group docker
bằng lệnh sau.
- sudo usermod -aG docker $(whoami)
Đăng xuất và đăng nhập từ server của bạn để kích hoạt các group mới của bạn.
Lưu ý: Để tìm hiểu thêm về cách sử dụng Docker, hãy đọc phần Cách sử dụng Docker của Cách cài đặt và sử dụng Docker: Bắt đầu .
Bước 2 - Cài đặt Docker Compose
Đến đây bạn đã cài đặt Docker, hãy tiếp tục và cài đặt Docker Compose. Trước tiên, hãy cài đặt python-pip
làm yêu cầu :
- sudo apt-get -y install python-pip
Sau đó, bạn có thể cài đặt Docker Compose:
- sudo pip install docker-compose
Bước 3 - 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. Bây giờ ta đã cài đặt Docker Compose, hãy thử nghiệm nó với ví dụ thực sự đơn giản này.
Đầ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ờ, tạo file YAML bằng editor yêu thích của bạn ( ta sẽ sử dụng nano):
- nano docker-compose.yml
Đưa các nội dung sau vào file , lưu file và thoát khỏi editor :
my-test: image: hello-world
Dòng đầu tiên sẽ được sử dụng như 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 . Hình ảnh sẽ được download từ repository Docker Hub chính thức.
Khi vẫn ở trong folder ~/hello-world
, hãy thực hiện lệnh sau để tạo containers :
- docker-compose up
Đầu ra phải bắt đầu bằng những thứ sau:
Output of docker-compose upCreating 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 |
Đầu ra sau đó giải thích những gì Docker đang làm:
- Ứng dụng khách Docker đã liên hệ với trình Docker.
- Docker daemon đã lấy hình ảnh "hello-world" từ Docker Hub.
- Daemon Docker đã tạo một containers mới từ hình ảnh đó chạy file thực thi tạo ra kết quả bạn hiện đang đọc.
- Docker daemon đã stream kết quả đó tới ứng dụng client Docker, ứng dụng này sẽ gửi nó đến terminal của bạn.
Nếu quá trình không tự thoát, hãy nhấn CTRL-C
.
Thử nghiệm đơn giản này 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. Bài viết Cách cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.04 cho biết cách sử dụng Docker Compose để chạy ba containers dưới dạng một group ứng dụng.
Bước 4 - Học các lệnh docker composer
Hãy xem xét các lệnh 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 containers bên trong folder của nó.
Lúc này, ta đã chạy docker-compose up
của riêng mình và sử dụng CTRL-C
để tắt nó. Đ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 phải là lý tưởng, khi môi trường production (thực tế) , bạn cầ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à chỉ cần 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
Ví dụ: phần sau cho thấy rằng containers helloworld_my-test_1
bị dừng:
Output of `docker-compose ps` Name Command State Ports ----------------------------------------------- helloworld_my-test_1 /hello Exit 0
Một containers đang chạy sẽ hiển thị trạng thái Up
:
Output of `docker-compose ps` 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
được 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ông phải là folder chứa containers Docker và file .yml
, nó sẽ phàn nàn và không hiển thị cho bạn các containers của bạn:
Output from wrong directory 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, fig.yml, fig.yaml
Bước 5 - Truy cập Hệ thống file containers Docker (Tùy chọn)
Nếu bạn cần làm việc trên dấu nhắc lệnh bên trong containers , bạn có thể sử dụng lệnh thực thi của docker exec
.
Xin chào thế giới! ví dụ thoát sau khi nó được chạy, vì vậy ta cần khởi động một containers sẽ tiếp tục chạy để sau đó ta có thể sử dụng trình docker exec
để truy cập hệ thống file cho containers . Hãy cùng xem qua hình ảnh Nginx từ Docker Hub.
Tạo một folder mới cho nó và thay đổi nó:
- mkdir ~/nginx && cd $_
Tạo file docker-compose.yml
trong folder mới của ta :
- nano docker-compose.yml
và dán như sau:
nginx: image: nginx
Lưu file và thoát. Ta chỉ cần khởi động containers Nginx như một quá trình bằng lệnh sau:
- docker-compose up -d
Hình ảnh Nginx sẽ được download và sau đó containers sẽ được khởi động ở chế độ nền.
Bây giờ ta cần CONTAINER ID
cho containers . Danh sách tất cả các containers đang chạy:
- 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 e90e12f70418 nginx "nginx -g 'daemon off" 6 minutes ago Up 5 minutes 80/tcp, 443/tcp nginx_nginx_1
Lưu ý: Chỉ các containers đang chạy được liệt kê bằng lệnh docker ps
.
Nếu ta muốn tạo ra một sự thay đổi hệ thống file bên trong container này, ta muốn lấy ID của nó (trong ví dụ này e90e12f70418
) và sử dụng docker exec
để bắt đầu một vỏ bên trong container:
- docker exec -it e90e12f70418 /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. Các tùy chọn /bin/bash
mở một shell bash cho containers đang chạy. Đảm bảo sử dụng ID cho containers của bạn.
Bạn sẽ thấy một dấu nhắc bash cho containers tương tự như:
root@e90e12f70418:/#
Từ đây, bạn có thể làm việc từ dấu nhắc lệnh. 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. Một lưu ý khác là 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 xuất hiện.
Kết luận
Tuyệt vời, nó bao gồm các khái niệm cơ bản về Docker Compose và cách cài đặt và chạy nó. Hãy xem hướng dẫn Triển khai Wordpress và PHPMyAdmin với Docker Compose trên Ubuntu 14.04 để biết ví dụ phức tạp hơn về cách triển khai một ứng dụng với Docker Compose.
Để có danh sách đầy đủ các tùy chọn cấu hình cho file docker-compose.yml
hãy tham khảo phần Tham khảo file Soạn .
Các tin liên quan
Cách cài đặt Wordpress và PhpMyAdmin với Docker Compose trên Ubuntu 14.042015-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
Cách tập trung log Docker của bạn với Fluentd và ElasticSearch trên Ubuntu 14.04
2015-03-30
Hệ sinh thái Docker: Giới thiệu về các thành phần chung
2015-02-01
Hệ sinh thái Docker: Tổng quan về Containerization
2015-02-01
Hệ sinh thái Docker: Lập lịch và Điều phối
2015-02-01
Hệ sinh thái Docker: Khám phá dịch vụ và Cửa hàng cấu hình phân tán
2015-02-01
Hệ sinh thái Docker: Mạng và Truyền thông
2015-02-01
Cách thiết lập registry Docker riêng trên Ubuntu 14.04
2014-10-15