使用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仓 ...
随机推荐
- 关于FFmpeg工具的使用总结
FFmpeg官网:http://ffmpeg.org/ 安装ffmpeg: http://www.cnblogs.com/freeweb/p/6897907.html 主要参数: -i 设定输入流 - ...
- python简单爬虫 使用pandas解析表格,不规则表格
url = http://www.hnu.edu.cn/xyxk/xkzy/zylb.htm 部分表格如图: 部分html代码: <table class="MsoNormalTabl ...
- weblogic中部署项目通常有三种方式
在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件config.xml 进行项目的部署. 控 ...
- 解决wso2 axis2server 跑不起
wso2ei-6.1.0 运行axis2server报下面找个错误 Server could not start due to class loading issue java.lang.NoSuch ...
- StringBuffer&StringBuilder
对字符串修改时,用到StringBuffer&StringBuilder,能够多次修改对象并且不产生新的未使用对象 StringBuilder线程不安全(不能同步访问),速度有优势,多数情况下 ...
- DevExpress WinForms使用教程:皮肤颜色和LookAndFeel
[DevExpress WinForms v18.2下载] v18.2版本中更改了控制背景颜色和皮肤一起处理的方式.在v18.1中引入了Project Settings页面,其中包含一个skin se ...
- vsftp在iptables中的配置
在 /etc/vsftpd/vsftpd.conf 文件末添加以下几行 pasv_enable=YESpasv_min_port=20000pasv_max_port=20010 在 iptables ...
- Beta阶段冲刺一
Beta冲刺一 1.团队TSP 团队任务 预估时间 实际时间 完成日期 对数据库的最终完善 120 150 12.2 对学生注册功能的完善--新增触发器 150 140 11.29 对教师注册功能的完 ...
- Airbnb Javascript 代码规范重要点总结es6
中文原地址 1.对所有的引用使用 const 而非 var.这能确保你无法对引用重复赋值. 当需要变动引用时,使用let. const和let都是块级作用域. 2.创建对象的方式: const ite ...
- Swing学习2——图标添加Icon接口使用
废话没有,看代码. 主要就是通过实现Icon接口在标签添加一个圆形图标,并在框架中显示. package com.sword.swing_test; import javax.swing.*; imp ...