Tôi đang tạo một dockerfile chạy một ứng dụng tùy chỉnh được gắn với một phiên bản cụ thể của Java.
Tôi đang sử dụng một hình ảnh cơ sở centos7 bởi vì đó là những gì một bài viết mà tôi đang đề cập đến đang sử dụng và bởi vì tôi phải sử dụng một cái gì đó, vì vậy nó cũng tốt như bất kỳ. Tôi thực sự không quan tâm đến những gì người dùng tôi đang sử dụng. Điểm của hình ảnh này là phần mềm đang được lưu trữ, bản phân phối Linux chỉ là phương tiện để kết thúc - quan trọng là, JDK sẽ không được sử dụng bởi các ứng dụng hoặc người dùng khác.
Như đã nêu, ứng dụng của tôi được gắn với phiên bản Java cụ thể mà tôi đang sử dụng - mọi bản cập nhật cho phiên bản Java sẽ yêu cầu kiểm tra hồi quy đầy đủ của phần mềm với phiên bản cụ thể đó trước khi phát hành.
Bài viết mà tôi đang theo dõi bắt đầu với các phần cài đặt JDK của dockerfile có liên quan trông như thế này:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Điều đó không đủ cụ thể, bất cứ khi nào hình ảnh được xây dựng, nó sẽ có một phiên bản Java ngẫu nhiên, đó không phải là điều tôi muốn, tôi cần một phiên bản Java cụ thể.
Tôi đã thay đổi tập tin docker để trông như thế này:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
&& yum clean all
Và hình ảnh docker đã được xây dựng tốt. Đó là vào tháng 12.
Tuần này, tôi cần thực hiện một thay đổi nhỏ cho một phần khác của phần mềm và xây dựng lại một phiên bản mới của hình ảnh, nhưng việc xây dựng hình ảnh bây giờ thất bại.
Bản dựng hiện không thành công vì phiên bản cụ thể của gói java không còn khả dụng (ít nhất, tôi nghĩ đó là những gì nó nói với tôi):
Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 (base)
Requires: java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Available: 1:java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 (base)
java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Installing: 1:java-1.8.0-openjdk-headless-1.8.0.71-2.b15.el7_2.x86_64 (updates)
java-1.8.0-openjdk-headless = 1:1.8.0.71-2.b15.el7_2
Làm cách nào tôi có thể xây dựng lại dockerfile của mình để tôi luôn có thể sử dụng một phiên bản Java cụ thể (trong ví dụ này, tôi muốn phiên bản java là bản cập nhật 1.8.0 65)?
Một câu trả lời tiêu cực là tốt - nếu nói chung các cơ chế đóng gói Linux khác nhau không muốn mọi người sử dụng kho lưu trữ của họ như thế này, thì đó là - Tôi luôn có thể đóng gói phiên bản JDK của riêng mình dưới dạng tệp zip và chỉ giải nén ở đâu đó bên trong môi trường như là một phần của quá trình xây dựng hình ảnh, nhưng đó là một loạt rắc rối mà tôi không muốn phải làm.
Làm thế nào để người khác làm điều này? Có cách cài đặt JDK khác nhau để tôi có thể có phiên bản phân phối HĐH gần đây với các bản cập nhật mới nhất (như được định nghĩa bởi hình ảnh cơ bản trong mệnh đề TỪ và bản cập nhật yum) nhưng cài đặt một phiên bản cụ thể của JDK không?
Có phiên bản Linux nào phù hợp hơn với loại yêu cầu này không (tôi không kết hợp với CentOS, bản phân phối Linux của người dùng không đặc biệt quan trọng đối với tôi)?
yum install -y $package --disablerepo=updates