教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 以alpine作为基础镜像构建Golang可执行程序

以alpine作为基础镜像构建Golang可执行程序

发布时间:2022-03-21   编辑:jiaochengji.com
教程集为您提供以alpine作为基础镜像构建Golang可执行程序等资源,欢迎您收藏本站,我们将为您提供最新的以alpine作为基础镜像构建Golang可执行程序资源
<h3 style="margin-left:0cm;"><span style="color:#333333;">Alpine介绍</span></h3>

<span style="color:#333333;">       Alpine</span> <span style="color:#333333;">操作系统是一个面向安全的轻型</span> <span style="color:#333333;">Linux</span> <span style="color:#333333;">发行版。它不同于通常</span> <span style="color:#333333;">Linux</span> <span style="color:#333333;">发行版,</span><span style="color:#333333;">Alpine</span> <span style="color:#333333;">采用了</span> <span style="color:#333333;">musl libc</span> <span style="color:#333333;">和</span> <span style="color:#333333;">busybox</span> <span style="color:#333333;">以减小系统的体积和运行时资源消耗,但功能上比</span> <span style="color:#333333;">busybox</span> <span style="color:#333333;">又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,</span><span style="color:#333333;">Alpine</span> <span style="color:#333333;">还提供了自己的包管理工具</span> <span style="color:#333333;">apk</span><span style="color:#333333;">,可以通过</span> <span style="color:#333333;">https://pkgs.alpinelinux.org/packages</span> <span style="color:#333333;">网站上查询包信息,也可以直接通过</span> <span style="color:#333333;">apk</span> <span style="color:#333333;">命令直接查询和安装各种软件。</span>

<span style="color:#333333;">       Alpine</span> <span style="color:#333333;">由非商业组织维护的,支持广泛场景的</span> <span style="color:#333333;">Linux</span><span style="color:#333333;">发行版,它特别为资深</span><span style="color:#333333;">/</span><span style="color:#333333;">重度</span><span style="color:#333333;">Linux</span><span style="color:#333333;">用户而优化,关注安全,性能和资源效能。</span><span style="color:#333333;">Alpine</span> <span style="color:#333333;">镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统</span><span style="color:#333333;">/</span><span style="color:#333333;">环境。</span>

<span style="color:#333333;">       Alpine</span><span style="color:#333333;"> Docker </span><span style="color:#333333;">镜像也继承了</span> <span style="color:#333333;">Alpine Linux</span> <span style="color:#333333;">发行版的这些优势。相比于其他</span> <span style="color:#333333;">Docker</span> <span style="color:#333333;">镜像,它的容量非常小,仅仅只有</span><span style="color:#333333;"> 5 MB </span><span style="color:#333333;">左右(对比</span> <span style="color:#333333;">Ubuntu</span> <span style="color:#333333;">系列镜像接近</span> <span style="color:#333333;">200 MB</span><span style="color:#333333;">),且拥有非常友好的包管理机制。官方镜像来自</span> <span style="color:#333333;">docker-alpine</span> <span style="color:#333333;">项目。</span>

<span style="color:#333333;">       目前</span><span style="color:#333333;"> Docker </span><span style="color:#333333;">官方已开始推荐使用</span> <span style="color:#333333;">Alpine</span> <span style="color:#333333;">替代之前的</span> <span style="color:#333333;">Ubuntu</span> <span style="color:#333333;">做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。</span>

<span style="color:#333333;">下表是官方镜像的大小比较:</span>

<pre class="has"><code>REPOSITORY TAG IMAGE ID VIRTUAL SIZE alpine latest 4e38e38c8ce0 4.799 MB debian latest 4d6ce913b130 84.98 MB ubuntu latest b39b81afc8ca 188.3 MB centos latest 8efe422e6104 210 MB </code></pre>

        Alpine和其他通用Linux发行版对于Golang编译出来的可执行文件要求有所不同,Alpine要求可执行文件必须是静态链接的可执行文件。

        所以在编译Golang时需要添加 -tags netgo ,来生成静态链接的可执行文件。

 

<h3 style="margin-left:0cm;">示例:</h3>

代码示例:每三秒控制台输出一次消息,输出100次

<pre class="has"><code class="language-Go">package main import ( "fmt" "time" ) func main() { for i := 0 ; i< 100 ; i { fmt.Println("hello,",i) time.Sleep(time.Second*3) } } </code></pre>

编译成静态链接的可执行文件:

<pre class="has"><code class="language-bash">go build -tags netgo -o test</code></pre>

 

Dockerfile的参考内容:

 

<pre class="has"><code class="language-bash">FROM alpine:latest ADD test /usr/local/bin/ # Alpine Linux doesn't use pam, which means that there is no /etc/nsswitch.conf, # but Golang relies on /etc/nsswitch.conf to check the order of DNS resolving # (see https://github.com/golang/go/commit/9dee7771f561cf6aee081c0af6658cc81fac3918) # To fix this we just create /etc/nsswitch.conf and add the following line: RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf WORKDIR /usr/local/bin/ CMD ["test"] </code></pre>

 

构建镜像、运行容器即可

 

感谢:https://yeasy.gitbooks.io/docker_practice/content/cases/os/alpine.html

到此这篇关于“以alpine作为基础镜像构建Golang可执行程序”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
以alpine作为基础镜像构建Golang可执行程序
使用Docker部署PHP开发环境的方法详解
创建优化的Go镜像文件以及踩过的坑
golang微服务框架对比_Golang 微服务教程(二)
golang在alpine中的坑
Drone 自定义 UI
数据结构和算法(Golang实现)(7)简单入门Golang-标准库
docker golang 开发环境
Docker基础及其原理(一)
持续集成与持续部署宝典Part 1:将构建环境容器化

[关闭]
~ ~