构建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 .
浙公网安备 33010602011771号