如何优雅的使用DockerFile
1003 字
5 分钟
如何优雅的使用DockerFile
此教程以个人博客为例,提供些自己使用的技巧,并分享几个以前用过的示例
一般需要两个镜像
- 基础镜像,里面安装好打包环境,并下载依赖包,可以写脚本定时更新基础镜像
- 服务运行环境,比如我博客需要个 nginx 服务,golang 的话选好系统直接运行就行
1 基础镜像制作
FROM node:16.14.2-alpine3.15 # 获取npm环境镜像RUN npm config set registry http://registry.npm.taobao.org/ && \ # 修改镜像源,要不下依赖包特别慢npm i -g npm@8.8.0 && \ # 更新npmnpm i -g hexo@5.4.2 && \ # 安装hexpmkdir /opt/blog && \ # 创建博客打包目录cd /opt/blog && \ # 进入博客目录 hexo i && \ # hexo初始化 rm -rf source _config.landscape.yml _config.yml && \ # 删除默认的配置文件 npm uninstall hexo-theme-landscape && \ # 安装依赖包 npm cache clean --force # 清空缓存
COPY source_data/ /opt/blog/ # 把我自己的博客配置拷到容器里WORKDIR /opt/blog/ # 指定运行目录RUN npm i # 容器运行命令1.1 基础镜像可以加上清空缓存命令来减少镜像体积
一些常见的包管理器删除缓存的方法:
| yum | yum clean all |
|---|---|
| dnf | dnf clean all |
| npm | npm cache clean —force |
| pip | rm -rf ~/.cache/pip/* |
| apt-get | apt-get clean |
2 运行业务容器镜像制作
FROM ccr.ccs.tencentyun.com/ccops/hexo:5.4.2-1 AS build-env # 刚才制作的基础镜像ADD . /opt/blog/source/_posts # 文章拷贝到指定目录WORKDIR /opt/blog/source/_posts # 指定工作目录RUN rm -rf /opt/blog/source/_posts/Dockerfile /opt/blog/source/_posts/deployment.yaml # 删除多余文件,要不然我这里打包会报错RUN hexo g # 进行打包
FROM ccr.ccs.tencentyun.com/ccops/nginx:1.21.6-alpine # 运行服务容器,这里我只修改了下日志格式RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 指定时区COPY --from=build-env /opt/blog/public/ /opt/blog # 将上个构建的产物复制到当前目录,名字一样(build-env)EXPOSE 80 # 对外暴露端口WORKDIR /opt/blog # 工作目录CMD ["nginx","-g","daemon off;"]2.1 多阶段构建
- 能复用 Pipeline,不用每个语言都写个打包 task
- 减少体积,业务运行容器只存在代码
- 保证构建镜像的安全性,最终构建的镜像将不包含任何源代码信息
3 维护镜像
3.1 下载工具
3.2 安装
因为安装到了/usr/local/bin/dive 下,可能会出现直接执行不了的情况,指定路径或者挪到/usr/bin 下
rpm -ivh dive_0.10.0_linux_amd64.rpm
3.3 使用
dive 镜像名或镜像 id
可以看到比较重要的信息,我哪层用的空间哪个文件比较大

3.4 快捷键
| 快捷键 | 描述 |
|---|---|
| Ctrl + C | 退出 |
| Tab | 在层和文件树视图之间切换 |
| Ctrl + F | 筛选 |
| PageUp | 向上滚动页面 |
| PageDown | 向下滚动页面 |
| Ctrl + A | 镜像视图:查看聚合图像修改 |
| Ctrl + L | 镜像视图:查看当前图层修改 |
| Space | 文件树视图:折叠/取消折叠目录 |
| Ctrl + Space | 文件树视图:折叠/展开所有目录 |
| Ctrl + A | 文件树视图:显示/隐藏添加的文件 |
| Ctrl + R | 文件树视图:显示/隐藏已删除的文件 |
| Ctrl + M | 文件树视图:显示/隐藏修改的文件 |
| Ctrl + U | 文件树视图:显示/隐藏未修改的文件 |
| Ctrl + B | 文件树视图:显示/隐藏文件属性 |
| PageUp | Filetree 视图:向上滚动页面 |
| PageDown | Filetree 视图:向下滚动页面 |
4 其他一些例子
4.1 Java
FROM harbor.rx.cn:80/rongxin/maven:3.5.0-jdk-8-alpine AS build
# 拷贝源代码ADD ./pom.xml pom.xmlADD ./src src/
# 构建jar包,mvn clean package -U -Dmaven.test.skip=true
FROM harbor.rx.cn:80/rongxin/basic:java8RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 拷贝程序COPY --from=builder target/*.jar /var/app/# 配置jvmENV JVM_PARAMS="-Xmx4096m -Xms4096m -Xmn1536m -Xss256k -XX:+UseConcMarkSweepGC -XX:+UseCompressedClassPointers -XX:+PrintGCDetails -XX:+PrintGC -XX:+PrintGCTimeStamps -Xloggc:/var/app/logs/$APPLICATION_NAME/gc/gc.log -verbose:gc"# 开放端口EXPOSE 8080EXPOSE 5000 # 远程调试接口# 使用tiniENTRYPOINT ["/sbin/tini","--"]# 配置功能,不需要的删除就行# JAVA_DEBUG_PROT,远程debug# JAVA_AGENT,SkyWalking客户端CMD java -jar -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE $JVM_PARAMS $JAVA_START $JAVA_AGENT /var/app/*.jar4.2 Golang
FROM ccr.ccs.tencentyun.com/ccops/golang:1.17.8 AS build-envENV GOPROXY https://goproxy.cnADD . /go/src/appWORKDIR /go/src/appRUN go mod tidyRUN GOOS=linux GOARCH=386 go build -v -o /go/src/app/app-serverFROM ccr.ccs.tencentyun.com/ccops/alpine:3.15.3RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \ apk add -U tzdataRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeCOPY --from=build-env /go/src/app/app-server /usr/local/bin/app-serverEXPOSE 8080CMD [ "app-server" ]文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
OpenClaw安装
💻Linux 龙虾安装笔记
2
Kubespray 国内安装k8s集群
🐳云原生 最可靠的k8s安装工具
3
如何安全的备份Kubernetes
🐳云原生 如何安全的备份Kubernetes
4
KubeSsphere 4 使用
🐳云原生 KubeSsphere 4 使用记录
5
GPU Operator 使用
🐳云原生 监控ingress服务访问日志,实现web监控
随机文章 随机推荐