Okay, chúng ta hãy phá vỡ tiến hóa Docker này.Thật hoang dã khi mọi thứ thay đổi.
Nhớ lại khi Docker cảm thấy như... đấu tranh với một con gà trống nhát? Nhiều lệnh, nhiều khái niệm. Xây dựng, chạy, đẩy, kéo, khối lượng, mạng... đầu tôi đang xoay.nên, nhưng nó luôn luôn cảm thấy một chút nhạt nhẽo, một chút... đầy mài mòn. lịch sử cuối cùng của tôi chỉ là một mớ hỗn độndocker ps -a
Và cố gắng tuyệt vọng để nhớ rằngmộtlệnh từ tuần trước.
Sau đó, từ từ, mọi thứ bắt đầu nhấp chuột. Không phải là một khoảnh khắc Eureka lớn, mà là một loạt các khám phá nhỏ "aha!" Các thủ thuật nhỏ, tối ưu hóa, điều chỉnh quy trình làm việc. Hacks, tôi đoán? Và thành thật mà nói, họ đã xâm nhập vào thói quen hàng ngày của tôi rất nhiều đến nỗi tôi hầu như không nghĩ về họ nữa.Làm thế nào tôi làm những điều.
Dưới đây là những game-changers bị mắc kẹt:
Tên sản phẩm: Terminal Aliases: The Sanity Savers
Chiến thắng lớn đầu tiên?Aliases.♂️ Tại sao tôi đã dành nhiều tháng để gõdocker-compose up -d --build
hoặcdocker ps
Lặp đi lặp lại một lần nữa? thiết lập biệt danh đơn giản trong.bashrc
hoặc.zshrc
Đó là một tiết lộ.
# My sanity savers
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcb='docker-compose build'
alias dcr='docker-compose run --rm' # For running one-off commands
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dip='docker image prune -f' # Prune dangling images
alias dvp='docker volume prune -f' # Prune unused volumes
alias dsp='docker system prune -af' # The big cleanup! 💥
chỉ typingdcu
thay vì toàn bộ shebang? Oh, milliseconds tiết kiệm! Nó nghe có vẻ tầm thường, nhưng nhân nó bằng hàng chục lần một ngày ... nó bổ sung. ngón tay của tôi cảm ơn tôi. ít gõ, ít gõ, nhiều luồng.
Nhận cheatsheet cuối cùng của docker từ đây :Chiếc Docker cheatsheet
2.The Mighty.dockerignore
Lời bài hát: Slimming Down Builds
Sau đó đến những.dockerignore
Lời bài hát: Another "Duh" Moment I Knew About.gitignore
dĩ nhiên, nhưng ban đầu tôi không nhận ra tầm quan trọng của.dockerignore
is for build performance. My early Docker builds werechậm như vậyTại sao?Bởi vì bối cảnh xây dựng đã gửiTất cảTải về Docker Daemonnode_modules
, nhật ký, tệp tạm thời, tác phẩm xây dựng địa phương... tất cả mọi thứ!
Tạo một đúng.dockerignore
file, liệt kê tất cả các rác tôi không cầnbên trongĐột nhiên, việc xây dựng nhanh hơn.Các hình ảnh nhỏ hơn (đôi khi đáng kể như vậy).Cảm giác giống như việc đặt một cái mù trên Docker, nói với nó: "Chỉ tập trung vàonày, bỏ qua phần còn lại." ít bối rối, vòng phản hồi nhanh hơn. nụ hôn của đầu bếp! 👌
Xây dựng nhiều giai đoạn: Lean, Mean Production Machines ➡️
Multi-stage builds... ok, cái này cảm thấy hơi tiến bộ hơn lúc đầu. Khái niệm là tuyệt vời, tuy nhiên.
- Bước 1: Sử dụng một hình ảnh cơ sở với tất cả các công cụ xây dựng, biên dịch, SDK và phụ thuộc cần thiết để tạo ra hiện vật ứng dụng (chẳng hạn như một phiên bản nhị phân được biên soạn hoặc JavaScript được đóng gói).
- Giai đoạn 2: Bắt đầu một hình ảnh cơ sở mới, sạch sẽ, tối thiểu (như alpine hoặc không tin tưởng).
- Sao chép: Chỉ sao chép hiện vật cuối cùng từ giai đoạn đầu tiên vào giai đoạn thứ hai sạch sẽ này.
Kết quả? hình ảnh sản xuất nhỏ! Thay vì vận chuyển hình ảnh bị sưng lên với các công cụ xây dựng và sự phụ thuộc của nhà phát triển (cũng là rủi ro bảo mật!), Tôi vận chuyển hình ảnh lean chứaChỉPhải mất một chút để bao bọc đầu tôi xung quanh ngữ pháp, nhưng wow, sự khác biệt về kích thước hình ảnh và tư thế bảo mật là rất lớn.
Docker Compose Overrides: Taming Environments ️
Chúng ta hãy nói chuyệnDocker Compose override
file. quản lý các môi trường khác nhau đã từng là một nỗi đau. Dev cần các khối lượng được lắp ráp để tải lại mã sống, cổng debug mở. Prod cần các biến môi trường khác nhau, có lẽ giới hạn tài nguyên nghiêm ngặt hơn, có lẽ là một điểm nhập cảnh khác. cố gắng quản lý điều này với mộtdocker-compose.yml
là lộn xộn, liên quan đến các phần bình luận hoặc phức tạpif
Điều kiện dựa trên các biến môi trường.
Khám phádocker-compose.override.yml
là pure bliss. Bạn có cơ sở của bạndocker-compose.yml
với cấu hình chung. Sau đó, bạn tạodocker-compose.override.yml
(Những gì Git thường bỏ qua thông qua.gitignore
(Thuyết điểm) - Tác dụng của các công cụ phân loại, phân loại, phân loại các công cụ phân loại, phân loại các công cụ phân loại (override
Bạn thậm chí có thể có các tập tin cụ thể nhưdocker-compose.prod.yml
Và sử dụng các-f
Lá cờ :docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
. tách rời mối quan tâm sạch sẽ. không còn sự cố tình của các thiết lập dev! hallelujah!
5.Thường xuyên làm sạch: Giữ hệ thống Tidy ✨
Cuối cùng, thói quen củaregular cleanupDocker có thể tích lũyquá nhiềuDangling hình ảnh (lớp untagged từ build trước đó), khối lượng chưa sử dụng, ngăn chặn container, cache build cũ ... không gian đĩa của tôi đã từng biến mất một cách bí ẩn.
Bước vào nhịp điệu của việc chạy định kỳdocker system prune -af
(cách tiếp cận hung hăng) hoặc cách tiếp cận nhắm mục tiêudocker image prune
,docker volume prune
,docker network prune
vàdocker builder prune
Nó giữ cho mọi thứ chạy trơn tru, ngăn chặn các vấn đề bộ nhớ cache kỳ lạ ("tại sao sự thay đổi của tôi không xuất hiện?!"), và giải phóng các gigabytes quý giá.dsp
(Alias của tôi chodocker system prune -af
) bây giờ là một thói quen thỏa mãn, gần như trị liệu.
Vì vậy, vâng, những điều này không chỉ là 'hacks' nữa. Chúng được bắt rễ. Chúng là bộ nhớ cơ bắp. Aliases bay từ ngón tay của tôi mà không suy nghĩ..dockerignore
là một trong những tập tin đầu tiên tôi tạo ra. nhiều giai đoạn xây dựng là mặc định cho bất cứ điều gì có khả năng sống. Compose overrides xử lý sự khác biệt môi trường trơn tru.
Docker đã đi từ là con gà trống khó chịu để một trợ lý mạnh mẽ, hợp lý hóa. Nó đi ra khỏi cách của tôi bây giờ. xây dựng là nhanh hơn, triển khai là mượt mà hơn, không gian đĩa của tôi là hạnh phúc hơn, và thành thật mà nói,Tôi làhạnh phúc hơn bởi vì có ít ma sát hơn. Nó không chỉ là về bản thân Docker; nó là về cách làm chủ những chi tiết nhỏ này làm trơn tru toàn bộ quy trình phát triển và triển khai của tôi. nó chắc chắn đã trở thành một phần của cuộc sống của tôi, hoặc ít nhất, cuộc sống kỹ thuật số của tôi.