镜像类型
- 通用镜像:例如 ubuntu:latest 是一种通用镜像
- 专用镜像:例如 golang:1.17 则是一种专用镜像。
通用镜像
- 使用通用镜像构建符合业务特定要求的镜像,例如特定的工具链和依赖,特定的构建环境和安全工具等。
- 单纯作为业务的运行环境,常见于多阶段构建。
第一种场景Dockerfile举例
# syntax=docker/dockerfile:1
FROM ubuntu:latest
COPY . .
RUN apt-get update && apt install -y golang-go
RUN go build
常见的通用镜像如图:
在生产环境下,综合镜像的通用性、可调式、安全和镜像大小等各方面因素,最推荐使用ubuntu:latest、debian:slim 和 alpine:latest这三个通用镜像。其中,前两个镜像在本质上其实是同一个类型,而 Alpine 则是一个特殊的 Linux 发行版。
专用镜像
专用镜像提供了特定语言的编译和运行环境,绝大多数语言都有 Docker 官方维护的专用镜像。在实际工作中,专用镜像一般有下面两种使用场景。
- 作为解释型语言的运行镜像使用,例如 python:latest、php:8.1-fpm-buster 等。
- 作为编译型语言多阶段构建中编译阶段的基础镜像使用,例如 golang:latest。
此文章为3月Day05学习笔记,内容来源于极客时间《云原生架构与 GitOps 实战》,强烈推荐该课程!