【问题标题】:Use local mirror of Alpine when build images of docker-compose instead legacy repositories构建 docker-compose 镜像时使用 Alpine 的本地镜像,而不是传统存储库
【发布时间】:2021-02-09 19:45:38
【问题描述】:

在使用 docker-compose 构建容器时,是否可以使用 docker 使用的本地存储库(镜像)?

我有一个本地镜像,我的兴趣是当我用 docker-compose build 构建容器时,apk 是从本地镜像下载的,而不是从互联网下载

示例。

如果使用 Dockerfile 进行本地部署

FROM alpine:3.13

# Install packages and remove default server definition
RUN apk --no-cache add php8=8.0.2-r0 php8-fpm php8-opcache php8-mysqli php8-json \
    php8-openssl php8-curl php8-soap php8-zlib php8-xml php8-phar php8-intl php8-dom php8-xmlreader php8-ctype \
    php8-session php8-simplexml php8-mbstring php8-gd nginx supervisor curl php8-exif php8-zip php8-fileinfo \
    php8-iconv php8-soap tzdata htop mysql-client php8-pecl-imagick php8-pecl-redis php8-tokenizer php8-xmlwriter \
    nano && rm /etc/nginx/conf.d/default.conf

当使用docker-compose build 部署容器时,我喜欢使用我的本地 alpine 存储库,而不是任何 Alpine 的互联网镜像,例如:

fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/124) Installing ca-certificates (20191127-r5)
(2/124) Installing brotli-libs (1.0.9-r3)
(3/124) Installing nghttp2-libs (1.42.0-r1)
...

【问题讨论】:

    标签: docker-compose alpine


    【解决方案1】:

    阅读 alpine 文档Alpine Linux package management 后,我使用本地镜像的静态 IP 获得了解决方案。我尝试使用主机名的名称 (repoalpine.test),但找不到如何在 docker 网络上公开主机名。

    RUN apk --no-cache -X http://172.20.0.254/v3.13/main -X http://172.20.0.254/v3.13/community \
        add php8=8.0.2-r0 php8-fpm php8-opcache php8-mysqli php8-json \
        php8-openssl php8-curl php8-soap php8-zlib php8-xml php8-phar php8-intl php8-dom php8-xmlreader php8-ctype \
        php8-session php8-simplexml php8-mbstring php8-gd nginx supervisor curl php8-exif php8-zip php8-fileinfo \
        php8-iconv php8-soap tzdata htop mysql-client php8-pecl-imagick php8-pecl-redis php8-tokenizer php8-xmlwriter \
        nano && rm /etc/nginx/conf.d/default.conf
    

    现在工作

    Step 7/22 : RUN apk --no-cache -X http://172.20.0.254/v3.13/main -X http://172.20.0.254/v3.13/community     add php8=8.0.2-r0 php8-fpm php8-opcache php8-mysqli php8-json     php8-openssl php8-curl php8-soap php8-zlib php8-xml php8-phar php8-intl php8-dom php8-xmlreader php8-ctype     php8-session php8-simplexml php8-mbstring php8-gd nginx supervisor curl php8-exif php8-zip php8-fileinfo     php8-iconv php8-soap tzdata htop mysql-client php8-pecl-imagick php8-pecl-redis php8-tokenizer php8-xmlwriter     nano && rm /etc/nginx/conf.d/default.conf
     ---> Running in 4f2c6521e6e6
    fetch http://172.20.0.254/v3.13/community/x86_64/APKINDEX.tar.gz
    ...
    

    【讨论】:

      【解决方案2】:

      你需要一个本地的Docker Registry

      【讨论】:

      • 我的兴趣不是在做 docker pull,而是在使用 docker-compose build 构建 Alpine 映像时,如果在 Dockerfile 上有一个 RUN apk 添加 somepackage docker-compose 而不是调用 Alpine 的存储库。而是致电我的本地仓库。 Docker Regsitry 是“注册表是一个无状态的、高度可扩展的服务器端应用程序,它可以存储并允许您分发 Docker 映像”
      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2017-11-12
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多