基于alpine构建golang基础镜像

621 阅读4分钟

一、Dockerfile

root@hh:/volume1/development/source/alpine_golang# docker pull golang:alpine
alpine: Pulling from library/golang
97518928ae5f: Already exists
b78c28b3bbf7: Pull complete
248309d37e25: Pull complete
c91f41641737: Pull complete
e372233a5e04: Pull complete
Digest: sha256:55da409cc0fe11df63a7d6962fbefd1321fedc305d9969da636876893e289e2d
Status: Downloaded newer image for golang:alpine
docker.io/library/golang:alpine
root@hh:/volume1/development/source/alpine_golang# pwd
/volume1/development/source/alpine_golang
root@hh:/volume1/development/source/alpine_golang# cat Dockerfile

# 构建物打包阶段 final stage
FROM golang:alpine

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

二、build

root@hh:/volume1/development/source/alpine_golang# docker build -t alpine_golong:v1.6 .
Sending build context to Docker daemon  3.584kB
Step 1/8 : FROM golang:alpine
 ---> 3a38ce03c951
Step 2/8 : LABEL maintainer="kk 2021.11.17"
 ---> Running in aae8487aef51
Removing intermediate container aae8487aef51
 ---> d8d787e5e486
Step 3/8 : 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
 ---> Running in d16941585614
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
v3.14.3-8-gdab723ccf8 [https://mirrors.ustc.edu.cn/alpine/v3.14/main]
v3.14.3-12-g13e0706e2c [https://mirrors.ustc.edu.cn/alpine/v3.14/community]
v3.15.0_rc3-61-ge4504c9628 [http://dl-cdn.alpinelinux.org/alpine/edge/testing]
OK: 19557 distinct packages available
OK: 6 MiB in 15 packages
Removing intermediate container d16941585614
 ---> c440ce60950a
Step 4/8 : 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
 ---> Running in 017c2520722f
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
OK: 6 MiB in 15 packages
(1/1) Installing tzdata (2021e-r0)
Executing busybox-1.33.1-r6.trigger
OK: 10 MiB in 16 packages
(1/4) Installing ncurses-terminfo-base (6.2_p20210612-r0)
(2/4) Installing ncurses-libs (6.2_p20210612-r0)
(3/4) Installing readline (8.1.0-r0)
(4/4) Installing bash (5.1.4-r0)
Executing bash-5.1.4-r0.post-install
Executing busybox-1.33.1-r6.trigger
OK: 12 MiB in 20 packages
(1/4) Installing skalibs (2.10.0.3-r0)
(2/4) Installing s6-ipcserver (2.10.0.3-r0)
(3/4) Installing execline (2.8.0.1-r0)
(4/4) Installing s6 (2.10.0.3-r0)
Executing s6-2.10.0.3-r0.pre-install
Executing busybox-1.33.1-r6.trigger
OK: 14 MiB in 24 packages
(1/3) Installing libunistring (0.9.10-r1)
(2/3) Installing libidn2 (2.3.1-r0)
(3/3) Installing wget (1.21.1-r1)
Executing busybox-1.33.1-r6.trigger
OK: 16 MiB in 27 packages
(1/4) Installing brotli-libs (1.0.9-r5)
(2/4) Installing nghttp2-libs (1.43.0-r0)
(3/4) Installing libcurl (7.79.1-r0)
(4/4) Installing curl (7.79.1-r0)
Executing busybox-1.33.1-r6.trigger
OK: 18 MiB in 31 packages
(1/4) Installing openssh-keygen (8.6_p1-r3)
(2/4) Installing libedit (20210216.3.1-r0)
(3/4) Installing openssh-client-common (8.6_p1-r3)
(4/4) Installing openssh-client-default (8.6_p1-r3)
Executing busybox-1.33.1-r6.trigger
OK: 21 MiB in 35 packages
(1/1) Installing iperf3 (3.10.1-r0)
Executing busybox-1.33.1-r6.trigger
OK: 22 MiB in 36 packages
(1/2) Installing libmnl (1.0.4-r1)
(2/2) Installing ethtool (5.12-r0)
Executing busybox-1.33.1-r6.trigger
OK: 22 MiB in 38 packages
(1/4) Installing gmp (6.2.1-r0)
(2/4) Installing jansson (2.13.1-r0)
(3/4) Installing libnftnl-libs (1.2.0-r0)
(4/4) Installing nftables (0.9.9-r0)
Executing busybox-1.33.1-r6.trigger
OK: 24 MiB in 42 packages
(1/1) Installing busybox-extras (1.33.1-r6)
Executing busybox-extras-1.33.1-r6.post-install
Executing busybox-1.33.1-r6.trigger
OK: 24 MiB in 43 packages
(1/2) Installing libpcap (1.10.0-r0)
(2/2) Installing tcpdump (4.99.0-r0)
Executing busybox-1.33.1-r6.trigger
OK: 26 MiB in 45 packages
(1/2) Installing libcap (2.50-r0)
(2/2) Installing iputils (20210202-r0)
Executing busybox-1.33.1-r6.trigger
OK: 26 MiB in 47 packages
(1/1) Installing iptables (1.8.7-r1)
Executing busybox-1.33.1-r6.trigger
OK: 29 MiB in 48 packages
(1/8) Installing iproute2 (5.12.0-r0)
Executing iproute2-5.12.0-r0.post-install
(2/8) Installing libbz2 (1.0.8-r1)
(3/8) Installing fts (1.2.7-r1)
(4/8) Installing xz-libs (5.2.5-r0)
(5/8) Installing libelf (0.182-r1)
(6/8) Installing iproute2-tc (5.12.0-r0)
(7/8) Installing iproute2-minimal (5.12.0-r0)
(8/8) Installing iproute2-ss (5.12.0-r0)
Executing busybox-1.33.1-r6.trigger
OK: 31 MiB in 56 packages
(1/2) Installing mii-tool (1.60_git20140218-r2)
(2/2) Installing net-tools (1.60_git20140218-r2)
Executing busybox-1.33.1-r6.trigger
OK: 32 MiB in 58 packages
(1/4) Installing libacl (2.2.53-r0)
(2/4) Installing libattr (2.5.1-r0)
(3/4) Installing utmps (0.1.0.2-r0)
Executing utmps-0.1.0.2-r0.pre-install
(4/4) Installing coreutils (8.32-r2)
Executing busybox-1.33.1-r6.trigger
OK: 33 MiB in 62 packages
(1/1) Installing libc6-compat (1.2.2-r3)
OK: 33 MiB in 63 packages
Removing intermediate container 017c2520722f
 ---> 883be99a0231
Step 5/8 : RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 	&& echo "Asia/Shanghai" > /etc/timezone
 ---> Running in a9966990bd53
Removing intermediate container a9966990bd53
 ---> a7c168666ffb
Step 6/8 : ENV TIME_ZONE Asia/Shanghai
 ---> Running in 3585ee361b81
Removing intermediate container 3585ee361b81
 ---> 2cc8b6a0e832
Step 7/8 : ENV LANG=zh_CN.UTF-8
 ---> Running in 859c65d29682
Removing intermediate container 859c65d29682
 ---> 649700485b92
Step 8/8 : ENV LANGUAGE=zh_CN:zh
 ---> Running in 70077f322d9a
Removing intermediate container 70077f322d9a
 ---> dfa303492843
Successfully built dfa303492843
Successfully tagged alpine_golong:v1.6

三、确认

root@hh:/volume1/development/source/alpine_golang# docker images | grep python
alpine_python                                v1.1              1e7f45424e9e   6 hours ago         92.3MB
192.168.50.204:33080/mynas/alpine_python     v1.1              1e7f45424e9e   6 hours ago         92.3MB