一、基于scratch构建简单的镜像

1、准备一个可执行文件

(1)搭建C编译环境

  • 安装gcc
yum install gcc
  • 安装glibc-static静态库
    修改/etc/yum.repos.d/centos.repo文件,将其crb节的enabled值改为1
yum install glibc-static

在这里插入图片描述

(2)创建scratch-img目录

mkdir scratch-img
cd scratch-img/
vi hello.c

hello.c文件内容:

#include <stdio.h>
int main(void)
{
	printf("Hello,Docker!\n");
	return 0;
}

(4)执行gcc命令编译该源程序生成可执行文件,然后进行测试

gcc hello.c -static -o hello

./hello

在这里插入图片描述

2、基于scratch构建镜像

(1)创建Dockerfile文件

vi Dockerfile

文件内容:

FROM scratch
ADD hello /
CMD ["/hello"]

(2)构建镜像

docker build --tag hello .

在这里插入图片描述
(3)查看新构建的hello镜像基本信息

docker images --filter "reference=hello"

在这里插入图片描述
可见其大小为861kB
查看要运行的二进制hello的大小

ls -lh hello

在这里插入图片描述
可见其大小为842kB
由此得:基于scratch构建的镜像的大小与加入镜像的二进制文件的大小差距很小。
(4)运行新镜像

docker run --rm hello

在这里插入图片描述
输出内容相同!

scratch-img目录内容
这里是引用

二、制作基于VNC的Firefox镜像

(1)建立一个目录名为fx-vnc

mkdir fx-vnc

在这里插入图片描述

(2)在该目录下创建Dockerfile

cd fx-vnc
vi Dockerfile

Dockerfile内容

FROM ubuntu:20.04

# 安装 VNC、Xvfb 和 Firefox
# 1. 换源
RUN sed -i 's@http://.*.ubuntu.com@http://mirrors.aliyun.com@g' /etc/apt/sources.list \
 && apt-get clean \
 && apt-get update -y
RUN apt update && apt install -y x11vnc xvfb firefox

# 创建 VNC 配置目录
RUN mkdir ~/.vnc

# 设置 VNC 登录密码为 1234
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd

# 启动时自动运行 Firefox(添加到 .bashrc)
RUN bash -c 'echo "firefox" >> /.bashrc'

# 暴露 VNC 默认端口
EXPOSE 5900

# 启动 Xvfb 和 x11vnc
CMD ["x11vnc", "-forever", "-usepw", "-create"]

(3)构建镜像

docker build --tag fx-vnc .

在这里插入图片描述

(4)运行这个新镜像启动容器

docker run --rm -p 5900:5900 fx-vnc

在这里插入图片描述

(5)安装VNC客户端

yum install tigervnc

三、多阶段构建镜像

(1)创建目录名为multi_build

 mkdir multi-build

(2)在该目录下编写程序文件

vi main.go

文件内容:

package main
import "fmt"
func main() {
	fmt.Println("Hello World!")
}

(3)在该目录下创建Dockerfile文件

Dockerfile文件内容:

# 第1阶段:构建阶段,命名为 build
FROM golang:1.21 AS build
WORKDIR /src
COPY main.go ./
RUN go build -o /bin/hello ./main.go

# 第2阶段:运行阶段,基于 scratch 构建最小镜像
FROM scratch
COPY --from=build /bin/hello /bin/hello
CMD ["/bin/hello"]

在这里插入图片描述

(4)构建镜像

docker build -t go-hello-world .

在这里插入图片描述

(5)运行镜像,启动容器

docker run --rm go-hello-world

在这里插入图片描述

四、谢谢观看!

更多推荐