Tìm hiểu docker phần 5

Docker compose cung cấp một cách đơn giản để có thể chạy được nhiều container up và chạy chúng với effort một cách tối thiểu nhất. Nó thật là dễ dàng được tiếp cận.

File configuration không khó để làm việc. Chúng mình sẽ đi tìm hiểu các mục sau đây để chúng ta có thể tiếp cận được docker compose nhé

  • Getting started with Docker Compose
  • The docker-compose.yml file: file này chúng ta sẽ viêt mã config , nó sẽ đảm nhiệm chịu trách nhiệm lấy images. up image và chạy các container lên.
  • Docker Compose Commands
  • Docker Compose in Action
  • Setting Up Development Environment Services
  • Managing Development Environment

Getting started with Docker Compose

Introduction

Docker compose cho phép bạn có thể quản lý nhiều container. Nó thật hữu dụng cho môi trường development và staging, và có thể trên production. Docker có những option khác mà bạn có thể sử dụng.

Các tính năng của Docker Compose:

  • Start, stop và rebuild services
  • View the status of running services
  • Stream the log output of running services
  • Run a one-off command on a service

The Need for Docker Compose

Như các bạn biết đấy, ví dụ trên cho thấy khi cái được redis thì chúng ta cần cài node server mà muốn cài được node server thì chúng ta phải cài nginx. Tương tự cũng đối với mongDB. Bạn có thể thấy chúng ta sẽ có 6 container, nêu chúng ta quản lý bằng tay thì sẽ xảy ra một số vấn đề và nó không được hiểu quả cho lắm. Vì thế docker compose giúp chúng ta có thể quản lý chúng một cách dễ dàng. Vì thế docker compose có một file mà chúng ta có thể gọi là docker-compose.yml . File này bạn có thể định nghĩa tất cả những service và thậm chí những mỗi quan hệ giữa các service này trong đó.

Docker Compose Workflow

Vậy qua đó mình đã giới thiệu về docker compose qua một vài ý ở trên, phần tiếp theo mình sẽ giới thiệu docker-compose.yml file nhé.

Docker Compose File

Trước hết thì docker compose file để tìm tất cả các service. Nó sẽ giống như các phiên bản của các máy chủ web khác nhau mà bạn đang chạy: PHP, Java, , mysql, sql server, ... Chúng ta có thể định nghĩa chúng trong docker-compose file , tải chúng lên và chạy. Trong quá trình build thì tất nhiên sẽ sinh ra các image, sau đó chúng ta có thể sử dụng nó để tạo container. Nó thật là đơn giản đúng không các bạn. Bạn có thể ném cho ai đó docker-compose.yml này và sau đó với vài câu lệnh terminal đơn giản bạn của docker, bạn có thể có pull được tất cả các image và chạy các container để phục vụ cho việc coding của bạn chỉ trong vài phút mà bạn không cần mất công sức cài từng image một.

Vậy chúng ta cần định nghĩa những gì trong một file docker-compose.yml này. Đầu tiên chúng ta sẽ thấy ở ngay trên đầu đó chính là version. Cái này có thể thay đổi, chúng ta có rất nhiều version khác nhau nhưng hiện tại được chấp nhận hết. Chúng ta có thể định nghĩa thêm volumes, network ở trong phần service.

Key Service Configuration Options

  • build
  • environment
  • image
  • network
  • port
  • volumes
version: '2'
services:
    node:
        build:
            context: .
                dockerfile: node.Dockerfile
        networks: -nodeapp-network
            mongodb:
                image:mongo
        networks:
            -nodeapp-network
        networks:
            nodeapp-network
                driver: bridge

Docker Compose Commands

  • docker-compose build
  • docker-compose up:
  • docker-compose down
  • docker-compose logs
  • docker-compose ps
  • docker-compose stop
  • docker-compose start

Đâu tiên để build service, chúng ta có thể làm việc này thông qua docker compose tool và chúng ta sẽ run câu lệnh build docker-compose buildnày. Bây giờ một lần nữa chúng ta có sẵn các image, chúng ta có thể sử dụng docker-compose up để start và chạy những image này lên. Chúng ta có thể xem log thông qua docker-compose logs, xem list các container đang chạy như service bằng lệnh docker-compose ps. Chúng ta có thể stop tất các các service khác nhau và sau đó start chúng thông qua docker-compose stop, docker-compose start.

Example

Mình sẽ lấy ví dụ chúng ta làm việc với nodejs thì bộ đôi node và mongodb sẽ luôn là một cặp. Vì thể trong project nodejs chúng ta có thể tạo 1 file docker-compose.yml như sau để có thể khời tạo và chạy các service node và mongdb.

Sau đó chúng ta sẽ bật terminal lên và nhập command docker-compose build để build . Kết quả chúng ta sẽ được như này thì chúng ta đã thành công.

Sau đó chúng ta docker-compose up để pull image và tạo network đã định nghĩa trong file docker-compose.yml về.

Chúng ta có thể sử dụng câu lệnh docker ps để xem những image nào đang có nhé. Để loại bỏ hết tất cả các service đang chạy thì chúng ta dùng docker-compose down. Qua ví dụ chỉ với file docker-compose.yml với một vài câu lệnh của docker-compose chúng ta đã start các service một cách nhanh chóng. Giả sử mà chúng ta không dùng docker-compose thì chúng ta sẽ dùng những câu lệnh sau để start.

Đầu tiên custome image node từ docker file -- node.dockerfile

docker build -f node.dockerfile -t node

Tiếp theo chúng ta sẽ build mongo container với custom name

docker run -d --name my-mongodb mongo

Tiếp đến chúng ta sẽ tạo network để kết nối 2 container node vs mongo với nhau.

Nếu dùng Legacy Linking

docker run -d -p 3000:3000 --link my-mongodb --name nodeapp node

Còn nếu dùng Custom Bridge Network

Tạo network với tên isolated_network
docker network create --driver bridge isolated_network
Add mongodb vào network
docker run -d --net=isolated_network --name mongodb mongo
Add node express site vào network
docker run -d --net=isolated_network --name nodeapp -p 3000:3000 node

Overview

Bài viết của mình muốn giới thiệu qua tổng quan docker-compose nó là cái gì và cách làm việc cơ bản của nó ra sao. Trong bài viết tiếp theo mình sẽ set up môi trường để chúng ta có thể chạy được project thông qua docker-compose nhé. Mình xin cảm ơn các bạn đã đọc bài viết của mình.

Reference

https://docs.docker.com/compose/gettingstarted/