postgresql - 优化同一命令的多次执行 - Docker

标签 postgresql docker ubuntu

我正在尝试安装和配置postgresql-client-11在我的 ubuntu18:04 .我知道我们需要执行如下所示的一些额外步骤来做同样的事情(来源:https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/how-to-install-postgresql-10-on-ubuntu-18-04-lts.html)

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
sudo apt-get update
sudo apt-get install -y postgresql-client-11

我正在通过以下方式实现它
RUN apt-get update && apt-get dist-upgrade -y && apt-get install -y wget && apt-get install -y gnupg2
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | tee /etc/apt/sources.list.d/postgresql.list
RUN wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
RUN apt-key add ACCC4CF8.asc
RUN apt-get update && apt-get dist-upgrade -y && DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs && rm -rf /var/lib/apt/lists/*

我正在执行相同的命令 RUN apt-get update && apt-get dist-upgrade -y两次。

有没有办法优化以上,没有多余的命令 .

最佳答案

你可以稍微调整一下,但基本上你需要两个 RUN apt-get update && apt-get install线。基本的依赖链是:

  • 最后apt-get install行取决于上游 PostgreSQL 存储库是否可用
  • 你不能apt-get install从存储库直到您 apt-get update来自它
  • 你不能这样做 apt-get update没有前面的行添加 sources.list行并加载公钥
  • 没有 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/*
    

    关于postgresql - 优化同一命令的多次执行 - Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488053/

    相关文章:

    sql - 如何对日期进行唯一约束,即x个月内没有日期的行

    php - exec ('script.ps1' ) 返回错误,cmd> script.ps1 运行成功

    spring-boot - spring boot - docker - Logback - 非root用户 - 权限被拒绝错误

    node.js - 没有 Docker 无法在 Ubuntu 上运行 Rocket.Chat 服务器

    c++ - std::regex:Ubuntu(15.10)-Clang++ 生成的二进制文件比 Debian-8-Clang++(均为 v.3.4)性能更高。

    Django、Postgis 和 Heroku : relation "spatial_ref_sys" does not exist

    postgresql - 函数遍历数组元素的语法?

    nginx - fastcgi-mono-server4 和 nginx 与 docker

    docker - 为什么在 ubuntu 上安装 docker 应该是 `sudo apt-get install docker.io` ?

    ubuntu - 无法在 Ubuntu 13.04 "upgrade to 1.2.5+ first"上启动 Cassandra 2.0