基础镜像指令验证与群晖radicale部署

533 阅读4分钟

alpine基础镜像+基础环境,执行与验证
Radicale 【caldav server】,群晖部署(替代Synology Calendar)

一、alpine基础镜像执行与验证:

root@hh:/volume1/server/source/alpine_python# cat python_alpine.dockerfile

# 构建物打包阶段 final stage
#FROM alpine:latest
FROM python:3.7-alpine

LABEL maintainer="kk 2021.11.28"

# 配置apk包加速镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
	&& echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
	&& apk update \
	&& apk upgrade

# 安装基础包
RUN apk add --no-cache ca-certificates \
	&& apk add tzdata \
	&& apk add bash \
	&& apk add s6 \
	&& apk add wget \
	&& apk add curl \
	&& apk add openssh-client \
	&& apk add iperf3 \
	# ethtool:用于获取以太网卡的配置信息,或者修改这些配置
	&& apk add ethtool \
	# nftables:是一个 netfilter 项目,旨在替换现有的 {ip,ip6,arp,eb}tables 框架,为{ip,ip6}tables提供一个新的包过滤框架、一个新的用户空间实用程序(nft)和一个兼容层。它使用现有的钩子、链接跟踪系统、用户空间排队组件和 netfilter 日志子系统。
	&& apk add nftables \
	# busybox-extras:包含 telnet 命令
	&& apk add busybox-extras \
	&& apk add tcpdump \
	&& apk add iputils \
	&& apk add iptables \
	# iproute2:ip link、ip route、ss 等命令
	&& apk add iproute2 \
	# net-tools:ifconfig、netstat、route 等命令
	&& apk add net-tools \
	#&& apk add telnet\
	#&& apk add traceroute \
	&& apk add coreutils \
	&& apk add libc6-compat \
	&& update-ca-certificates 2>/dev/null || true \
	&& rm -rf /tmp/* \
	&& rm -rf /var/cache/apk/*
	# 缺少/etc/nsswitch.conf 文件,导致 golang 程序在 Alpine 镜像下hosts定义的域名不生效
	#&& [ ! -e /etc/nsswitch.conf ] \
	#&& echo "hosts: files dns" > /etc/nsswitch.conf

# 设置 操作系统时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	#&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	&& echo "Asia/Shanghai" > /etc/timezone
	#&& apk del tzdata

# 设置时区变量
ENV TIME_ZONE Asia/Shanghai

# 设置 语言支持
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh


# 打包应用
#ENV APP_NAME=${APP_NAME}
#ENV APP_ROOT="/data/apps/"${APP_NAME}
#RUN mkdir -p $APP_ROOT
#WORKDIR $APP_ROOT

# 设置启动时预期的命令参数, 可以被 docker run 的参数覆盖掉.
#CMD ["/bin/bash"]
#CMD $APP_ROOT/$APP_NAME

修改apk源

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
    && apk update \
    && apk upgrade

验证:

root@hh:/volume1/server/source/alpine_python# docker run -it python3.7-alpine:v1 
/bin/bash

bash-5.1# cat /etc/apk/repositories
https://mirrors.ustc.edu.cn/alpine/v3.14/main
https://mirrors.ustc.edu.cn/alpine/v3.14/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing

安装基础包

# 安装基础包
RUN apk add --no-cache ca-certificates \
    && apk add tzdata \
    && apk add bash \
    && apk add s6 \
    && apk add wget \
    && apk add curl \
    && apk add openssh-client \
    && apk add iperf3 \
    # ethtool:用于获取以太网卡的配置信息,或者修改这些配置
    && apk add ethtool \
    # nftables:是一个 netfilter 项目,旨在替换现有的 {ip,ip6,arp,eb}tables 框架,为{ip,ip6}tables提供一个新的包过滤框架、一个新的用户空间实用程序(nft)和一个兼容层。它使用现有的钩子、链接
跟踪系统、用户空间排队组件和 netfilter 日志子系统。
    && apk add nftables \
    # busybox-extras:包含 telnet 命令
    && apk add busybox-extras \
    && apk add tcpdump \
    && apk add iputils \
    && apk add iptables \
    # iproute2:ip link、ip route、ss 等命令
    && apk add iproute2 \
    # net-tools:ifconfig、netstat、route 等命令
    && apk add net-tools \
    #&& apk add telnet\
    #&& apk add traceroute \
    && apk add coreutils \
    && apk add libc6-compat \
    && update-ca-certificates 2>/dev/null || true \
    && rm -rf /tmp/* \
    && rm -rf /var/cache/apk/*
    # 缺少/etc/nsswitch.conf 文件,导致 golang 程序在 Alpine 镜像下hosts定义的域名不生效
    #&& [ ! -e /etc/nsswitch.conf ] \
    #&& echo "hosts: files dns" > /etc/nsswitch.conf
  • 验证
bash-5.1# apk list | grep ca-certificates
WARNING: Ignoring https://mirrors.ustc.edu.cn/alpine/v3.14/main: No such file or directory
WARNING: Ignoring https://mirrors.ustc.edu.cn/alpine/v3.14/community: No such file or directory
WARNING: Ignoring http://dl-cdn.alpinelinux.org/alpine/edge/testing: No such file or directory
ca-certificates-20191127-r5 x86_64 {ca-certificates} (MPL-2.0 AND MIT) [installed]
ca-certificates-bundle-20191127-r5 x86_64 {ca-certificates} (MPL-2.0 AND MIT) [installed]

tzdata-2021e-r0 x86_64 {tzdata} (Public-Domain) [installed]

bash-5.1.4-r0 x86_64 {bash} (GPL-3.0-or-later) [installed]

s6-2.10.0.3-r0 x86_64 {s6} (ISC) [installed]
s6-ipcserver-2.10.0.3-r0 x86_64 {s6} (ISC) [installed]

wget-1.21.1-r1 x86_64 {wget} (GPL-3.0-or-later WITH OpenSSL-Exception) [installed]

libcurl-7.79.1-r0 x86_64 {curl} (MIT) [installed]
curl-7.79.1-r0 x86_64 {curl} (MIT) [installed]

openssh-client-default-8.6_p1-r3 x86_64 {openssh} (BSD) [installed]
openssh-client-common-8.6_p1-r3 x86_64 {openssh} (BSD) [installed]

iperf3-3.10.1-r0 x86_64 {iperf3} (BSD-3-Clause) [installed]

ethtool-5.12-r0 x86_64 {ethtool} (GPL-2.0-only) [installed]

nftables-0.9.9-r0 x86_64 {nftables} (GPL-2.0-or-later) [installed]

busybox-extras-1.33.1-r6 x86_64 {busybox} (GPL-2.0-only) [installed]
bash-5.1# telnet

bash-5.1# tcpdump

iputils-20210202-r0 x86_64 {iputils} (BSD-3-Clause AND GPL-2.0-or-later AND MIT) [installed]

iptables-1.8.7-r1 x86_64 {iptables} (GPL-2.0-or-later) [installed]

iproute2-tc-5.12.0-r0 x86_64 {iproute2} (GPL-2.0-or-later) [installed]
iproute2-minimal-5.12.0-r0 x86_64 {iproute2} (GPL-2.0-or-later) [installed]
iproute2-5.12.0-r0 x86_64 {iproute2} (GPL-2.0-or-later) [installed]
iproute2-ss-5.12.0-r0 x86_64 {iproute2} (GPL-2.0-or-later) [installed]
bash-5.1# ip addr
bash-5.1# ip link
bash-5.1# ip route
bash-5.1# ss


net-tools-1.60_git20140218-r2 x86_64 {net-tools} (GPL-2.0) [installed]
mii-tool-1.60_git20140218-r2 x86_64 {net-tools} (GPL-2.0) [installed]
bash-5.1# netstat
bash-5.1# route
bash-5.1# ifconfig

bash-5.1# traceroute

coreutils-8.32-r2 x86_64 {coreutils} (GPL-3.0-or-later) [installed]

libc6-compat-1.2.2-r3 x86_64 {musl} (MIT) [installed]

时区

# 设置 操作系统时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    #&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
    #&& apk del tzdata
  • 验证
bash-5.1# cat /etc/timezone
Asia/Shanghai

bash-5.1# echo $TIME_ZONE
Asia/Shanghai

# 时间一致
bash-5.1# date
Sun Nov 28 22:32:18 CST 2021

语言

# 设置时区变量
ENV TIME_ZONE Asia/Shanghai

# 设置 语言支持
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:zh
  • 验证
bash-5.1# echo $LANG
zh_CN.UTF-8
bash-5.1# echo $LANGUAGE
zh_CN:zh

python3软件运行环境

FROM python:3.7-alpine
bash-5.1# python --version
Python 3.7.12
bash-5.1# python3 --version
Python 3.7.12

bash-5.1# pip --version
pip 21.2.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
bash-5.1#
bash-5.1# pip3 --version
pip 21.2.4 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

bash-5.1# pip3 list
Package    Version
---------- -------
pip        21.2.4
setuptools 57.5.0
wheel      0.37.0

二、radicale build/run

github.com/Kozea/Radic…
radicale.org/master.html…
官方带了dockerfile,参考了官网dockerfile

  • radicale build/run
root@hh:/volume1/server/source/alpine_python# cat radicale3.0.6.dockerfile.v2

FROM python3.7-alpine:v1
LABEL maintainer="kk 2021.11.28"

RUN mkdir -p /usr/src/radicale \
	&& mkdir -p /apps/radicale \
	&& apk add bind-tools \
	#&& pip install pip -U \
	&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple

#ARG VERSION=3.0.x
VOLUME /var/lib/radicale
VOLUME /etc/radicale
#EXPOSE 5232
RUN apk add --no-cache gcc musl-dev libffi-dev ca-certificates openssl
#RUN pip install --no-cache-dir "Radicale[bcrypt] @ https://github.com/Kozea/Radicale/archive/${VERSION}.tar.gz"

WORKDIR /usr/src/radicale
COPY Radicale-3.0.6/ .

RUN python3 setup.py install
RUN apk del gcc musl-dev libffi-dev
RUN rm -rf /usr/src/radicale

CMD ["radicale", "--hosts", "0.0.0.0:5232"]

#ENV CONF_FILE=$CONF_FILE
#CMD /apps/frp/frpc -c $CONF_FILE
  • 验证
bash-5.1# ls -alhi /usr/src/radicale
bash-5.1# ls -alhi /apps/radicale

bash-5.1# apk list | grep bind-tools
bind-tools-9.16.20-r1 x86_64 {bind} (MPL-2.0) [installed]

bash-5.1# pip config list
global.index-url='https://mirrors.cloud.tencent.com/pypi/simple'

bash-5.1# ls -alhi /var/lib/radicale
bash-5.1# ls -alhi /etc/radicale

bash-5.1# netstat -antp

bash-5.1# apk list | grep openssl

bash-5.1# radicale --hosts 0.0.0.0:5232
[2021-11-28 23:20:50 +0800] [30] [CRITICAL] An exception occurred during server startup: Failed to start server '[0.0.0.0]:5232': [Errno 98] Address in use

bash-5.1# netstat

三、群晖,检查镜像、创建容器

image.png

image.png

image.png

image.png

  • 验证
/etc/radicale # cat /etc/radicale/users
/etc/radicale # ls -alhi /apps/radicale/users
/etc/radicale # ls /usr/src/radicale/

3.1、必要配置:包括创建账号

# 在有htpasswd 的机器上执行指令,创建账号(加密),官方要求
# aaa 为文件名~ htpasswd -c aaa kk
➜  ~ htpasswd -c aaa xhd
并写入 users 配置文件中

3.2、挂载配置文件以及目录

  • 挂载:radicale 至 /etc/radicale ;程序默认创建目录,需要遵循除非改源码
  • 挂载:radicale/conf 至 radicale/conf ;程序默认创建目录,需要遵循除非改源码
  • 挂载:users 至 /apps/radicale/users;conf 文件中,个人自定义目录(可随意)

image.png

3.3、访问(默认5232端口)

image.png

image.png