使用docker构建简约高效的镜像
背景介绍
最近在思考一个问题,我的golang运行到docker环境上的时候,需要安装很大依赖。思考发现我需要就是一个运行二进制的环境而已并不需要golang的编译器等等其他任何多余的。
当前的docker镜像
创建一个测试目录,主要会包含你的工程文件和一个dockerfile文件
mkdir ~/dockerfileTest
cd ~/dockerfileTest
我的hello.go和Dockerfile文件如下
CN-MAC-013:dockerfileTest frank$ cat hello.go
package main
import (
"fmt"
"time"
)
func main() {
for {
time.Sleep(time.Second * 2)
fmt.Println("Hello World")
}
}
常规的dockerfile写法
CN-MAC-013:dockerfileTest frank$ cat Dockerfile
From golang:latest
WORKDIR /app/hello
COPY ./ /app/hello
RUN go build hello.go
CMD ./hello
运行构建一个镜像
docker build -t hello-general .
查看镜像的大小
docker images
可以看到如下结果:

优化版
首先来看dockerfile,hello.go代码不变。
CN-MAC-013:dockerfileTest frank$ cat Dockerfile
From golang:latest as build-env
WORKDIR /app/hello
COPY ./ /app/hello
RUN go build hello.go
FROM alpine
WORKDIR /app/hello
COPY --from=build-env /app/hello/hello ./
CMD ./hello
通过如下方式构建
build -t hello-best .
查看镜像最终结果

总结
第二个dockerfile是从17年发布的版本中引入的一种写法,所以很多时候我们需要与时俱进学习新技术。很显然我已经落后来将近两年了,因为今天我才知道这种写法。主要参考如下这篇文章
Using Docker Multi-stage builds during development
使用docker构建简约高效的镜像的更多相关文章
- Docker构建nginx+uwsgi+flask镜像(二)
Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask ...
- docker 构建自己的image 镜像文件
docker build 构建自己的镜像文件. 1.在本地工程中运行生成一个springboot的可运行的jar. 因为我习惯用eclipse,所以在eclipse下新建一个springboot的工程 ...
- Docker构建nginx+uwsgi+flask镜像(一)
前言 笔者之前是从事Java方面的工作,自从18年5月左右来到新的公司,接触到Python,被其简单优雅的语法风格深深吸引,同时,新公司也帮助笔者打开Docker世界的大门,让笔者体会到“一次打包,到 ...
- 物联网架构成长之路(25)-Docker构建项目用到的镜像1
0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...
- Docker 构建镜像
Docker 构建镜像 1.首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容. 下面三行代码表示: 1.这三个路径要排除,不要打包进入 image 文件. 2.如果你 ...
- docker构建自定义镜像
docker构建自定义镜像 要构建一个镜像,第一步准备所需要的文件,第二步编写Dockerfile文件,比如我现在构建一个java web镜像 第一步:准备java web工程的war包文件(这里假设 ...
- Docker学习(二): 镜像的使用与构建
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- docker 构建镜像 centos7 nginx php
#docker 构建镜像(Dockerfile) centos 7.4.1078镜像制作 nginx镜像制作(以前面centos7镜像为基础) Nginx+php镜像制作 更多操作实例,查看git里的 ...
- Docker自学纪实(五) 使用Dockerfile构建php网站环境镜像
一般呢,docker构建镜像容器的方式有两种:一种是pull dockerhub仓库里面的镜像,一种是使用Dockerfile自定义构建镜像. 很多时候,公司要求的镜像并不一定符合dockerhub仓 ...
随机推荐
- D3算法编写决策树
前言 所谓构建决策树, 就是递归的对数据集参数进行“最优特征”的选择.然后按最优特征分类成各个子数据集,继续递归. 最优特征的选择:依次计算按照各个特征进行分类以后数据集的熵,各个子数据集的熵比较后, ...
- js 使用Math函数取得数组最大最少值
var arr = [3,1,2,6,7,8];
- 运行go服务器后台挂起(不看调试信息)
cd程序目录,shell输入go run+项目,接着键盘组合输入CTRL+Z,后台挂起进程. 要结束服务器,则输入fg,查看被挂起的go服务器进程,接着键盘组合输入CTRL+C,中断服务器进程. 此外 ...
- python机器可读数据-json
导入JSON数据相对简单.下面为打开.加载.导入.输出的操作. import json data = open('data.json').read() data = json.loads(data) ...
- C# 遍历所有的子控件和孙控件,包括容器中的,并批量操作和调用
这里要用两个知识,一个是递归,一个是队列. //定义一个Control类型的队列allCtrls private static Queue <Control> allCtrls = new ...
- Android软键盘的隐藏显示、事件监听的代码
把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...
- C# XML反序列化与序列化举例:XmlSerializer(转)
using System; using System.IO; using System.Xml.Serialization; namespace XStream { /// <summary&g ...
- 为什么使用zookeeper?
随着应用规模的迅速扩张,单台机器的部署已经难以支撑用户大规模.高并发的请求了, 因此服务化.集群化.分布式概念应运而生. 针对这种场景,人们通常使用的做法就是将软件按照模块进行拆分,形成独立的子系统, ...
- zabbix添加IIS网站计数器(并发连接数)详解
环境:windows server 2012 前提:IIS上要添加好配置 1,在被监控主机,powershell输入perfmon.msc 2,点击添加按钮 3,在下拉菜单中点击小箭头 ...
- Git bash命令
1.最开始使用git的时候, git remote -v 查看远程仓库 报了一个错误fatal: not a git repository (or any of the parent director ...