当前位置: 首页 > wzjs >正文

java web 网站开发运营商大数据精准营销

java web 网站开发,运营商大数据精准营销,广州优化排名推广,在线服务平台的跨境电商有哪些docker多架构镜像构建 Docker 多架构镜像构建(Multi-Architecture Image Build)允许你为不同平台(如 linux/amd64, linux/arm64, linux/arm/v7 等)构建和推送统一的镜像标签,解决在不同硬件架构之间部署的问题。 Doc…

docker多架构镜像构建

Docker 多架构镜像构建(Multi-Architecture Image Build)允许你为不同平台(如 linux/amd64, linux/arm64, linux/arm/v7 等)构建和推送统一的镜像标签,解决在不同硬件架构之间部署的问题。

Docker 官方推荐使用 buildx 来构建多架构镜像。构建完了需要往harbor仓库进行推送

安装docker buildx

安装命令:

mkdir -p $HOME/.docker/cli-plugins
wget https://github.com/docker/buildx/releases/download/v0.12.0/buildx-v0.12.0.linux-amd64 -O $HOME/.docker/cli-plugins/docker-buildx
chmod +x $HOME/.docker/cli-plugins/docker-buildx

查看插件版本:

docker buildx version

查看当前系统中 Docker Buildx 支持使用的架构

docker buildx ls 

结果如下:可以看到默认是default,并且不支持arm架构

default * docker                                                        default         running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

安装二进制文件格式解释器:

docker run --privileged --rm tonistiigi/binfmt --install all

此时再去查看架构支持:

[root@localhost ~]# docker buildx ls 
NAME/NODE DRIVER/ENDPOINT STATUS  BUILDKIT                              PLATFORMS
default * docker                                                        default default         running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

创建新的构建实例:

使用 docker-container 驱动程序创建一个新的构建器,它可以让您访问更复杂的功能,比如多平台构建和更高级的缓存导出功能。这些功能在默认的 docker 驱动程序中目前不受支持。

docker buildx create --name mybuilder --bootstrap --use

构建多架构镜像

编写Dockerfile:

FROM dockerpull.org/eclipse-temurin:8u392-b08-jdk-jammy# 如果容器需要操作宿主机docker
RUN apt-get update && apt-get install -y libltdl7# 将当前目录下的 java.security 文件复制到容器中指定路径
COPY java.security /opt/java/openjdk/jre/lib/security/java.security

使用 Buildx 插件构建镜像:

docker buildx build --platform=linux/arm64,linux/amd64 -t 192.168.51.52:8082/xxx/jdk8 --push .

遇到问题:

ERROR: failed to solve: failed to push 192.168.51.52:8082/xxx/jdk8: failed to do request: Head "https://192.168.51.52:8082/v2/xxx/jdk8/blobs/sha256:bb699589ec711474bb920a23601539265a47d38d3f6ca3e52cf61f5bf3143376": http: server gave HTTP response to HTTPS client

解决办法:https://github.com/docker/buildx/issues/163

新建一个配置文件buildkitd.toml

# 配置私有仓库
[registry."192.168.51.52:8082"]http = trueinsecure = true# 配置 docker.io 的代理为 dockerpull.org
[registry."docker.io"]# mirrors = ["dockerpull.org"]http = false  # 如果 dockerpull.org 使用 HTTPS,请确保设为 falseinsecure = false  # 假设 dockerpull.org 使用 HTTPS

重新构建一个工具

docker buildx create --name mybuilder  --config ./buildkitd.toml --bootstrap --use

此时再去构建了往自己的私有仓库harbor推送:

docker buildx build --platform=linux/arm64,linux/amd64 -t 192.168.51.52:8082/xxx/jdk8 --push .

Docker多阶段构建

举个例子,我需要在eth-security-toolbox的基础上构建一个镜像,需要在这个镜像的基础上,装一个java,但是amd和arm架构的java需要的安装包是不同的,并且还需要对java源码里的部分内容做改造,所以需要将不同架构的java的安装包拷贝到容器里进行构建:

# 修改后(正确:使用目标平台架构)
FROM --platform=$TARGETPLATFORM docker.1ms.run/trailofbits/eth-security-toolbox:nightly-20241209 AS baseUSER root
RUN solc-select install 0.8.19 && solc-select use 0.8.19
WORKDIR /opt# ========== 平台感知最终阶段 ==========
FROM base AS finalARG TARGETARCH
# docker buildx 会自动设置这个变量为 amd64 或 arm64COPY jdk_amd64.tar.gz .
COPY jdk_arm64.tar.gz .# 选择正确的包名
RUN set -eux; \if [ "$TARGETARCH" = "amd64" ]; then \tar -xzf jdk_amd64.tar.gz -C /opt && rm -f jdk_amd64.tar.gz jdk_arm64.tar.gz; \elif [ "$TARGETARCH" = "arm64" ]; then \tar -xzf jdk_arm64.tar.gz -C /opt && rm -f jdk_amd64.tar.gz jdk_arm64.tar.gz; \else \echo "Unsupported arch: $TARGETARCH" && exit 1; \fiENV JAVA_HOME=/opt/jdk8u392-b08
ENV PATH=$JAVA_HOME/bin:$PATH# 可选测试(可注释)
# RUN java -version

构建脚本:

docker buildx build --platform=linux/arm64,linux/amd64 -t 192.168.51.52:8082/xxx/contract-base:latest --push --no-cache .
  • FROM --platform=$TARGETPLATFORM ... AS base:指定基础镜像的平台与目标平台一致。$TARGETPLATFORM 是 Docker Buildx 自动注入的变量,值为 linux/amd64linux/arm64 ,这里是为了确保基础镜像的架构与最终构建目标匹配,避免跨平台兼容问题。
  • ARG TARGETARCH :声明一个构建参数 TARGETARCH,其值由 Docker Buildx 自动注入。在多平台构建时,TARGETARCH 会根据 --platform 参数动态设置为 amd64arm64
  • **RUN set -eux; if [ "$TARGETARCH" = "amd64" ]; then ...**根据 TARGETARCH 的值动态选择解压对应的 JDK。

测试阶段:

测试构建后java是否可用,下面的命令可以分别在amd和arm机器上执行:

docker run --rm -it 192.168.51.52:8082/xxx/contract-base:test java -version

或者也可以进入构建后的容器:

docker run --rm -it --platform=linux/amd64 192.168.51.52:8082/xxx/contract-base:test /bin/bash

使用下面命令来判断是不是对应架构的,但是使用docker inspect images命令不准,还是进入容器比较好:

uname -m 

判断构建的镜像 manifest 是不是双架构的

docker buildx imagetools inspect 192.168.51.52:8082/xxx/contract-base:test

##参考文档

使用 Docker 构建多架构镜像

http://www.dtcms.com/wzjs/280946.html

相关文章:

  • 提升网站流量的方法搜索指数查询
  • 网站改版 数据迁移小程序商城制作一个需要多少钱
  • 点开图片跳到网站怎么做女孩子做运营是不是压力很大
  • 满屏网站设计做多大北京网站优化企业
  • PHP动态网站开发技术试题seo网站排名后退
  • 凡客tv东莞市网站seo内容优化
  • 响应式网站设计常见的网络营销推广方式有哪些
  • 天河区营销型网站建设电脑优化大师哪个好
  • wordpress 图片列表seo站外优化最主要的是什么
  • 凡科做的网站手机版求老哥给几个靠谱的网站
  • 郑州市经开区建设局网站seovip培训
  • 建设政府网站集约化百家号关键词排名
  • 网站建设公司86215廊坊自动seo
  • 桂林北站到桂林站多远关键词优化有哪些作用
  • 做网站要多少费用seo推广工具
  • 自己有了域名 怎么做网站外链工具下载
  • 全国企业信用信息公示系统网站网站推广技巧和方法
  • 什么是成品网站seo矩阵培训
  • 移动端显卡网站seo排名优化工具在线
  • 有人模仿qq音乐做的h5网站吗大型营销型网站制作
  • 深圳高端网站建设多少钱河南制作网站公司
  • 自己做的网站外国人能访问吗杭州网站建设公司
  • 厦门seo排名公司南宁seo手段
  • wordpress添加全屏海报最好的网站优化公司
  • 建设工程施工合同(示范文本)深圳谷歌优化seo
  • 南宁优质手机网站建设公司信息推广的方式有哪些
  • 做影集的网站或软件国外b站不收费免费2023
  • 中牟建设工程信息网站营销策划方案范文
  • 重庆手机网站制作优化网站建设seo
  • 网站建设有关图片关键词搜索量排名