构建Docker镜像(amd64,aarch64)

构建Docker镜像(amd64,aarch64)

工作环境:debian 12.11

sources.list内容:

1 deb http://mirrors.aliyun.com/debian/ bookworm main non-free contrib
2 deb http://mirrors.aliyun.com/debian-security/ bookworm-security main non-free contrib
3 deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free contrib
4 deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free contrib

1、Docker部署

 从官方仓库安装

1.1 卸载旧版Docker

1 sudo apt purge docker.io docker-doc docker-compose podman-docker containerd runc
2 sudo rm -rf /var/lib/docker /var/lib/containerd
3 sudo apt update && sudo apt upgrade -y

1.2 添加Docker GPG密钥

1 sudo install -m 0755 -d /etc/apt/keyrings
2 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
3 sudo chmod a+r /etc/apt/keyrings/docker.gpg

1.3 添加Docker仓库

1 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
2 https://download.docker.com/linux/debian bookworm stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

1.4 安装核心组件

1 sudo apt update
2 sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

 2、构建基础镜像(amd64)

2.1 安装debootstrap工具

1 sudo apt update
2 sudo apt install debootstrap -y

2.2 获取Debian12 rootfs文件

1 sudo debootstrap --arch=amd64 bookworm debian-rootfs http://deb.debian.org/debian

说明:

  • --arch=amd64:指定架构为 64 位。
  • bookworm:Debian 12 的代号。
  • debian-rootfs:目标目录。
  • http://deb.debian.org/debian:Debian 仓库地址。

 2.3 编写Dockerfile文件

FROM scratch     # 使用 scratch 作为基础镜像
COPY debian-rootfs/ /     # 复制根文件系统
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 设置环境变量
RUN apt-get clean && rm -rf /var/lib/apt/lists/* # 删除不必要的包缓存
CMD ["/bin/bash"] # 设置默认命令

 2.4 构建镜像

1 sudo docker build -f Dockerfile -t bsoft-debian12:v1.0.0 .

2.5 运行镜像

1 sudo docker run -it bsoft-debian12:v1.0.0

 3、构建基础镜像(aarch64)

3.1 确定系统支持arm64架构

确认当前系统支持arm64架构,可通过一下命令来添加和启用支持的架构:

1 sudo dpkg --add-architecture arm64
2 sudo apt update

 3.2 安装相关架构的依赖

1 sudo apt install debootstrap qemu-user-static

3.3 使用debootstrap构建基础系统

sudo debootstrap --arch=arm64 bookworm debian-rootfs http://deb.debian.org/debian

3.4 使用qemu进行模拟

由于是在x86_64上构架arm64镜像,所以需要用qemu来你们arm64架构环境。将qemu_aarch64_static复制到根文件系统中。这样就可以在chroot环境中模拟arm64架构。

sudo cp /usr/bin/qemu-aarch64-static debian-rootfs/usr/bin/

3.5 进入chroot环境

接下来,你需要 chroot 进入创建的根文件系统。这将让你在 arm64 环境中进行进一步的设置。

sudo chroot debian-rootfs

3.6 完成第二阶段的安装

在进入 chroot 环境后,运行 debootstrap 的第二阶段,以便完成 Debian 系统的安装。

/debootstrap/debootstrap --second-stage

 如果提示debootstrap命令不存在,则可以先退出chroot环境;然后需要将一些必需的文件系统挂载到新系统中:

mount --bind /proc ./debian-rootfs/proc
mount --bind /sys  ./debian-rootfs/sys
mount --bind /dev ./debian-rootfs/dev
mount --bind /run  ./debian-rootfs/run

然后再进入chroot进行后续配置操作(此时就无需/debootstrap/debootstrap --second-stage命令了)。

退出chroot环境后,记得:

umount ./debian-rootfs/dev
umount ./debian-rootfs/proc
umount ./debian-rootfs/sys
umount ./debian-rootfs/run

3.7 配置arm64系统

可以在 chroot 环境内完成其他配置,例如设置网络、安装额外的软件包、配置时区等。

  • 配置时区:
dpkg-reconfigure tzdata
  • 安装常用软件包
1 apt update
2 apt install build-essential

 3.8 退出chroot环境

1 exit

3.9 构建镜像

使用 docker buildx 构建你的 Docker 镜像:

sudo docker buildx build --platform linux/arm64 -t bsoft-debian-bookworm-aarch64:v1.0.0 .
  • --platform linux/arm64:指定构建的目标平台是 arm64
  • -t bsoft-debian-bookworm-aarch64:为你的镜像命名。

 4 openeuler-20.03-lts-sp2 aarch64平台构建docker镜像(主机有代理情况)

 环境

  • os: openeuler 24.03(LTS)
  • chips:Kunpeng-920 (aarch64)
  • docker:Docker version 25.0.3, build 4debf41

 4.1 获取openEuler 20.03基础镜像

下载openEuler-docker.aarch64.tar.xz。下载路径为:

https://repo.openeuler.org/openEuler-20.03-LTS-SP2/docker_img/aarch64/openEuler-docker.aarch64.tar.xz

然后导入基础镜像:

docker load -i openEuler-docker.aarch64.tar.xz
docker images

4.2 构建PostgreSQL aarch64版本镜像

  • 编写Dockerfile文件
FROM openeuler-20.03-lts-sp2:latest

# 安装官方仓库的 PostgreSQL
RUN dnf update -y && \
    dnf install -y postgresql-server postgresql-contrib && \
    dnf clean all

# 创建必要的目录
RUN mkdir -p /var/lib/pgsql/data && \
    chown -R postgres:postgres /var/lib/pgsql

# 设置环境变量
ENV PGDATA=/var/lib/pgsql/data
ENV POSTGRES_PASSWORD=postgres
ENV POSTGRES_USER=postgres
ENV http_proxy=${http_proxy}
ENV https_proxy=${https_proxy}
ENV no_proxy=${no_proxy}

# 初始化数据库
USER postgres
RUN initdb -D $PGDATA --encoding=UTF8 --locale=C

# 配置允许远程连接
RUN echo "listen_addresses = '*'" >> $PGDATA/postgresql.conf && \
    echo "host all all 0.0.0.0/0 md5" >> $PGDATA/pg_hba.conf && \
    echo "local all all md5" >> $PGDATA/pg_hba.conf

# 设置默认命令直接启动 PostgreSQL
USER postgres
CMD ["postgres", "-D", "/var/lib/pgsql/data", "-c", "config_file=/var/lib/pgsql/data/postgresql.conf"]
  • 构建镜像
docker build -f Dockerifle --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy  --build-arg no_proxy=$no_proxy -t bsoft-pg-aarch64:v1.0.0 .
  • docker-compose脚本
#dc-pg.yml
services:
  db-pg:
    image: bsoft-pg-aarch64:ori
    restart: always
    container_name: bsoft-pg-aarch64-ori
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
      - http_proxy=${http_proxy}
      - https_proxy=${https_proxy}
      - no_proxy=${no_proxy}
    volumes:
      - /etc/localtime:/etc/localtime:ro
    #ports:
    #  - "5432:5432"

 5 构建FreeSWITCH aarch64镜像

  •  下载debian 12 arm64 rootfs
sudo debootstrap --arch=arm64 bookworm debian-rootfs http://deb.debian.org/debian
  • 挂载文件系统
mount --bind /proc ./debian-rootfs/proc
mount --bind /sys  ./debian-rootfs/sys
mount --bind /dev ./debian-rootfs/dev
mount --bind /run  ./debian-rootfs/run
  • 进入chroot进行配置
sudo chroot ./debian-rootfs/ /bin/bash

dpkg-reconfigure tzdata

apt update
apt install build-essential pkg-config libssl-dev uuid-dev libtiff-dev libtool-bin libsqlite3-dev libcurl4-openssl-dev libpcre2-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev  libavformat-dev libswscale-dev libopus-dev libpq-dev libsndfile-dev gdb gnupg2 wget autoconf lsb-release libtool openssl libssl-dev sqlite3 yasm nasm ffmpeg lua5.4 liblua5.4-dev libmariadb-dev unixodbc unixodbc-dev libsndfile1-dev libpcre3-dev python3-pip python3-distutils
 
cd /opt

git clone https://github.com/freeswitch/libbroadvoice.git
git clone https://github.com/freeswitch/libilbc.git
git clone https://github.com/freeswitch/libsilk.git
git clone --branch packages https://github.com/freeswitch/spandsp.git
git clone https://github.com/freeswitch/sofia-sip.git 
git clone https://github.com/signalwire/libks.git
git clone https://github.com/signalwire/signalwire-c.git
git clone https://github.com/freeswitch/libv8-packaging.git
git clone https://github.com/signalwire/freeswitch.git

//编译安装上述源码

//退出chroot
exit 
  •  退出chroot后:
umount ./debian-rootfs/dev
umount ./debian-rootfs/proc
umount ./debian-rootfs/sys
umount ./debian-rootfs/run
  •  Dockerfile
# 使用 arm64 的 Debian 12 rootfs
FROM scratch

# 复制现有的 Debian 12 rootfs 到 Docker 镜像中
ADD debian-rootfs/ /

# 设置必要的环境变量
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
RUN rm -rf /opt/*
# 默认启动命令
CMD ["/usr/local/freeswitch/bin/freeswitch","-c"]
  • 构建
 sudo docker buildx build --platform linux/arm64 -t soft-fs-aarch64:v1.0.0 .

 

 

posted @ 2025-07-09 17:09  钟齐峰  阅读(87)  评论(0)    收藏  举报