Docker多阶段构建
发表于|更新于|容器
|浏览量:
构建 Docker 镜像的时候,我们可以在机器上直接构建,也可以使用容器来构建,保证环境的统一性, 通过容器来构建会有一个问题,就是构建使用到的工具并不需要带入到真正的运行环境, 比如说使用 nodejs 的前端项目, 构建的时候需要 nodejs 或者 npm, 但是运行的时候需要的是 nginx. 多阶段构建即为构建完成后直接将代码塞进运行容器, 不会带入构建环境.
编写 Dockerfile
vim Dockerfile
1 | FROM node:14.20.1-buster AS build |
文章作者: 张理坤
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
相关推荐
2025-09-07
Dockerfile中ADD文件的路径问题
首先看一个案例 当前目录的文件如下: 12345678[root@devops_build watcher_svr]# tree.├── 1├── 2│ └── 3└── Dockerfile1 directory, 3 files Dockerfile 文件内容如下: 123FROM node:14.20.1-busterADD * /code/WORKDIR /code 本意是想把当前目录下的所有文件放到容器内的 /code 目录, 这个时候使用 docker build 后无法启动, 进入容器, 打开 /code 一看: 123456789[root@devops_build watcher_svr]# docker run -it test bashroot@cb7543054ef2:/code# ls -altotal 12drwxr-xr-x 2 root root 4096 Sep 22 08:47 .drwxr-xr-x 1 root root 4096 Sep 22 08:47 ..-rw-r--r-- 1 root root 0 Sep 22...
2025-09-07
Docker容器间优雅的互联
本文主要介绍如何优雅的让 Docker 容器和 Docker 容器之间相互通信,以及 Docker 容器如何和宿主机进行网络通信。 容器间网络通信docker 容器间通信常见的方式是使用 –link 进行连接,但是 Docker 已经弃用这种方式,并且容器数量一旦一多,–link 会显得很乱。官方推荐使用自定义网络来进行互联。 创建自定义网络1docker network create my-network 创建容器使用自定义 network比如一个 nginx 容器需要访问 php 容器 12docker run -p 80:80 --network my-network nginxdocker run --name php --network my-network php 这个时候 nginx 可以直接通过 php 来访问 php 容器,打开/etc/hosts 可以发现是 docker 自动帮你添加了解析 容器访问主机服务可以使用容器的网关 IP 来访问(nat 网络),不过使用 ip 不优雅,旧版本的 Docker 可以使用...
2025-09-07
Docker不支持中文解决方案
ubuntu 官方镜像默认的字符集支持 C, C.UTF-8, and POSIX 查看容器使用的字符集 12345678910111213141516root@huige-demo-web-0:/var/www/html/forum/files#...
2025-09-07
Docker常用配置
docker 安装官方安装脚本1curl -fsSL get.docker.com | bash 阿里云安装(centos)12345678910111213# step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2# Step 2: 添加软件源信息sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3: 更新并安装Docker-CEsudo yum makecache fastsudo yum -y install docker-ce# Step 4: 开启Docker服务sudo systemctl start docker.service docker-compose 安装1sudo curl -L...
2025-09-07
Kubernetes 绑定Hosts的正确姿势
有的时候我们需要在容器里面绑定 hosts,比如我们用 logstash 需要消费 kafka 消息,但是 kafka 监听的地址是 hostname,这个时候就需要绑定 hosts(规范一点是做解析)在容器里面绑定 hosts 常见的方法一种是挂载主机的 hosts 文件,一种是修改容器的启动 CMD,每次启动修改 hosts,这两种方法都有个缺点,就是不受 kubelet 管理了,默认的 hosts 内容也会被覆盖掉在 k8s 环境下有更好的解决方案:那就是让 k8s 自己来管理 使用 hostAliases 来绑定 hosts12345678910111213141516171819202122232425apiVersion: apps/v1kind: Deploymentmetadata: name: logstash-k8s namespace: opsspec: replicas: 1 selector: matchLabels: app: logstash-k8s template: metadata: labels: ...

2025-05-28
PHP应用容器化遇到的一些问题
这里以 WordPress 为例,我们不用官方的镜像,而是用 php 镜像 php 官方有个自带 apache 的版本,如:php:8.1.32-apache, 建议用这个版本,这个版本不用考虑 Nginx 和 php 的文件共享问题,启动容器: 1234docker run --rm -d --name php-test \ -v ./app:/var/www/html \ -p 8080:80 \php:8.1.32-apache 自定义 php 配置文件比如调整 PHP 上传文件大小限制 docker run 的时候挂载 php.ini 123docker run ... \ -v ./php.ini:/usr/local/etc/php/conf.d/php.ini \... php.ini 增加 1upload_max_filesize = 1024M 安装 Core 扩展这个时候说明 php 正常工作了,但是缺扩展。 123FROM php:8.1.32-apacheRUN docker-php-ext-configure mysqli...
评论
公告
此博客为我记录运维工作总结所用,供网友阅读参考,如有侵权,请通知我,我会核实后进行处理。
欢迎加入技术交流群: