構建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號