使用docker buildx打包发布多平台镜像
2022-07-07
个人比较喜欢影视作品,下载了大量的剧集视频,有些文件的命名不规范,就需要重新命名,之前是用的一款 renamer 客户端软件,用起来不太爽就自己做了个 bs 架构的重命名软件并开源在 github:open-renamer,为了方便自己和别人使用,也做成了 docker 镜像发布到了 dockerhub 中供别人使用,由于本人只有 x86 架构的设备,因此也就是有 x86 的镜像包,结果最近有人需要 arm 版的镜像,所以呢就来研究下怎么在 x86 上打 arm 的镜像。
目前 docker 已经直接支持多平台同时打包,不过需要 20 版本及以后的,同时还要开启实验特性。
注意:本文 docker 版本基于 20.10.5
开启 docker 实验特性
首先需要开启 docker 的实验特性,在 docker 配置文件/etc/docker/daemon.json
中加入"experimental": true
,如下:
{
"registry-mirrors": [""],
"experimental": true
}
然后执行docker version
,当看到下面的内容说明开启成功了:
安装 buildx 插件
首先检查是否已经安装了 buildx 插件,命令:docker buildx version
,看到如下内容说明已经有 buildx 了
如果没有:
- 创建插件目录
mkdir ~/.docker/cli-plugins
- 下载插件到上面的目录中
wget -O ~/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64
.注意这一步需要选择自己对应平台的二进制包 - 授予执行权限
chmod +x ~/.docker/cli-plugins/docker-buildx
官方安装文档:点击跳转
使用 dockerx 打包镜像
假设 Dockerfile 内容如下:
FROM node:lts-buster-slim
WORKDIR /app
RUN mkdir /app && echo "hello,world">/app/hello.txt
CMD ["cat", "/app/hello.txt"]
注意:当打包到多平台时要注意 FROM 的镜像要存在于你指定的平台中,另外其中的所有操作都要能在多平台中执行
然后创建一个构建实例。默认情况下 buildx 不支持多平台打包
# 创建构建实例。通俗的讲,就是创建用于执行构建任务的节点
docker buildx create --use --name build-node-example --driver docker-container
docker buildx ls
然后就可以开始打包了
docker buildx build -t fleyx/open-renamer:0.8 --platform linux/amd64,linux/arm64 --push .
命令解释:
- -- platform:指定目标平台用","分隔
- -- push:将输出结果推送到远程。默认情况下多平台打包的镜像无法通过
docker images
查看
推送到远程要先用docker login
命令登录
然后到 hub.docker 查看刚刚推送的镜像就可以看到多版本支持了:
使用docker buildx打包发布多平台镜像的更多相关文章
- 使用Maven插件快捷打包发布远程Docker镜像 dockerfile-maven-plugin
1.开放远程Docker远程访问端口 # vim /lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H tcp://0.0. ...
- Docker Buildx使用教程:使用Buildx构建多平台镜像
写在前边 记录一下前阵子在X86_64平台使用Docker Buildx构建多平台镜像的办法,包含但不限于构建ARM镜像. 构建环境 软件名 版本 Ubuntu 18.04.2 LTS Docker ...
- asp.netcore+jenkins+docker+svn+centos7.2 持续集成,每天凌晨获取最新代码打包发布
运行环境: centos7.2服务器或则虚拟机 可以是腾讯云也可以是内网服务器,(如果是内网服务器需要用frp做内网穿透,这样才可以通过外网访问该服务器) svnserver 来托管代码 一.安装je ...
- Ubuntu18.04安装Docker并部署(编译、发布、构建镜像)Asp.NetCore项目全过程笔记
环境准备:阿里云Ubuntu18.04 全新安装 一.安装Docker 1.删除旧版本并更新包索引: sudo apt-get remove docker docker-engine dock ...
- 将自己的SpringBoot应用打包发布到Linux下Docker中
目录 将自己的SpringBoot应用打包发布到Linux下Docker中 1. 环境介绍 2. 开始前的准备 2.1 开启docker远程连接 2.2 新建SpringBoot项目 3. 开始构建我 ...
- Docker:Docker打包Web API成镜像并上传到Docker Hub(2)
Docker官方镜像:https://hub.docker.com/: 本文将把一个webapi制作成docker镜像 一.Docker命令 打开Docker Quickstart,有以下常用的命令 ...
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装
Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...
随机推荐
- java中的stream是啥?
函数式编程的执行是惰性的,按顺序真正执行的时候才会执行相应的代码.方法: 函数式编程是安全的,用的是monad架构 1 public class StreamTest { 2 3 public sta ...
- 从零开始学YC-Framework之初步
本文主要内容为如下几个方面? YC-Framework的取名出于什么考虑? YC-Framework的特点有哪些? YC-Framework的模块由哪些组成? 为什么要开发YC-Framework? ...
- Vert.X CompositeFuture 用法
CompositeFuture 是一种特殊的 Future,它可以包装一个 Future 列表,从而让一组异步操作并行执行:然后协调这一组操作的结果,作为 CompositeFuture 的结果.本文 ...
- Golang 实现 Redis(10): 本地原子性事务
为了支持多个命令的原子性执行 Redis 提供了事务机制. Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中 ...
- HAVING,多表查询思路,可视化软件navicat,多表查询练习题,
HAVING "where"是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之 前起作用,且"where"后面不能写&quo ...
- python入门基础知识一(基于孙兴华python自动化)
print('aaa')等价于print("aaa") 英文单引号和双引号在字符串的输出上并无区别,但如果要打印这么一段话:I'm interested in Python. 就要 ...
- B - A Simple Task
https://vjudge.net/contest/446582#problem/B 这道题是一道不错的线段树练代码能力的题. #include<bits/stdc++.h> using ...
- 使用pip安装库或执行pip命令时报错解决方案
初次安装pip后执行安装升级一般不会有问题,但是国外的镜像源下载升级由于网速过慢会进行报错,提示需要升级 pip 或者下载速度很慢最后直接报了错如下图: 这个时候只需要修改镜像源即可,建议修改为永久镜 ...
- 五分钟搞懂POM设计模式
转载请注明出处️ 作者:IT小学生蔡坨坨 原文链接:五分钟搞懂POM设计模式 大家好,我是IT小学生蔡坨坨. 今天,我们来聊聊Web UI自动化测试中的POM设计模式. 为什么要用POM设计模式 前期 ...
- .NET中检测文件是否被其他进程占用
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 一.检测文件是否被进程占用的几种方式 在.NET中主要有以下方式进行检测文件是否被进程占用的几种方式: 通过直接打开文件等 ...