alpine的简单小巧(越小越安全)给容器镜像制作带了福音,但是有些问题也给镜像制作带来了困难,
1.Alpine采用的是musl libc,不是通常用的glibc
2.DNS问题
参考文章:http://gliderlabs.viewdocs.io/docker-alpine/caveats/

库问题

alpine的仓库中有很多已经做好的依赖于musl libc库的通用二进制服务软件安装包(可以通过apk add直接安装),对于仓库中没有的软件,同时依赖glibc库,没有办法,只能在alpine中提前安装glibc库(这个glibc库在alpine的仓库中是不存在的,需要去sgerrand下载
可以在alpine仓库中找是否有可以替换基于glibc库软件。
这里以Oracle Java为例制作镜像,它是依赖glibc,以下是tomcat+jdk的Dockerfile

#tomcat:8
#jdk:8
FROM harbor.chinaedu.com/system/alpine:v3.7
MAINTAINER laodou 'http://laodou.blog.51cto.com,qq:1044395037'
ADD tomcat /app/tomcat
ADD jdk /app/jdk
RUN apk --no-cache add ca-certificates && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-2.27-r0.apk && \
    apk add glibc-2.27-r0.apk && \
    useradd tomcat -u 1010 && \
    chown -R tomcat.tomcat /app/tomcat/work /app/tomcat/temp /app/tomcat/logs
ENV JAVA_HOME=/app/jdk
ENV PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
ENV CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
ENV TOMCAT_HOME=/app/tomcat
USER tomcat
EXPOSE 8080
EXPOSE 8009
CMD ["/app/tomcat/bin/catalina.sh","run"]

docker build -t harbor.chinaedu.com/laodou/tomcat:v8 .
镜像制作成功,测试一下镜像是否能使用,就OK 了。
至此库的问题就解决了。

DNS问题

原因:musl libc does not use domain or search directives in the /etc/resolv.conf file
也就是说你使用外部dns时(Docker 启动带有 --dns-search=service.consul),会对域名的解析失败,所以对于一些框架的DNS会不生效。
解决方案:
方法一、添加host,这种方法繁琐,容器的销毁和重建很平常,所以不建议采用
方法二、Running dnsmasq with --server /consul/10.0.0.1 would forward queries for the .consul to 10.0.0.1,对于docker daemon启动,使用--dns=10.0.0.1.即可。