部署的docker image总是太大,怎么办?
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/golang 1.10 d0e7a411e3da 5 days ago 794 MB
docker.io/alpine latest 11cd0b38bc3c 2 weeks ago 4.41 MB
docker 官方golang镜像动不动就几百MB,所以我们只能下载一些优化image 比如apline, 相比官方的镜像,小了一半,有些甚至只有几MB大小。
但是会有bug如下:Get https://google.com: x509: failed to load system roots and no roots provided
解决方案就是要添加这个语句在编译文件里面
RUN apk --no-cache add ca-certificates
如果你docker版本是17.05+ 支持多重编译的新特性就可以使用下面的例子,如果不是,就要自己分步执行,操作了。
FROM golang:1.7.3 as builderWORKDIR /go/src/github.com/alexellis/href-counter/RUN go get -d -v golang.org/x/net/html COPY app.go .RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .FROM alpine:latest RUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /go/src/github.com/alexellis/href-counter/app .CMD ["./app"] 最终编译出来的大小
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app_in_apline latest 0cb99ea67ced 2 minutes ago 11.1 MB
但是有一个问题就是上述的开发,编译环境不一致,不如使用同一个库里面开发生产镜像
FROM golang:alpine as build RUN apk --no-cache add git ADD . /go/src/github.com/Example/pls3
WORKDIR /go/src/github.com/Example/pls3/cmd/pls3
RUN go get && go install -v FROM alpine:latest WORKDIR /
COPY --from=build /go/bin/pls3 /pls3
RUN apk --no-cache add ca-certificates && update-ca-certificates ARG COMMIT
ENV COMMIT ${COMMIT} ENTRYPOINT ["/pls3"]
总结,如果编译开发image比较大,生产运行的image比较小, 所以在开发镜像开发编译可执行文件,编译的时候加上参数build -a,合入所有依赖到执行文件里面,生产镜像布署,但是一个问题就是生产镜像少东西,还得配置。如果为不配置,而选择完备的镜像,大小又是几百MB,又太大。
ps:删除多余的镜像语句
for i in $(sudo docker images | gawk '{if (NR>1){print $3}}' | head -n 4) ;do sudo docker rmi $i -f ; done;
I doing a hack similar to above posts of get the local IP to map to a alias name (DNS) in the container. The major problem is to get dynamically with a simple script that works both in Linux and OSX the host IP address. I did this script that works in both environments (even in Linux distribution with "$LANG" != "en_*" configured):
ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1
So, using Docker Compose, the full configuration will be:
Startup script (docker-run.sh):
export DOCKERHOST=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)
docker-compose -f docker-compose.yml up
docker-compose.yml:
myapp:
build: .
ports:
- "80:80"
extra_hosts:
- "dockerhost:$DOCKERHOST"
Then change http://localhost to http://dockerhost in your code.
For a more advance guide of how to customize the DOCKERHOST script, take a look at this post with a explanation of how it works.
部署的docker image总是太大,怎么办?的更多相关文章
- Docker 的 Image 太大,怎么变小?
铛~铛~铛~Docker即将颠覆整个软件产业,从云计算平台到软件开发.测试,整个SDLC都会极度依赖Docker. 圈子里面一定有很多讨论Docker的话题,简而言之,Docker其实只解决一个问题: ...
- Docker目录/var/lib/docker/containers文件太大
Docker在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法. 查出占用磁盘较大的文件 Docker 的日志文 ...
- nopCommerce 3.9 大波浪系列 之 使用部署在Docker中的Redis缓存主从服务
一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- 容器部署解决方案Docker
容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...
- 使用Docker容器的十大误区
转自:http://www.dockone.io/article/1264 对于用户来说,可能一开始在不了解的情况下会对容器报以拒绝的态度,但是在尝到容器的甜头.体验到它的强大性能之后,相信大家最终是 ...
- .NET Core Web 应用部署到 Docker 中运行
环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...
- docker:(5)利用docker -v 和 Publish over SSH插件实现war包自动部署到docker
在 docker:(3)docker容器挂载宿主主机目录 中介绍了运行docker时的一个重要命令 -v sudo docker run -p : --name tomcat_xiao_volume ...
- 解决SpringBoot jar包太大的问题
转载 2017年09月18日 09:21:53 577 SpringBoot的web应用一般都添加了spring-boot-maven-plugin插件. Maven xml代码 <buil ...
随机推荐
- vue-创建新项目
1.安装node,下载地址:https://nodejs.org/en/download/ 2.安装完成后打开cmd,输入node-v,出现版本信息说明安装成功 3.输入npm install -g ...
- spring boot slf4j日记记录配置详解
https://blog.csdn.net/liuweixiao520/article/details/78900779
- call、apply、bind
***call,apply,bind 替换this 何时: 只要this不是想要的都可用call,apply,bind替换 选择: call/apply: *调用*函数,在调用时,*临时*替换函数中的 ...
- APP,H5测试要点
APP测试重点 一,运行测试 运行过程中,是否有加载提示: 运行速度是否流畅: 各个模块之间的切换是否正常: 二,更新测试:打开旧版app时,是否有更新提示,且在不同的手机版本上都能更新成功:打开新版 ...
- 网页布局之grid
学习网格布局时,你可能会在网络上看到很多文章,内容不同,属性不同,真是让人摸不着头脑,到底哪个才是正确的?看了本篇文章,我想你会豁然开朗.比如,一会儿用grid-rows,一会儿用grid-defin ...
- The Apache HBase™ Reference Guide
以下内容由http://hbase.apache.org/book.html#getting_started节选并改编而来. 运行环境:hadoop-1.0.4,hbase-0.94.22,jdk1. ...
- svn没有权限报出的错
- spring-boot-maven-plugin 安装本地jar 包
本地使用nexus 进行maven仓库管理.项目deploy 引入之后,总是找不到jar中定义的class或者配置文件等. 从截图上可以看到虽然class文件是有的,但是引用的时候却是找不到的. Sp ...
- Spring 使用 feign时设置header信息
最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式.但是遇到一个问题:个别请求是要设置header的. 于是,查看官方文档和博客,大致推荐两种方式.也可能是我没看明 ...
- Vue(二十六)父子组件通信
今天写了一个分页公共组件,就出现了父子组件通信的问题,今天来总结下我遇到的父子组件通信问题 一.子组件调取父组件的数据或方法 (1)props 想要把父组件的值,传到子组件中,使用props 比如你在 ...