Viblo CTF
+4

Tìm hiểu về Docker Compose CLI

Ở bài trước, chúng ta đã cùng nhau tìm hiểu về Docker Compose và cách config 1 docker compose file

Docker Compose là một công cụ giúp định nghĩa và run mutil-docker-container. Một compose sẽ được config bởi 1 file docker compose có định dạng YAML

Để có thể sử dụng Compose, chúng ta cần 3 bước:

  • Định nghĩa 1 docker file
  • Định nghĩa 1 docker compose file
  • Run docker-compose

Và để tiếp nối nội dung bài trước, trong bài này, chúng ta sẽ cùng tìm hiểu về Docker Compose CLI, xem làm thế nào để chúng ta có thể run docker compose này thành các container nhé 😃

1. Compose CLI environment variables

Đầu tiên, chúng ta cần biết một số biến môi trường phục vụ cho các docker composer CLI

COMPOSE_PROJECT_NAME

Config tên project, tên container

Giá trị này được thêm vào trước cùng với tên service khi khởi động.

Ví dụ: Nếu COMPOSE_PROJECT_NAME của bạn là myapp và nó bao gồm hai service là dbweb, thì compose sẽ tạo ra các containers có tên là myapp_db_1myapp_web_1 tương ứng.

Config này không bắt buộc. Nếu bạn không config, COMPOSE_PROJECT_NAME mặc định sẽ là tên của thư mục dự án

COMPOSE_FILE Chỉ định đường dẫn tới compose file.

Nếu bạn không config, thì giá trị này mặc định được hiểu là file docker-compose.yml trong thu mục hiện tại hoặc các thư mục cha cho đến khi không tìm thấy file tương ứng.

Để định nghĩa multiple Compose files, chúng ta có thể sử dụng dấu , để ngăn cách cách đường dẫn tới các files.

Ví dụ: COMPOSE_FILE=docker-compose.yml:docker-compose.prod.yml.

Để sử dụng ký tự ngăn cách khác, bạn có thể custom lại bằng cách sử dụng biến COMPOSE_PATH_SEPARATOR.

COMPOSE_API_VERSION

Docker API chỉ hỗ trợ các request từ phía client theo một version được chỉ định. Nếu bạn gặp lỗi client và server có version không giống nhau khi sử dụng docker-compose, bạn có thể giải quyết lỗi này bằng cách config giá trị cho biến này. Config COMPOSE_API_VERSION giúp khớp với phiên bản giữa client với server.

Biến này nhằm mục đích giải quyết tạm thời tình huống không khớp giữa version giữa client và server. Ví dụ như khi bạn có thể nâng cấp phía client nhưng cần phải đợi để nâng cấp server, hoặc ngược lại.

Tuy nhiên, giải pháp tạm thời này có thể sẽ ảnh hưởng tới một số tính năng của Docker. Các tính năng chính xác bị lỗi sẽ phụ thuộc vào phiên bản client và server bạn đang dùng. Vì vậy, nếu bạn gặp sự cố khi như vậy, hãy cố găng giải quyết sự không khớp version thông qua việc nâng cấp client và server, thay vì sử dụng biến môi trường này.

DOCKER_HOST

Chỉ định URL của docker daemon. Với Docker client, mặc định là unix: ///var/run/docker.sock.

DOCKER_TLS_VERIFY: enables TLS communication

DOCKER_CERT_PATH

Config đường dẫn đến các tệp ca.pem, cert.pemkey.pem được sử dụng để xác thực TLS. Giá trị mặc định cho biến này là ~/.docker.

COMPOSE_HTTP_TIMEOUT

Config timeout (tính bằng giây) tối đa cho request tới Docker daemon. Mặc định là 60 giây

COMPOSE_TLS_VERSION

Config TLS version sử dụng cho TLS communication với docker daemon. Mặc định là TLSv1. Các giá trị hỗ trợ cho biến này bao gồm: TLSv1, TLSv1_1, TLSv1_2.

COMPOSE_CONVERT_WINDOWS_PATHS

Bật chuyển đổi đường dẫn từ Windows-style sang Unix-style. Nếu dùng Docker Machine trên Windows, bạn phải bật biến này. Giá trị mặc định của biến này là 0. Các giá trị được hỗ trợ là: true hoặc 1 để bật và false hoặc 0 để tắt.

COMPOSE_PATH_SEPARATOR

Nếu được đặt, giá trị của biến môi trường COMPOSE_FILE được phân tách bằng ký tự này làm dấu phân cách đường dẫn, thay vì dấu , mặc định.

COMPOSE_FORCE_WINDOWS_HOST

Nếu được config, các volume declarations sử dụng cú pháp short-syntax sẽ được phân tích cú pháp theo đường dẫn máy chủ.

Các giá trị được hỗ trợ là: true hoặc 1 để bật và false hoặc 0 để tắt.

COMPOSE_IGNORE_ORPHANS

Nếu được config, Compose sẽ bỏ qua các containers bị lỗi. Các giá trị được hỗ trợ là: true hoặc 1 để bật và false hoặc 0 để tắt.

COMPOSE_PARALLEL_LIMIT

Định nghĩa số lượng thao tác tối đa mà Compose có thể thực thi song song. Giá trị mặc định là 64 và không nhận giá trị nhỏ hơn 2.

COMPOSE_INTERACTIVE_NO_CLI

Nếu được bật, Compose sẽ không sử dụng Docker CLI cho các lệnh runexec . Tùy chọn này không cho phép bật trên WIndow,

Các giá trị được hỗ trợ là: true hoặc 1 để bật và false hoặc 0 để tắt.

2. Command-line completion

Command-line completion là plugin hỗ trợ bạn viết command-line. Tùy thuộc vào những gì bạn đã nhập trên dòng lệnh, nó sẽ giúp bạn:

  • Gợi ý / hoàn thành các lệnh Compose có sẵn
  • Gợi ý / hoàn thành các options có sẵn với một command cụ thể
  • Gợi ý/ hoàn thành các đối số cho các tùy chọn đã chọn

Nếu bạn đã cài Zsh cho Terminal của bạn, thì command-line completion đã được cài đặt. Việc bạn cần làm là thêm dockerdocker-compose vào list plugins của Zsh tại ~/.zshrc

plugins=(... docker docker-compose
)

Ngược lại, bạn có thể cài đặt nó theo hướng dẫn chi tiết tại đây.

3. Docker Compose command-lines

docker-compose build

Dùng để build các services

Usage: build [options] [--build-arg key=val...] [SERVICE...]

Options:
    --build-arg key=val     Set build-time variables for services.
    --compress              Compress the build context using gzip.
    --force-rm              Always remove intermediate containers.
    -m, --memory MEM        Set memory limit for the build container.
    --no-cache              Do not use cache when building the image.
    --no-rm                 Do not remove intermediate containers after a successful build.
    --parallel              Build images in parallel.
    --progress string       Set type of progress output (`auto`, `plain`, `tty`).
                            `EXPERIMENTAL` flag for native builder.
                            To enable, run with `COMPOSE_DOCKER_CLI_BUILD=1`)
    --pull                  Always attempt to pull a newer version of the image.
    -q, --quiet             Don't print anything to `STDOUT`.

Các services được built 1 lần, sau đó được gắn tag, mặc định dạng project_service.

Ví dụ: project name là myapp, service là mysql, sau khi build sẽ có tag là myqpp_mysql

Nếu bạn thay đổi Dockerfile của một service hoặc nội dung của thư mục build của nó, hãy rebuild service bằng lệnh docker-compose build

docker-compose config

Lệnh này dùng để validate và xemCompose file.

Usage: config [options]

Options:
    --resolve-image-digests  Pin image tags to digests.
    --no-interpolate         Don't interpolate environment variables.
    -q, --quiet              Only validate the configuration, don't print
                             anything.
    --services               Print the service names, one per line.
    --volumes                Print the volume names, one per line.
    --hash="*"               Print the service config hash, one per line.
                             Set "service1,service2" for a list of specified services
                             or use the wildcard symbol to display all services.

docker-compose create

Lệnh này đã không còn hiệu lực. Thay vào đó, bạn có thể thay thế bằng lệnh

$ docker-compose up --no-start

docker-compose down

Lệnh dừng và xóa các containers, networks, volumes, và images được tạo bởi lệnh up.

$ docker-compose down [options]

Mặc định, những thứ bị xóa gồm:

  • Containers của các services được định nghĩa trong tệp Compose
  • Networks được định nghĩa trong phần networks của tệp Compose
  • Các default netwwork, nếu chúng từng được sử dụng

Networks và volumes được định nghĩa external sẽ không bị xóa.

docker-compose events

Usage: events [options] [SERVICE...]

Options:
    --json      Output events as a stream of json objects

Lệnh dùng để stream các sự kiện cho các containers của project.

docker-compose exec

Usage: exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]

Options:
    -d, --detach      Detached mode: Run command in the background.
    --privileged      Give extended privileges to the process.
    -u, --user USER   Run the command as this user.
    -T                Disable pseudo-tty allocation. By default `docker-compose exec`
                      allocates a TTY.
    --index=index     index of the container if there are multiple
                      instances of a service [default: 1]
    -e, --env KEY=VAL Set environment variables (can be used multiple times,
                      not supported in API < 1.25)
    -w, --workdir DIR Path to workdir directory for this command.

Lệnh này tương đương với lệnh thực thi image docker exec. Với lệnh này, bạn có thể chạy các lệnh tùy ý trong các services của bạn. Mặc định, các lệnh được cấp phát một TTY, vì vậy bạn có thể sử dụng một lệnh docker-compose exec web sh để tương tác với service.

docker-compose help

$ docker-composer help [COMMAND]

Hiển thị chi tiết và hướng dẫn sử dụng cho một lệnh.

docker-compose kill

Usage: kill [options] [SERVICE...]

Options:
    -s SIGNAL         SIGNAL to send to the container.
                      Default signal is SIGKILL.

Lệnh dùng để kill các container. Để buộc dừng containers đang chạy, chúng ta có thể sử dụng options -s với giá trị là SIGKILL

docker-compose logs

Usage: logs [options] [SERVICE...]

Options:
    --no-color          Produce monochrome output.
    -f, --follow        Follow log output.
    -t, --timestamps    Show timestamps.
    --tail="all"        Number of lines to show from the end of the logs
                        for each container.

Hiển thị logs của các services

docker-compose pause

Usage: pause [SERVICE...]

Tạm dừng các container đang chạy của một service. Bạn có thể hủy bỏ lệnh tạm dừng bằng docker-compose unpause.

docker-compose port

Usage: port [options] SERVICE PRIVATE_PORT

Options:
    --protocol=proto  tcp or udp [default: tcp]
    --index=index     index of the container if there are multiple
                      instances of a service [default: 1]

Liệt kê ra các public port cho một port binding.

docker-compose ps

Usage: ps [options] [SERVICE...]

Options:
    -q, --quiet          Only display IDs
    --services           Display services
    --filter KEY=VAL     Filter services by a property
    -a, --all            Show all stopped containers (including those created by the run command)

Liệt kê danh sách containers

docker-compose pull

Usage: pull [options] [SERVICE...]

Options:
    --ignore-pull-failures  Pull what it can and ignores images with pull failures.
    --parallel              Deprecated, pull multiple images in parallel (enabled by default).
    --no-parallel           Disable parallel pulling.
    -q, --quiet             Pull without printing progress information
    --include-deps          Also pull services declared as dependencies

Dùng để pull một image được config cho service trong Compose file và không khởi động container sau khi pull image

docker-compose push

Usage: push [options] [SERVICE...]

Options:
    --ignore-push-failures  Push what it can and ignores images with push failures.

Pushes images for services to their respective registry/repository. The following assumptions are made: You are pushing an image you have built locally You have access to the build key VIETNAMESE Dùng để push các images cho services vào repo tương ứng của chúng.

Lưu ý:

  • Bản build Image mà bạn muốn push là một bản local
  • Bạn phải có quyền truy cập

docker-compose restart

Usage: restart [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.
                             (default: 10)

Restart các container đang chạy hoặc đang dừng.

If you make changes to your docker-compose.yml configuration these changes are not reflected after running this command.

Nếu bạn cập nhật Compose file, những config được thay đổi sẽ không được cập nhật khi bạn chạy lệnh này. Để đảm bảo config được cập nhật, bạn hãy xem lại mục config restart của Docker Compose File.

docker-compose rm

Usage: rm [options] [SERVICE...]

Options:
    -f, --force   Don't ask to confirm removal
    -s, --stop    Stop the containers, if required, before removing
    -v            Remove any anonymous volumes attached to containers
    -a, --all     Deprecated - no effect.

Xóa các service containers đã bị tắt.

Mặc định, các volumes ẩn dang sẽ không bị xóa. Bạn có thể override bằng option -v.

Việc chạy lệnh không có tùy chọn sẽ xóa các container đã tắt được tạo bởi docker-compose up hoặc docker-compose run

docker-compose run

Usage:
    run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...]
        SERVICE [COMMAND] [ARGS...]

Ví dụ: lệnh sau khởi động dịch vụ web và chạy bash dưới dạng lệnh của nó

$ docker-compose run web bash

docker-compose scale

Lệnh này đã không còn hiệu lực. Thay vào đó, hãy sử dụng lệnh docker-cpmose up --scale.

docker-compose start

Usage: start [SERVICE...]

Starts các containers cho một service.

docker-compose stop

Usage: stop [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.
                             (default: 10)

Stop các containers đang chạy mà không xóa chúng. Để khởi động lại các containers đã stop, bạn có thể sử dụng docker-compose start.

docker-compose top

Usage: top [SERVICE...]

Hiển thị các tiến trình đang chạy.

docker-compose unpause

Usage: unpause [SERVICE...]

Hủy việc pause một service

docker-compose up

$ docker-composer up [options] [--scale SERVICE=NUM...] [SERVICE...]

Builds, (re)creates, starts và gắn container cho service.

Trên đây là một số tìm hiểu của mình về Docker Compose CLI. Hi vọng bài viết này sẽ có ích với bạn và hẹn gặp lại bạn ở những bài viết tiếp theo.

Tài liệu tham khảo Docker Compose CLI


All Rights Reserved