Docker多阶段构建离线yum源

概述

  • 通过不同操作系统,下载依赖包制作离线源通过nginx提供yum服务。

1.构建阶段:构建 CentOS 7.4

  • FROM centos:7.4.1708 AS build0

  • 设置环境变量:

    • EPEL_RELEASE=https://dl.fedoraproject.org/.../epel-release-latest-7.noarch.rpm
    • DOCKER_REPO=https://download.docker.com/.../docker-ce.repo
  • COPY yum-repo/pkg.list /

2. 发布阶段:使用 nginx 提供离线 yum 源

  • FROM nginx:alpine

  • 创建目录:

    1
    RUN mkdir /usr/share/nginx/html/rpms
  • 将 RPM 和静态页面、Nginx 配置文件复制进去:

3.使用镜像提供 yum 源

  • 构建镜像:
    docker build -t offline-yum-repo .

  • 启动容器:
    docker run -d -p 8080:80 offline-yum-repo

  • 在客户端通过配置 baseurl=http://server:8080/rpms/ 使用离线 yum 源。

4.dockerfile

# build
FROM centos:7.4 as build
ENV EPEL_RELEASE=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
    DOCKER_REPO=https://download.docker.com/linux/centos/docker-ce.repo
COPY yum-repo/pkg.list /
RUN mkdir /rpms \
    && yum install -y $EPEL_RELEASE yum-utils createrepo \
    && yum-config-manager --add-repo $DOCKER_REPO \
    && yum install -y --downloadonly --downloaddir=/rpms $(cat /pkg.list)

COPY --from=build /rpms/* /rpms/
RUN createrepo /rpms/	

# nginx
FROM nginx:alpine
RUN mkdir /usr/share/nginx/html/rpms
COPY --from=build /rpms/* /usr/share/nginx/html/rpms/
COPY yum-repo/index.html /usr/share/nginx/html/
COPY yum-repo/nginx.conf /etc/nginx/conf.d/default.conf/