docker镜像的构建

docker镜像的构建

1.Dockerfile

Dockerfile是构建docker镜像的脚本,它里面会告诉docker镜像构建程序如何构建一个特定的docker镜像

2.overlayer

overlayer是docker镜像的镜像层,每一个docker镜像由多个overlayer的组成,由于docker镜像存储使用了联合文件系统,每一个docker镜像由多个overlayer组成,多个docker镜像相同的overlayer进行共用,这使得不管是存储docker镜像还是运行docker容器,这都极大的节省了空间

3.Dockerfile语法

1
2
3
4
5
6
7
FROM ubuntu:latest       #以什么镜像为基础构建镜像
MANTAINER bugprogram-git #镜像的构建人
ENV hello=world #设置环境变量,在镜像运行时,此参数仍然生效
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
&& apt update -y && apt upgrade -y \
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

4.docker镜像构建

1
2
3
docker build -t myubuntu:latest -f ./Dockerfile .
#-f指定dockerfile文件名
#-t指定构建的镜像名和tag

5.docker镜像多阶段构建

在实际构建docker镜像的过程中,有时候可能要先构建成中间产物,比如部署项目时,我们可能要先部署编译环境,然后构建成可执行程序的时候,然后在清理中间产物,导致整个构建过程十分的繁琐,因此自从Docker 17.05.0-ce之后,docker支持了多阶段构建镜像

例如,部署golang程序,我们首先在golang的docker镜像上将源码编译成可执行程序,再将可执行程序部署到alpine镜像上构建成docker镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
	
FROM golang:alpine as builder
WORKDIR /
COPY ./hello.go .
RUN go build -o hello ./hello.go

FROM alpine
MAINTAINER bugprogram-git
WORKDIR /
COPY --from=builder /hello . #从上述构建的镜像中拷贝可执行程序拷贝到此镜像中
RUN chmod +x hello
ENTRYPOINT /hello

6.常用的docker基础镜像

alpine
最常用的docker基础镜像,非常小,只有几MB,libc使用的musllib,和glibc不兼容,因此部署的可执行程序需要在musllib作为libc时进行编译,否则无法运行
centos
常用的运行环境,centos由于其稳定性是企业中最常用的linux发行版,
ubuntu
常用的编译环境,libc为glibc


docker镜像的构建
https://dreamaccount.github.io/2023/03/05/docker镜像的构建/
作者
404NotFound
发布于
2023年3月5日
许可协议