Dựa trên các nhận xét, tôi sẽ cố gắng trả lời tại đây.
Tôi tin rằng bạn nên đi với hình ảnh 11 núi cao của postgres. Và tôi sẽ cố gắng giải thích lý do tại sao ở đây.
Hình ảnh docker chính thức đi kèm với một số lợi ích mà bạn nên cân nhắc trước khi bắt đầu.
- Đường dẫn nâng cấp dễ dàng - khi một bản sửa đổi mới của ứng dụng được bao bọc trong hình ảnh được phát hành, hình ảnh docker chính thức trong hầu hết các trường hợp sẽ được cập nhật cùng với nó. Và thông thường, các thay đổi tôn trọng các quy ước cấu hình mà hình ảnh đã thiết lập. Chẳng hạn như các biến môi trường, các chi tiết cụ thể về khởi động. Để người dùng có thể đơn giản thay đổi thẻ trong ngăn xếp của họ và nâng cấp. Tất nhiên có thể có những thay đổi lớn - hãy luôn kiểm tra điều này.
- Cơ sở người dùng lớn - khi hình ảnh như postgres được tải xuống hơn 10 mili lần (2019), điều này không chỉ có nghĩa là nó phổ biến mà còn hoạt động như một sự đảm bảo rằng hình ảnh đã được kiểm tra kỹ lưỡng. Mọi lỗi cơ bản đã được loại bỏ và bạn sẽ có một khoảng thời gian dễ dàng với hình ảnh.
- Được tối ưu hóa cho kích thước và hiệu suất - bạn có thể chắc chắn rằng sự chú ý đã được chú ý đến rất nhiều chi tiết, giảm thiểu kích thước của hình ảnh và tối đa hóa hiệu suất. Nhiều dự án xuất bản ứng dụng của họ trên một vài bản phân phối linux khác nhau. Giống như postgres - họ xuất bản
debian
và mộtalpine
dựa trên hình ảnh.alpine
hình ảnh nhỏ hơn, trong khidebian
lớn hơn một chút, nhưng cung cấp cho bạn quyền truy cập vào kho chứa gói debian rộng lớn nếu bạn cần cài đặt thêm gói. - Cấu hình dễ dàng - những người duy trì hình ảnh chính thức thường hiểu rằng cơ sở người dùng của họ rất tốt. Và họ cố gắng làm cho cuộc sống của chúng tôi với tư cách là nhà phát triển và quản trị viên dễ dàng hơn (chúa phù hộ cho họ). Hình ảnh chính thức thường có một số tài liệu khá tốt nằm ngay trên trang đích của trung tâm docker của chúng hoặc liên kết đến kho lưu trữ github có
README.md
sẽ bao gồm các cách sử dụng chung. Tôi thấy rằng những hướng dẫn này rất đáng để bạn đọc từ trên xuống dưới.
Tôi hiểu rằng bạn muốn giữ hình ảnh nhỏ, nhưng bạn biết gì không - dự án postgres đã bao gồm usecase của bạn.
Hình ảnh postgres núi cao mới nhất được gắn thẻ 11-alpine
có dấu chân nén là 28 MB và được giải nén là 70MB . Trong khi archlinux/base
hình ảnh mà bạn muốn bắt đầu có dấu chân cơ sở nén là 153MB và kích thước được giải nén là 445MB . Và đó là trước khi bạn giới thiệu chính postgres.
Thêm vào đó, cơ sở dữ liệu và người dùng mà bạn muốn tạo khi khởi động - có thể được xử lý trong các biến môi trường một mình cho hình ảnh postgres chính thức. Như thế này:
docker run -d --name some-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=simha \
-e POSTGRES_DB=btgapp \
postgres:11-alpine
Nếu điều đó không bao gồm việc khởi tạo mà bạn cần cho cơ sở dữ liệu của mình, thì bạn có thể sao chép .sql
script (và .sh
script) vào một vị trí đặc biệt trong hình ảnh - và chúng sẽ được thực thi khi khởi động. Đối với điều này, bạn có thể mở rộng hình ảnh của họ như thế này:
init-user-db.sh
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER simha;
CREATE DATABASE btgapp;
GRANT ALL PRIVILEGES ON DATABASE btgapp TO simha;
EOSQL
Và sau đó với Dockerfile
như thế này:
Dockerfile
FROM postgres:11-alpine
COPY ./init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
(Điều này được lấy từ mô tả postgres trên docker hub )
Kết lại - tôi khuyên bạn không nên ưu tiên bản phân phối mà hình ảnh dựa trên khả năng sử dụng và khả năng bảo trì. Docker cho phép chúng ta chạy các ứng dụng trong vùng chứa mà không thực sự quan tâm quá nhiều đến bản phân phối bên trong vùng chứa. Đó là tất cả Linux dù sao. Vào cuối ngày, tôi hy vọng rằng bạn muốn một vùng chứa cơ sở dữ liệu postgres ổn định giống như tôi. Đây là những gì tôi nhận được với hình ảnh postgres chính thức.
Tôi hy vọng tôi đã giúp bạn đánh giá các lựa chọn của bạn về điều này.