首页 > 其他分享 >caddy 服务器的 Docker 镜像构建流程

caddy 服务器的 Docker 镜像构建流程

时间:2024-06-14 23:21:09浏览次数:12  
标签:Caddy com image caddy https 镜像 Docker config

 

构建一个包含 Caddy 服务器的 Docker 镜像,关键部分:

  https://github.com/caddyserver/caddy-docker/blob/master/Dockerfile.tmpl
这个 Dockerfile 精心设计,用于自动化构建一个包含最新版Caddy Web服务器的Docker镜像,支持自动HTTPS,并配置了基本的文件结构和执行环境。

 

1. Trimming Whitespace:

{{ .base | strings.TrimSpace }}

这一行使用了某种模板引擎(如Go的text/template)来处理字符串,移除.base变量值开头和结尾的空白字符。

 

2. Installing Dependencies:

RUN apk add --no-cache \
    ca-certificates \
    libcap \
    mailcap    

添加必要的 Alpine Linux 包作为 Caddy 服务器的依赖,包括 CA证书、libcap 以及 mailcap。


3 Creating Directories & Downloading Configuration and Welcome Page:

RUN set -eux; \
    mkdir -p \
        /config/caddy \
        /data/caddy \
        /etc/caddy \
        /usr/share/caddy \
        ; \
    wget -O /etc/caddy/Caddyfile "https://github.com/caddyserver/dist/raw/{{ .config.dist_commit }}/config/Caddyfile"; \
    wget -O /usr/share/caddy/index.html "https://github.com/caddyserver/dist/raw/{{ .config.dist_commit }}/welcome/index.html"        

创建 Caddy 需要的多个目录结构,用于存放配置、数据、执行文件等。

使用 wget 命令从 GitHub 下载 Caddy 的默认配置文件 Caddyfile 和欢迎页面 index.html。


4. Setting Caddy Version Environment Variable:

ENV CADDY_VERSION v{{ .config.caddy_version }}

设置环境变量 CADDY_VERSION 为指定版本的 Caddy 服务器。


5. Downloading and Installing Caddy Binary

RUN set -eux; \
    apkArch="$(apk --print-arch)"; \
    case "$apkArch" in \
        x86_64)  binArch='amd64'; checksum='{{ .checksums.amd64 }}' ;; \
        armhf)   binArch='armv6'; checksum='{{ .checksums.arm32v6 }}' ;; \
        armv7)   binArch='armv7'; checksum='{{ .checksums.arm32v7 }}' ;; \
        aarch64) binArch='arm64'; checksum='{{ .checksums.arm64v8 }}' ;; \
        ppc64el|ppc64le) binArch='ppc64le'; checksum='{{ .checksums.ppc64le }}' ;; \
        riscv64) binArch='riscv64'; checksum='{{ .checksums.riscv64 }}' ;; \
        s390x)   binArch='s390x'; checksum='{{ .checksums.s390x }}' ;; \
        *) echo >&2 "error: unsupported architecture ($apkArch)"; exit 1 ;;\
    esac; \
    wget -O /tmp/caddy.tar.gz "https://github.com/caddyserver/caddy/releases/download/v{{ .config.caddy_version }}/caddy_{{ .config.caddy_version }}_linux_${binArch}.tar.gz"; \
    echo "$checksum  /tmp/caddy.tar.gz" | sha512sum -c; \
    tar x -z -f /tmp/caddy.tar.gz -C /usr/bin caddy; \
    rm -f /tmp/caddy.tar.gz; \
    setcap cap_net_bind_service=+ep /usr/bin/caddy; \
    chmod +x /usr/bin/caddy; \
    caddy version

根据当前系统的架构动态选择 Caddy 的二进制文件进行下载,并通过 SHA512 校验和确保文件完整性。然后,解压并安装到 /usr/bin,设置适当的权限和功能(如网络绑定服务的能力)。

 

6 Environment Variables for File Locations:

# See https://caddyserver.com/docs/conventions#file-locations for details
ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data

设置环境变量以指定 Caddy 的配置和数据存储位置。


7. Labels for Docker Image Metadata

LABEL org.opencontainers.image.version=v{{ .config.caddy_version }}
LABEL org.opencontainers.image.title=Caddy
LABEL org.opencontainers.image.description="a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go"
LABEL org.opencontainers.image.url=https://caddyserver.com
LABEL org.opencontainers.image.documentation=https://caddyserver.com/docs
LABEL org.opencontainers.image.vendor="Light Code Labs"
LABEL org.opencontainers.image.licenses=Apache-2.0
LABEL org.opencontainers.image.source="https://github.com/caddyserver/caddy-docker"

添加一系列标签来描述镜像的版本、标题、描述等元数据。


8. Exposing Ports

EXPOSE 80 443 443/udp 2019

声明容器运行时需要暴露的端口,包括HTTP(80)、HTTPS(443)、UDP上的HTTPS(443/udp)以及Caddy的监控端口(2019)。


9. Working Directory and Default Command:

WORKDIR /srv
CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]

设置工作目录为`/srv`,并定义容器启动时执行的默认命令,即运行Caddy服务器,使用Caddyfile配置文件。

 

Link:https://www.cnblogs.com/farwish/p/18248452

标签:Caddy,com,image,caddy,https,镜像,Docker,config
From: https://www.cnblogs.com/farwish/p/18248452

相关文章

  • 【学习Docker】
    学习Docker可以分为几个步骤和阶段,以下是一个建议的学习路径,适合初学者到进阶用户:###1.理解基本概念-**容器化与虚拟化**:了解容器化与传统虚拟化之间的区别,容器的轻量级和效率。-**Docker组件**:Docker客户端、Docker守护进程、Docker镜像、Docker容器、Docker仓库等。......
  • fs.1.10 ON rockeylinux8 dockerfile模式
     概述freeswitch是一款简单好用的VOIP开源软交换平台。rockeylinux8docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式。环境dockerengine:Version24.0.6rockylinuxdocker:8freeswitch:v1.10.7dockerfile创建空目录,创建dockerfile文件。github访问经常失败,先......
  • 在Linux中,什么是initrd镜像?
    在Linux系统中,initrd(initialRAMdisk)镜像是一个非常重要的组件,它用于在启动过程中加载必要的内核模块和驱动,以便系统能够完全引导起来。以下是具体介绍:概念与作用:initrd是一个被压缩的磁盘映像,它在系统启动时被加载到内存中,并且暂时作为根文件系统使用。其主要目的是在系统启......
  • Docker的通俗理解和通过宿主机端口访问Redis容器的实例
    前言本文解决的问题:入门docker理解镜像与容器、宿主机的概念理解Docker的常用指令创建redis容器,并通过宿主机端口访问默认读者的知识背景:使用过git初次使用Docker本文不会对Docker的定义作出解释,不会涉及Docker的实现原理,旨在帮助读者快速入门docker,理解......
  • docker /var/lib/docker/overlay2目录怎么清除
    docker/var/lib/docker/overlay2目录怎么清除Docker使用overlay2存储驱动时,镜像、容器、卷和网络等数据存储在/var/lib/docker/overlay2目录下。如果这个目录占用空间过大,可以通过删除无用的镜像、容器和卷来清理。以下是清理/var/lib/docker/overlay2目录的步骤:停......
  • 5分钟带你了解RabbitMQ的(普通/镜像)集群
    前言让我们深入探讨RabbitMQ的集群配置,了解各种集群模式的利弊。本次讨论的重点是帮助您快速理解RabbitMQ集群的运作方式,以及选择最适合您需求的模式。好的,话不多说。在RabbitMQ中,即使只有一个节点,该节点的服务也会被作为一个集群来处理。这意味着单节点系统也遵循集群架构的规范......
  • Docker安装MySQL主从
    Docker安装MySQL主从搭建主从dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]dockerrun-p3306:3306很多-d--namehahamysql:5.7Docker启动容器的数据部分一定挂载出来1、创建Masterdockerrun-p3307:3306--namemysql-master\-v/myd......
  • 使用 Docker 卷来实现替换容器内文件为宿主机上的
    要将容器内的/usr/share/nginx/html目录替换成宿主机上的/path/html目录里的内容,你可以使用Docker卷来实现。以下是你需要做的修改:停止并删除现有的前端容器(如果它正在运行):docker-composedown--remove-orphans修改docker-compose.yml文件,在frontend服务中......
  • maven仓库jar包下载太慢 阿里镜像推荐
    maven仓库jar包下载太慢阿里镜像推荐一、仓库地址Maven仓库1:http://repo1.maven.org/maven2mavenmavenhttp://repo1.maven.org/maven2centralMaven仓库2:http://repo2.maven.org/maven2Maven中央仓库:https://mvnrepository.com阿里云云效果Maven(推荐):仓库服务淘......
  • Docker镜像与容器的导入与导出
    参考chat-gpthttps://blog.csdn.net/qq_22211217/article/details/93936363https://blog.csdn.net/ncdx111/article/details/79878098https://www.runoob.com/docker/docker-import-command.htmlhttps://www.runoob.com/docker/docker-export-command.html环境环境版......