Tailing logs
Thỉnh thoảng ta muốn truy cập logs của docker nhanh chóng thì có thể sử dụng lệnh dưới đây:
1 2 | $ docker logs -t --tail 1000 [container_name or container_id] 2>&1 | grep -i error |
Ố ồ chờ tý
Trong docker-compose, đôi khi ta muốn chạy nhiều service mà service A phụ thuộc vào service B chạy xong mới chạy. Nếu về thứ tự chạy thì dùng depend_on, còn phụ thuộc chạy xong hoàn toàn (tức tính available -sẵn dùng) thì ta sẽ phải dùng cách khác.
Dưới đây là một ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | version: '3' networks: test_net: services: webserver: image: nginx:alpine command: sh -c 'sleep 10 && nginx -g "daemon off;"' networks: - test_net test: image: alpine command: sh -c 'while ! nc webserver 80; do echo '.' && sleep 1; done && echo "Webserver up and running, bye bye..!"' networks: - test_net |
Chạy cron tasks trong docker Alpine container
Docker Alpine là một Docker image nhẹ phổ biến có chứa một danh sách các tiện ích Linux cơ bản. Trong đó có crond.
Để chạy các nhiệm vụ của theo định kỳ, ta có thể gắn các tập lệnh của mình dựa trên thời điểm ta muốn thực hiện nó. Trong ví dụ này, các tập lệnh được đặt trong cron_tasks_folder sẽ được thực thi hàng giờ
1 2 3 4 5 6 7 8 | version: '3' services: cron: image: alpine:3.6 command: crond -f -l 8 volumes: - ./cron_tasks_folder:/etc/periodic/hourly/:ro |
Volumes trong docker-compose
Host mounted volumes
1 2 | Syntax: /host/path:/container/path |
/host/path : có thể là đường dẫn tương đối hoặc tuyệt đối. Nên sử dụng loại volume này khi đang chạy cơ sở hạ tầng (container) trong một máy duy nhất (sử dụng Docker hoặc docker compose).
Named volumes
1 2 | Syntax: named_volume_name:/container/path |
Với loại volumes này có thể sử dụng trên một máy hoặc mở rộng trên một cụm máy (sử dụng Docker, docker composer hoặc docker swarm).
Docker volumes có thể là internal hoặc external. Internal volumes có phạm vi trong docker-compose file trong khi external thì cần khai báo trước khi sử dụng:
1 2 | $ docker volume create my_volume |
Sử dụng .dockerignore
Khái niệm về .dockerignore tương tự .gitignore nhưng lần nó được sử dụng để xây dựng image Docker tốt hơn. Với tệp này, ta có thể tránh tải lên các tệp không cần thiết làm giảm thời gian build và kích thước image.
Tạo một file tên là .dockerignore, thêm vào các config file, tệp ta không muốn chúng được thêm vào image.
Ví dụ 1:
1 2 3 4 5 | $ cat .dockerignore logs/ MY_SECRET_PASSWORDS.txt .dockerignore |
Ví dụ 2 dưới đây loại trừ tất cả file và thư mục, ngoại trừ thư mục src:
1 2 3 4 | $ cat .dockerignore ** !src |
Truyền các biến môi trường vào docker
Có 2 option là -e và –env.file (khi muốn truyền nhiều biến môi trường)
1 2 3 4 | $ docker run -it -e TEST=1234 --env TEST1=3456 --rm alpine /bin/ash - write in terminal echo $TEST - you should have result '1234' |
Tham khảo thêm tại đây
Backup of container
Đôi khi ta cần backup một container đang chạy và đem nó sang một máy khác để chạy
1 2 3 4 5 | $ dokcer ps -a // sau đó lấy container_id hoặc container_name $ docker commit -p <container_id> <your_backup_name> $ docker images // xuất hiện image mới tên là <your_backup_name> $ docker save -o <container_file>.tar <your_backup_name> |
Sau khi copy file .tar bên trên sang máy khác có thể restore nó
1 2 | $ docker load -i <container_file>.tar |
thực hiện list docker images trên máy host vừa copy sang sẽ thấy một image mới vừa được restore từ file .tar kia
Minimal base image nhất có thể
Đôi khi không cần thiết phải tạo image từ “ubuntu” mà có thể tạo các image từ các image base nhỏ hơn như debian, alpine, scratch.
ubuntu -> debian -> alpine -> scratch
1 2 3 4 5 6 | FROM scratch ..... or FROM alpine .... |
Chạy nhiều container
Hãy nghĩ ngay tới docker-compose.
Xem docker internal files
Đầu tiên lấy docker container_id qua lệnh sau
1 2 | $ docker ps -a |
sau đó thực hiện như bên dưới
1 2 3 4 5 6 | $ sudo su $ cd /var/lib/docker $ ls -list // show tất cả các container $ cd /containers/<CONTAINER_ID>+<OTHER_HASH_NAME> $ ls -list // show tất cả file của container |
Hiển thị thông tin với –format
Đôi khi thông tin hiển thị rườm rà, ta có thể config lại cho ngắn gọn với tham số –format rồi sort và in ra dạng table chẳng hạn
1 2 | docker images --format '{{.Size}}t{{.Repository}}:{{.Tag}}t{{.ID}}' | sort -h | column -t |