Docker多阶段构建
发表于|更新于|容器
构建 Docker 镜像的时候,我们可以在机器上直接构建,也可以使用容器来构建,保证环境的统一性, 通过容器来构建会有一个问题,就是构建使用到的工具并不需要带入到真正的运行环境, 比如说使用 nodejs 的前端项目, 构建的时候需要 nodejs 或者 npm, 但是运行的时候需要的是 nginx. 多阶段构建即为构建完成后直接将代码塞进运行容器, 不会带入构建环境.
编写 Dockerfile
vim Dockerfile
1 | FROM node:14.20.1-buster AS build |
文章作者: 张理坤
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
相关推荐
2026-09-18
Docker常用配置
docker 安装官方安装脚本 阿里云安装(centos) docker-compose 安装 免 root 执行 docker 命令 顺便确定一下 sock 文件有没有权限(默认是有的), 退出账户重新登录一下即可生效 阿里云 Docker 加速 或者 常用操作一次性删除所有的容器 一次性删除所有的镜像 一次性删除未打标签的镜像 一次性删除所有 volume Docker 进入容器 查看容器详情 启动容器 进入一个运行中的容器 打 tag 查看容器占用磁盘空间 查看容器 id 查看日志文件 容器备份还原镜像的备份还原 commit 将容器保存成镜像 将镜像导出成 tar (镜像是分层的,可以回滚,) 从 tar 导入镜像(镜像备份下来的 tar) 注意:以上会备份镜像的多层。 容器的备份还原 备份容器 还原成镜像 注意:备份的只是一层镜像 容器的日志日志位置docker 日志建议输出控制台,控制台日志存储在主机上 先查看 Logging Driver 类型,默认应该是 json 格式 jso...
2026-09-18
Kubernetes 绑定Hosts的正确姿势
有的时候我们需要在容器里面绑定 hosts,比如我们用 logstash 需要消费 kafka 消息,但是 kafka 监听的地址是 hostname,这个时候就需要绑定 hosts(规范一点是做解析)在容器里面绑定 hosts 常见的方法一种是挂载主机的 hosts 文件,一种是修改容器的启动 CMD,每次启动修改 hosts,这两种方法都有个缺点,就是不受 kubelet 管理了,默认的 hosts 内容也会被覆盖掉在 k8s 环境下有更好的解决方案:那就是让 k8s 自己来管理 使用 hostAliases 来绑定 hosts 进入容器查看 hosts 文件 这个 hosts 包括两个部分,一部分是容器自带的 hosts,另一部分是我们自己添加的 在 docker 下绑定 hosts运行时候修改docker 可以通过 –add-host 参数来添加 hosts 信息到容器的/etc/hosts 文件中 构建时修改Dockerfile 中,可以在 CMD 命令下进行修改,在 RUN 里面修改会提示文件只读无法修改。 在 docker-c...
2026-03-01
使用kubeadm部署一套高可用k8s集群1.34 for Ubuntu
基于 ubuntu 使用 kubeadm 搭建集群, centos部署文档, 有疑问的地方可以看 官方文档 准备机器 我的机器详情如下, 配置至少为 4C4G hostname IP 作用 master1 10.0.0.11 k8s master 节点 master2 10.0.0.12 k8s master 节点 master3 10.0.0.13 k8s master 节点 worker1 10.0.0.21 k8s worker 节点 worker2 10.0.0.22 k8s worker 节点 每台机器都做域名解析,或者绑定 hosts(可选但建议) 基础环境配置 基础环境是不管 master 还是 worker 都需要的环境 禁用 swap 确保每个节点上 MAC 地址和 product_uuid 的唯一性 sudo cat /sys/class/dmi/id/product_uuid 修改 hostname 允许 iptables 检查桥接流量 关闭防火墙 安装 runtimeContainerdDocker先决条...
2026-09-18
快速搭建ipsec Vpn
安装 Docker 启动服务 将 ikev2-vpn-data 文件复制到本地在 ikev2-vpn-data 目录中,证书或配置文件的位置: 操作系统 文件名 备注 Windows 和 Linux vpnclient.p12 Windows10 & 11 按照下文配置 VPN Android vpnclient.sswan 安卓需要安装 strongSwan 软件 Apple 设备 vpnclient.mobileconfig 导入描述文件即可 windows 客户端配置导入证书 证书会导入到 受信任的根证书颁发机构 IKEv2 VPN CA 另外,你也可以手动导入 .p12 文件。在导入证书后,你必须确保将客户端证书放在 “ 个人 -> 证书 “ 目录中,并且将 CA 证书放在 “ 受信任的根证书颁发机构 -> 证书 “ 目录中。 创建 VPN 连接在 Windows 计算机上添加一个新的 IKEv2 VPN 连接。对于 Windows 8.x 和 10,推荐从命令提示符运行以下命令创建 VPN 连接,以达到更佳的安全...

2025-03-24
java容器entrypoint.sh参数传递的隐藏陷阱
构建容器镜像对运维来说已经轻车熟路了,但是最近遇到个问题百思不得其解,准确的说就是手动执行 java -jar 带上所有参数,可以正常启动,但是打包成镜像就会报错: 先附上 entrypoint.sh Dockerfile: 看起来很正常对吧,但是启动报错: 查看控制台,echo 出来的 JAVA_CMD 变量也是正常的 中间排查过程忽略,最后增加了 set -x 参数后,重新打包镜像,再次查看控制台输出: 注意以 + 开头的输出 这里 java 启动命令是被解析成了单引号引用,所以造成无法启动。把 java 启动参数中的环境变量双引号去掉,可以正常启动了。 罪魁祸首:Shell 变量展开的分词机制问题的本质在于 Shell 脚本中变量展开时的参数分割规则。当我们使用 "$VAR" 这种带引号的写法时,变量值中的所有内容会被视为一个整体参数,即使其中包含空格也不会被分割。而 Java 虚拟机要求每个参数必须作为独立的命令行参数传递。
2026-09-18
docker官方私有仓库registry部署与使用
一般来说大家用容器镜像都选择 harbor,有个管理界面,还支持权限控制、漏洞扫描等,但是我公司有个客户的环境只允许通过跳板机登录 Linux 机器,没法使用浏览器,另外也只是需要一个简单一点的、好维护的仓库,找了一下,这个比较简单。如果需要更专业的私有镜像仓库,可以选择 harbor(免费)或者 jFrog 家的(收费) 自签名证书 docker 信任证书将文件复制到每个 Docker 上 主机。您无需重新启动 Docker。 如果更换了默认端口,这里的文件夹也要加上端口,比如 /etc/docker/certs.d/hub.i.com:8000/ 部署服务 常用的 API假设镜像名为:hub.i.com/iuxt/test:latest 垃圾回收在 Docker Registry 配置文件 config.yml 中,启用删除功能: 执行垃圾回收操作 附:自签证书以及配置 OS 信任 CA 证书:制作和使用自签名证书快速签发证书小工具:https://github.com/iuxt/my_cert
公告
此博客为我记录运维工作总结所用,供网友阅读参考,如有侵权,请通知我,我会核实后进行处理。
欢迎加博主微信,进微信运维技术交流群:
