Вы можете немного подправить это, но в основном вам нужно две RUN apt-get update && apt-get install
строки. Существенная цепочка зависимостей:
- Последняя строка
apt-get install
зависит от наличия доступного репозитория PostgreSQL в восходящем направлении - Вы не можете
apt-get install
из репозитория, пока вы не apt-get update
из него - Вы не можете сделать это
apt-get update
без предыдущих строк, чтобы добавить строку sources.list
и загрузить ключ c publi - Вы не можете получить ключ publi c без
wget
и gnupg
- Для которого требуется дополнительный
apt-get install
и предшествующий apt-get update
Нет особой необходимости дважды запускать dist-upgrade
и я пропущу его в первый раз (и, может быть, во второй раз: образ Docker Hub ubuntu
обновляется довольно регулярно). Вы можете объединить несколько команд apt-get install
вместе, и если у вас есть предложение rm
, вам нужно запускать его каждый раз. Вы также можете подумать, нужна ли вам клиентская библиотека новее, чем пакеты Ubuntu; если старая клиентская библиотека будет работать нормально, вы можете значительно упростить это.
Так что я могу оказаться где-то вроде:
# Install prerequisites to install prerequisites
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --assume-yes \
gnupg2 \
wget \
&& rm -rf /var/lib/apt/lists/*
# Configure upstream PostgreSQL repository
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | tee /etc/apt/sources.list.d/postgresql.list \
&& wget https://www.postgresql.org/media/keys/ACCC4CF8.asc \
&& apt-key add ACCC4CF8.asc
# Actually install the packages we need
RUN apt-get update && \
&& DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --assume-yes \
nodejs \
postgresql-client-11 \
&& rm -rf /var/lib/apt/lists/*