概述
通过将Docker基本映像从Ubuntu迁移到Alpine Linux(141MB→3MB),我能够减少Docker映像的容量。构建此映像时,请在命令行上处理一个模拟命令,并使其成为使用模拟容器作为命令的映像。下面介绍具体的迁移过程。
动机
访问分析工具Analog正在开发Docker容器支持。我是基于
迁移Dockerfile时要考虑的要点
包管理器
我可以在Ubuntu上使用
-
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
-
与
apt-get update 等效的命令是apk update 。如果您不这样做,将无法获得包裹清单信息。 -
apt-get install <パッケージ名> 的等效项是apk add <パッケージ名> -
apt-get remove 的等效项是apk del <パッケージ名>
您也可以指定
为了减小
图像的大小,您可以在工作后使用
其他常见选项是
-
apk search <package> ...搜索软件包 -
apk info <package> ...显示包装信息
参考:https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
营造环境
普通的Alpine不包含make环境。对于最低要求的环境,请执行以下命令。
1 | # apk add make gcc g++ |
bash
默认外壳程序是
1 | # apk add bash |
时区
默认情况下保留UTC。您需要设置
1 2 3 | # apk --update add tzdata # cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # apk del tzdata |
参考:https://wiki.alpinelinux.org/wiki/Setting_the_timezone
重写Dockerfile
以下使用早期的Ubuntu镜像Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | FROM ubuntu:14.04 RUN mkdir -p /tmp/analog && \ apt-get update && \ apt-get install -y make gcc wget RUN cd /tmp/analog && \ wget -O analog-6.0.tar.gz ftp://ftp.naist.jp/pub/sunfreeware/SOURCES/analog-6.0.tar.gz && \ tar xfz analog-6.0.tar.gz RUN cd /tmp/analog/analog-6.0 && \ make DEFS='-DLANGDIR="/opt/analog/lang/"' && \ mkdir -p /opt/analog && \ cp -r lang /opt/analog/ && \ mv ./analog /usr/bin/analog && \ rm -rf /tmp/analog COPY analog.cfg /opt/analog/analog.cfg CMD ["+g/opt/analog/analog.cfg"] ENTRYPOINT ["/usr/bin/analog","-G"] |
将命令从
差异信息
https://github.com/zembutsu/dockerize-analog/commit/b8ac2ebc16c2a8ff66836a2063c2394cbd94ae8a
此时,容量可以从141MB减少到51MB。
此外,为了减少Docker的映像层,可以通过将具有三行的
最终Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | FROM alpine:3.3 RUN mkdir -p /tmp/analog && \ apk --no-cache add make gcc g++ && \ cd /tmp/analog && \ wget -O analog-6.0.tar.gz ftp://ftp.naist.jp/pub/sunfreeware/SOURCES/analog-6.0.tar.gz && \ tar xfz analog-6.0.tar.gz && \ cd /tmp/analog/analog-6.0 && \ make DEFS='-DLANGDIR="/opt/analog/lang/"' && \ mkdir -p /opt/analog && \ cp -r lang /opt/analog/ && \ mv ./analog /usr/bin/analog && \ rm -rf /tmp/analog && \ apk del make gcc g++ COPY analog.cfg /opt/analog/analog.cfg CMD ["+g/opt/analog/analog.cfg"] ENTRYPOINT ["/usr/bin/analog","-G"] |
请也在此处检查
在Alpine Linux-Qiita上创建轻量级的Docker映像
http://qiita.com/pottava/items/970d7b5cda565b995fe7