使用alpine构建基础镜像包
一、Dockerfile
root@hh:/volume1/development/source/alpine_python# pwd
/volume1/development/source/alpine_python
root@hh:/volume1/development/source/alpine_python# cat Dockerfile
# 构建物打包阶段 final stage
FROM alpine:latest
LABEL maintainer="kk 2021.11.17"
# 配置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 vim \
&& 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
# 安装 python3、升级pip、setuptools
RUN apk add --no-cache python3 \
#&& apk add --no-cache python3-dev \
&& python3 -m ensurepip \
#&& rm -r /usr/lib/pyopenssh-client \
#&& busybox-extras \thon*/ensurepip \
&& pip3 install --default-timeout=100 --no-cache-dir --upgrade pip \
&& pip3 install --default-timeout=100 --no-cache-dir --upgrade setuptools \
&& if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi \
&& if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi \
&& rm -rf /var/cache/apk/* \
&& rm -rf ~/.cache/pip
# 打包应用
#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
二、build
root@hh:/volume1/development/source/alpine_python# docker build -t alpine_python3:v1.1 .
Sending build context to Docker daemon 4.608kB
Step 1/9 : FROM alpine:latest
---> 0a97eee8041e
Step 2/9 : LABEL maintainer="kk 2021.11.17"
---> Using cache
---> 91aea6fe72b6
Step 3/9 : 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
---> Using cache
---> 0aa0bedb0325
Step 4/9 : 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 && apk add ethtool && apk add nftables && apk add busybox-extras && apk add tcpdump && apk add iputils && apk add iptables && apk add iproute2 && apk add net-tools && apk add coreutils && apk add libc6-compat && update-ca-certificates 2>/dev/null || true && rm -rf /tmp/* && rm -rf /var/cache/apk/* && [ ! -e /etc/nsswitch.conf ] && echo "hosts: files dns" > /etc/nsswitch.conf
---> Using cache
---> 24ea0f936e2e
Step 5/9 : RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
---> Using cache
---> 707c003393e5
Step 6/9 : ENV TIME_ZONE Asia/Shanghai
---> Using cache
---> 251b305d6e62
Step 7/9 : ENV LANG=zh_CN.UTF-8
---> Using cache
---> 8c7c97505d94
Step 8/9 : ENV LANGUAGE=zh_CN:zh
---> Using cache
---> 391c8bcc6314
Step 9/9 : RUN apk add --no-cache python3 && python3 -m ensurepip && pip3 install --default-timeout=100 --no-cache-dir --upgrade pip && pip3 install --default-timeout=100 --no-cache-dir --upgrade setuptools && if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && rm -rf /var/cache/apk/* && rm -rf ~/.cache/pip
---> Running in 3eec105b1b5f
fetch https://mirrors.ustc.edu.cn/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.ustc.edu.cn/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
(1/8) Installing expat (2.4.1-r0)
(2/8) Installing libffi (3.3-r2)
(3/8) Installing gdbm (1.19-r0)
(4/8) Installing libgcc (10.3.1_git20210424-r2)
(5/8) Installing libstdc++ (10.3.1_git20210424-r2)
(6/8) Installing mpdecimal (2.5.1-r1)
(7/8) Installing sqlite-libs (3.35.5-r0)
(8/8) Installing python3 (3.9.5-r1)
Executing busybox-1.33.1-r6.trigger
OK: 82 MiB in 71 packages
Looking in links: /tmp/tmpffwjcv_d
Processing /tmp/tmpffwjcv_d/setuptools-56.0.0-py3-none-any.whl
Processing /tmp/tmpffwjcv_d/pip-21.1.1-py3-none-any.whl
Installing collected packages: setuptools, pip
Successfully installed pip-21.1.1 setuptools-56.0.0
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
Requirement already satisfied: pip in /usr/lib/python3.9/site-packages (21.1.1)
Collecting pip
Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.1.1
Uninstalling pip-21.1.1:
Successfully uninstalled pip-21.1.1
Successfully installed pip-21.3.1
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
Requirement already satisfied: setuptools in /usr/lib/python3.9/site-packages (56.0.0)
Collecting setuptools
Downloading setuptools-59.1.1-py3-none-any.whl (951 kB)
Installing collected packages: setuptools
Attempting uninstall: setuptools
Found existing installation: setuptools 56.0.0
Uninstalling setuptools-56.0.0:
Successfully uninstalled setuptools-56.0.0
Successfully installed setuptools-59.1.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Removing intermediate container 3eec105b1b5f
---> ffc6b2bf5fbb
Successfully built ffc6b2bf5fbb
Successfully tagged alpine_python3:v1.1
三、push至私有镜像源harbor
root@hh:/volume1/development/source/alpine_common# docker tag alpine_common:v1.8 192.168.50.204:33080/mynas/alpine_common:v1.8
root@hh:/volume1/development/source/alpine_common# docker push 192.168.50.204:33080/mynas/alpine_common:v1.8
The push refers to repository [192.168.50.204:33080/mynas/alpine_common]
f333dd7208c7: Pushed
6c1c59c704fa: Pushed
8947332097e9: Pushed
4e3df0a938e2: Pushed
75fe4e554f7a: Pushed
1a058d5342cc: Layer already exists
v1.8: digest: sha256:2114dac79b09437b0837419ad1aa9c83712ab5c9d8dcb6f7545c00afe8f35ce2 size: 1576
root@hh:/volume1/development/source/alpine_common#
- 运行容器、验证镜像是否符合预期
root@hh:/volume1/development/source/npc0.26.10# docker run -it alpine_common:v1.6 bash
# -it 参数,在进入容器后 exit,会摧毁容器
四、快速验证基础镜像
root@hh:/volume1/development/source/npc0.26.10# docker images | grep alpine
192.168.50.204:33080/mynas/alpine_common v1.8 c7174bc75a2e 5 minutes ago 92.3MB
alpine_common v1.8 c7174bc75a2e 5 minutes ago 92.3MB
alpine latest 0a97eee8041e 4 days ago 5.6MB
root@hh:/volume1/development/source/npc0.26.10# docker build -t npc:v0.26.10_v1.10 .
Sending build context to Docker daemon 12.03MB
Step 1/5 : FROM alpine_common:v1.8
---> c7174bc75a2e
Step 2/5 : RUN mkdir /data/apps/npc
---> Running in e32259794585
Removing intermediate container e32259794585
---> 89d3c4eeef21
Step 3/5 : WORKDIR /data/apps/npc
---> Running in bb8daadd1461
Removing intermediate container bb8daadd1461
---> 7e885221168f
Step 4/5 : COPY . .
---> ecd84528c9cd
Step 5/5 : CMD ["./npc -config ${CONFIGFILE}"]
---> Running in 8595097f2369
Removing intermediate container 8595097f2369
---> 12c2a31e1438
Successfully built 12c2a31e1438
Successfully tagged npc:v0.26.10_v1.10
root@hh:/volume1/development/source/npc0.26.10# docker images | grep npc
192.168.50.204:33080/mynas/npc v0.26.10_v1.10 12c2a31e1438 About a minute ago 104MB
npc v0.26.10_v1.10 12c2a31e1438 About a minute ago 104MB
192.168.50.204:33080/mynas/npc v0.26.10_v9 87a8432c5386 8 hours ago 17.6MB
npc v0.26.10_v9 87a8432c5386 8 hours ago 17.6MB
npc v0.26.10_v8 13104461ceed 8 hours ago 17.6MB
192.168.50.204:33080/mynas/npc v0.26.10_v8 13104461ceed 8 hours ago 17.6MB