V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
IdJoel
V2EX  ›  问与答

有没有能把 docker 整个镜像打包成二进制的工具

  •  
  •   IdJoel · 238 天前 · 4639 次点击
    这是一个创建于 238 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时候有些简单的应用,需要依赖很多服务,比如 Mysql redis 之类的 但是这些服务新手安装又有些难度,写 shell 脚本去安装又要考虑很多 Linux 发行版。

    有没有一个简单的办法,把 docker 和 docker image 直接打包成一个 zip 或者 二进制文件,用户一运行,什么都有了,最好还能做些简单的管理。

    第 1 条附言  ·  237 天前
    好像我表达的有点问题


    举个例子把: 比如我有个幻兽帕鲁的服务端,里面依赖了很多服务,例如 MySQL Redis 之类的服务,使用这套服务的小白可能根本不知道什么是 docker ,什么是 MySQL ,如何能让他们最快速的运行这套程序呢?

    现在相对来说比较方便的就是安装一个 docker ,然后 docker compose up -d ,但是其实也并不是很方便,例如我的 image 不太想放到任何网络上,然后用户又得学习去装 docker 之类的东西。


    有没有简单的方法,能把镜像 和 docker 打在一起,用户直接运行就可以,就像运行一个 Golang 编写的程序一样方便。

    https://github.com/NilsIrl/dockerc 这个程序算是比较符合我的需求,但是他是针对单个镜像的,我其实更希望是 docker compose 这种,可以针对多个服务。

    如果真的没有的话,我就准备自己动手写一套了,这东西针对很多小白来说真的太方便了。
    36 条回复    2024-03-20 12:28:51 +08:00
    lonelykid
        1
    lonelykid  
       238 天前
    二进制包不是也得考虑不同发行版吗?不用 Shell 可以用 Python ,现在很多 Linux 都默认自带 Python 环境。
    momocraft
        2
    momocraft  
       238 天前
    有 虚拟机镜像
    tairan2006
        3
    tairan2006  
       238 天前
    shell 脚本为啥要考虑发行版?你用了 docker 就不需要考虑发行版了啊
    Muniesa
        4
    Muniesa  
       238 天前 via Android
    用户一运行,什么都有了:把你要用的服务打包成镜像,写个脚本安装 docker 然后运行容器,不就可以了吗
    ck65
        5
    ck65  
       238 天前
    你是不是在找 Docker Compose...
    billzhuang
        6
    billzhuang  
       238 天前 via iPhone   ❤️ 1
    @ck65 hahahaha
    billzhuang
        7
    billzhuang  
       237 天前 via iPhone
    你把 image 暴露给用户?
    IdJoel
        8
    IdJoel  
    OP
       237 天前   ❤️ 1
    @lonelykid python 写脚本 安装 MySQL 和 redis 不一样又发行版不同需要做兼容的问题吗
    IdJoel
        9
    IdJoel  
    OP
       237 天前
    @momocraft 不太想用虚拟机,性能损耗有点大,现在的 vps 基本都是虚拟化出来的,再套一层应该性能更差
    IdJoel
        10
    IdJoel  
    OP
       237 天前
    @tairan2006 安装 mysql redis nsq 啥的需要考虑发行版啊
    IdJoel
        11
    IdJoel  
    OP
       237 天前
    @billzhuang 开源的程序啊,就是暴漏给用户的
    IdJoel
        12
    IdJoel  
    OP
       237 天前
    @ck65 我当然知道 docker compose 啊,但是这不得写脚本先给用户安装个 docker 然后运行吗?
    phrack
        13
    phrack  
       237 天前 via iPhone
    fregie
        14
    fregie  
       237 天前   ❤️ 2
    友情提示:op 说的 docker 镜像并非大家理解的 docker 镜像,而是 docker 程序本身的镜像
    就是说他想要一个能在所有发行版上运行 docker 服务的方法
    tairan2006
        15
    tairan2006  
       237 天前
    @IdJoel 你真的会用 docker 么,docker 本来就是跨发行版的……

    至于安装 docker 的脚本,官方就有: https://get.docker.com/
    lonelykid
        16
    lonelykid  
       237 天前
    @IdJoel #8 MySQL 和 Redis 打包成 Docker 镜像,用 Python 安装配置 Docker 下载并运行相应镜像。镜像里的不用考虑发行版,Docker 网上都有相应脚本直接一键安装。Python 和 Shell 的作用其实都是一样的,都只是启动脚本而已,只是相比 Shell 脚本更易读,修改配置文件什么的更容易。
    ETiV
        17
    ETiV  
       237 天前 via iPhone   ❤️ 1
    https://github.com/NilsIrl/dockerc

    dockerc - compile docker images to standalone portable binaries

    没用过,你自己尝试下
    clemente
        18
    clemente  
       237 天前
    docker save <image_name> > <二进制包.tar>
    0o0O0o0O0o
        19
    0o0O0o0O0o  
       237 天前 via iPhone   ❤️ 1
    前几天看到的,就是楼上提到的 dockerc
    billzhuang
        20
    billzhuang  
       237 天前 via iPhone
    但你如果是个开源的服务,需要依赖 redis 、mysql 的话 ,但如果目标用户如果连 docker 安装都不会,他们怎么解决你系统的问题呢。
    IdJoel
        21
    IdJoel  
    OP
       237 天前
    @billzhuang 很多东西。例如游戏服务器 他们单纯就是想自己搭一分。根本不关心什么代码啊
    0o0O0o0O0o
        22
    0o0O0o0O0o  
       237 天前
    如果只是怕写 shell 脚本麻烦,其实 docker 提供了
    https://github.com/docker/docker-install

    其实,如果写 shell 脚本的麻烦都无法接受,你提到的这类操作会带来的麻烦只会更多吧?
    expy
        23
    expy  
       237 天前
    参考各种 vps 一键 dd 重装系统脚本,做成系统镜像灌进去。
    totoro625
        24
    totoro625  
       237 天前
    写 shell 脚本自动安装 docker 并运行 Mysql redis 容器
    用户只需要交互 shell 脚本就能控制容器
    momocraft
        25
    momocraft  
       237 天前
    或者学写 cloud-init yaml
    很多云镜像都支持
    用户创建虚拟机时指定你创建的 cloud-init yaml ,VM 创建好后自动运行,安装好所有东西
    ytlm
        26
    ytlm  
       237 天前
    docker export 和 chroot 命令研究一下试试
    0312birdzhang
        27
    0312birdzhang  
       237 天前   ❤️ 1
    Snap 、Appimage 、Flatpak 等是不是你要找的
    IdJoel
        28
    IdJoel  
    OP
       237 天前
    @0312birdzhang 我研究研究,但是印象中这东西应该是针对一个应用开发的,不是针对应用 + 服务开发的
    IdJoel
        29
    IdJoel  
    OP
       237 天前
    @momocraft
    @expy 这个方法还是不太行,很多海外的 VPS 并不支持这么复杂的东西
    blankmiss
        30
    blankmiss  
       237 天前
    @IdJoel ?绝大数的 vps 都支持 很少见不支持的
    lniwn
        31
    lniwn  
       236 天前 via iPhone
    podman-compose
    IdJoel
        32
    IdJoel  
    OP
       236 天前
    @blankmiss 哇,基本完美符合我的需求
    IdJoel
        33
    IdJoel  
    OP
       236 天前
    @lniwn 哇,基本完美符合我的需求,感谢
    IdJoel
        34
    IdJoel  
    OP
       236 天前
    @blankmiss 各种很便宜海外的服务器基本都不支持把,像 bwg 之类的。aws aliyun 什么的肯定支持
    blankmiss
        35
    blankmiss  
       235 天前
    只要是 linux 服务 就一定支持 dd 命
    IdJoel
        36
    IdJoel  
    OP
       234 天前
    @blankmiss 我看错了,我以为你是哪个 cloud init 的,其实就是 dd 也很多不支持的,openvz 虚拟出来的机器就不能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:53 · PVG 10:53 · LAX 18:53 · JFK 21:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.