cURL(https://curl./)是我喜欢的开源软件之一。虽然cURL的强大常常被认为是理所当然的,但我真心地认为它值得感谢和尊重。如果我们的工具箱失去了 如果有人想使用 如果需要,你可以编译自己的软件,并且不受限于其它人交给你的软件包,明确这一点将会给你带来自信。突然间,你脑中可能会充斥着兴奋的快感——你能够按照你喜欢的方式安装和配置任何软件,并不需要接受其它人配置中的限制。人类常常喜欢给一样东西加上自己的标记,这就是使用开源软件的令人上瘾的原因之一。 由于Docker文件系统的分离特性,它成为了完成这类事情最佳的选择。你并不需要担心安装依赖库或者运行一个糟糕的 接下来让我们一起构建一个 我们将会:
引用自 https://http2./:
简要地说,HTTP2想要解决HTTP/1.1的一些缺点,包括性能问题(https://www./http2/)。通过对前面链接中的样本用例进行测试,CloudFlare声明HTTP/2对我的电脑会有4~8倍的速度提升。能够提升网页4~8倍的速度?是的,你没有听错。 这就是支持HTTP2的curl的 FROM alpine:edge
# For nghttp2-dev, we need this respository.
RUN echo https://dl-cdn./alpine/edge/testing >>/etc/apk/repositories
ENV CURL_VERSION 7.50.1
RUN apk add --update --no-cache openssl openssl-dev nghttp2-dev ca-certificates
RUN apk add --update --no-cache --virtual curldeps g make perl && wget https://curl./download/curl-$CURL_VERSION.tar.bz2 && tar xjvf curl-$CURL_VERSION.tar.bz2 && rm curl-$CURL_VERSION.tar.bz2 && cd curl-$CURL_VERSION && ./configure --with-nghttp2=/usr --prefix=/usr --with-ssl --enable-ipv6 --enable-unix-sockets --without-libidn --disable-static --disable-ldap --with-pic && make && make install && cd / && rm -r curl-$CURL_VERSION && rm -r /var/cache/apk && rm -r /usr/share/man && apk del curldeps
CMD ['curl'] 以上的构建过程大概做了以下事情:
Alpine Linux是体积最小的Linux发行版,它重点关注于安全和速度。使用 对比常用的、没有压缩过的基础镜像(在写作时使用的是:latest标签):
想象一下,在网络上一次又一次地下载拉取这些镜像 你是否正在考虑这能否对硬盘和带宽产生同样25倍价值的提升?在某些情况下,是相等的,但是Alpine每天都在不断地改进和提高,并且提供了很多杀手锏级别的特性,比如说通过文件名来查找(例子:需要定位哪一个 让我们更深入地了解Dockerfile。 FROM alpine:edge
# For nghttp2-dev, we need this respository.
RUN echo https://dl-cdn./alpine/edge/testing >>/etc/apk/repositories 在Alpine的edge分支中, ENV CURL_VERSION 7.50.1 当cURL发布了新版本,我们想要更新镜像,我们仅仅需要修改这个文件的一处位置——环境变量, RUN apk add --update --no-cache openssl openssl-dev nghttp2-dev ca-certificates 这些是我们想要最终保留在镜像的依赖,默认证书和库是为了让 下一条RUN命令只会产生一个文件层(因此我们可以安装一些依赖,使用它们,然后清除它们,不将它们保留在最终镜像中)。这条命令内容比较多,让我们一步一步来看它们到底做了什么操作。 RUN apk add --update --no-cache --virtual curldeps g make perl && \ 以上全都是成功编译和安装 wget https://curl./download/curl-$CURL_VERSION.tar.bz2 && tar xjvf curl-$CURL_VERSION.tar.bz2 && rm curl-$CURL_VERSION.tar.bz2 && cd curl-$CURL_VERSION && \ 获得cURL的源码压缩包,解压它,删除压缩包(我们在解压后就不需要它了),然后使用 ./configure --with-nghttp2=/usr --prefix=/usr --with-ssl --enable-ipv6 --enable-unix-sockets --without-libidn --disable-static --disable-ldap --with-pic && make && make install && \ 在熟悉的 大多数的其它参数(除了 cd / && rm -r curl-$CURL_VERSION && rm -r /var/cache/apk && rm -r /usr/share/man && apk del curldeps 以上全都是清除工作。 保留构建目录(也就是二进制文件被安装的地方),去除源代码目录,运行apk del curldeps 由于以上的这些操作都属于同一个RUN命令,因此这最终会产生一个相对小的镜像层,尽管在命令最开始的时候,我们为了构建最终的产品,安装了将近212MB的依赖。如果这些操作分布在不同的层,清除操作实际上不会真正地在最终镜像上删除这些文件,相反,只是将这些文件隐藏了起来。 最后一条: CMD ['curl']
首先是构建,将 $ docker build -t yourname/curl . 一旦构建完镜像,运行镜像就显得非常直接了。让我们来检查看看一切是否按照上描述的那样工作。 $ docker run yourname/curl curl -s --http2 -I https://
HTTP/2 200
date: Sat, 06 Aug 2016 21:47:31 GMT
content-type: text/html
last-modified: Thu, 21 Jul 2016 14:06:56 GMT
etag: '5790d700-19e1'
accept-ranges: bytes
content-length: 6625
x-backend-header-rtt: 0.00166
strict-transport-security: max-age=31536000
server: nghttpx nghttp2/1.14.0-DEV
via: 2 nghttpx
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
x-content-type-options: nosniff 很好,一切正常工作。并且最终的镜像体积保持在16MB左右。这对于私人订制的curl构建来说是不错的,毕竟编译curl需要上百MB的依赖的支持。
|
|