Docker 启动命令太长了,有没有约定好配置的封装工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
songhuangcn
V2EX    开源软件

Docker 启动命令太长了,有没有约定好配置的封装工具?

  •  1
     
  •   songhuangcn 2022-08-27 15:38:05 +08:00 3553 次点击
    这是一个创建于 1141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Docker 有很多优点:

    1. 不依赖操作系统,怎么升级系统都不怕
    2. 由于第 1 点,方便运行一些操作系统已经不支持的软件版本
    3. 因为隔离性,很方便同时运行一个软件的不同版本(开发不同项目时经常需要)

    但是 Docker 也有一些缺点:

    1. 配置太繁琐新人需要了解一堆新概念:volume, publish, export

    不知道有没有用户有跟我一样的需求:就是想在电脑上用 Docker 跑起来一个服务比如 MySQL ,但不需要处理太多容器的细节和配置,你跑的跟原生 MySQL 一样就行了,跑完就能用 3306 端口,日志和数据在固定的路径能找到。

    总结来说这个工具用户接口很像包管理工具,比如 Homebrew:

    brew services start mysql 

    但是底层用的是 Docker ,并帮忙我们配置好了启动命令。

    我自己没找到这类工具,就搞了一个原型版本: https://github.com/songhuangcn/dpm

    大家有这类工具推荐吗?

    第 1 条附言    2022-08-28 20:45:47 +08:00

    增加个例子解释该工具,暂定该工具为 dpm,执行以下命令:

    dpm start mysql 

    结果是你电脑会启动一个跟原生软件 MySQL 一样的进程:

    1. 直接通过 3306 端口可以连接该进程
    2. 可以在系统特定目录找到该进程的配置文件
    3. 可以在系统某个目录找到该进程的日志
    4. 其他你原生安装 MySQL 时能做的事情

    用户用起来跟其他方式安装的 MySQL 完全一致,用户甚至都不需要知道 Docker 的存在。

    可能有用户会提到这个浪费了容器的很多功能,没错,这个工具不关心 Docker 提供的其他功能,只是解决软件依赖操作系统的问题。至于应用场景,就存粹是代替你电脑直接安装的软件。

    这个跟你继续在 “项目中使用 docker-compose.yml 配置”,以及 “使用 Docker GUI 软件更方便改配置” 这些需求完全不冲突,他们分别做的是不同的事情。

    27 条回复    2022-08-28 16:55:00 +08:00
    vinsony
        1
    vinsony  
       2022-08-27 15:40:43 +08:00
    docker-compose
    xaplux
        2
    xaplux  
       2022-08-27 15:43:16 +08:00
    这不就是 Docker Compose 么。。。
    songhuangcn
        3
    songhuangcn  
    OP
       2022-08-27 15:47:56 +08:00
    docker-compose 还是要用户来写配置,只是从写 docker 的配置换成写 docker-compose 的配置吧

    那我改个问发,有没有配置好 docker-compose 封装项目,让我跑起一个软件不需要写 docker-compose.yml ?
    sky96111
        4
    sky96111  
       2022-08-27 15:58:32 +08:00 via Android
    @songhuangcn 最合理的应该是开发者自己维护一个 compose.yaml
    nutting
        5
    nutting  
       2022-08-27 16:00:34 +08:00
    估计么有,所以现在都在搞 web 界面的 CI/CD 系统,底层就是通过各种参数实现
    cxtrinityy
        6
    cxtrinityy  
       2022-08-27 16:08:52 +08:00
    用户不维护那至少开发者也要提供一个默认的带参令或者 compose 文件, 不管哪个, 总有人要去维护, 维护好了用 alias 不就可以不用敲那么长的命令了么, 或者像 zsh 这种自带历史命令提示补全的, 打个 docker 就可以在所有 docker 历史命令里快速选择
    songhuangcn
        7
    songhuangcn  
    OP
       2022-08-27 16:11:00 +08:00
    @sky96111 docker-compose.yml 我理解更贴近项目的玩法,同一个 docker-compose.yml 的服务网络共享。

    我现在的需求更像是要装一个原生软件,装好后开发机里所有项目共享这种。
    songhuangcn
        8
    songhuangcn  
    OP
       2022-08-27 16:14:59 +08:00
    @cxtrinityy 嗯嗯,你说的对,大家还是会有维护需求。所以这个工具应该提供的是默认配置,但支持覆盖他的配置。

    我理解这类工具的作用除了搞定默认配置,还可以约定好一种 docker 配置组织方式吧,不会有些人用 bash function ,有些人用 bash alias
    cxtrinityy
        9
    cxtrinityy  
       2022-08-27 16:23:02 +08:00   1
    @songhuangcn 那你这个需求我没理解错的话应该是收集通用服务的默认 docker 配置, 然后普通用户一键点击下载镜像启动容器一条龙, 同时提供 GUI 修改默认配置吧
    如果没理解错的话, 感觉应该挺少见的但的确适合小白用户的最后一米, 大部分 docker 在 hub 上其实已经提供了默认启动配置, 可以爬一下快速丰富下你的 repo
    oott123
        10
    oott123  
       2022-08-27 16:23:43 +08:00
    看看 nix
    songhuangcn
        11
    songhuangcn  
    OP
       2022-08-27 16:32:21 +08:00 via iPhone
    @cxtrinityy 对,你理解完全正确。爬 docker hub 是一个好建议,非常感谢
    anubu
        12
    anubu  
       2022-08-27 16:45:30 +08:00
    似乎主要用于仅仅是快速启动,跑一跑验证的场景,类似宝塔面板一类的工具。
    docker 和 docker-compose 常用的命令和字段非常有限,很低的学习投入就能覆盖大部分场景,遇到特别的需求再翻文档也够用。
    songhuangcn
        13
    songhuangcn  
    OP
       2022-08-27 17:12:21 +08:00 via iPhone
    @anubu 不是快速启动,你要跳出 docker 范围来看。你用包管理工具安装并运行 mysql ,你会做什么配置吗?这些配置在跑起来后在做也来得及不是吗。
    anubu
        14
    anubu  
       2022-08-27 17:46:18 +08:00   1
    @songhuangcn 我说的“快速启动”可能表达有误,本意是说“快速安装,几乎零配置启动”,就是在说包管理器类似工作。
    我想说的是,在类似包管理器场景下,如果不调整默认配置,那么就可以“快速启动”,如果要调整默认配置,很多时候还是要了解包分发运行的基本逻辑。
    比如使用包管理器 apt 安全 docker ,想要调整 docker 的 remote api ,很多时候还是要看官方文档,了解以 apt 分发时的配置逻辑是什么样的,进而可能需要了解 systemd 的基本配置逻辑等等。
    dpm 作为包管理器应该有类似的问题,即如果要调整默认配置,那么需要了解学习这种包管理的分发运行逻辑。虽然理解配置逻辑并不麻烦,但考虑到通用性,似乎直接学习通用性更高的 docker 、docker-compose 更“划算“,毕竟 docker 的入门成本真的很低,收益却特别高。
    songhuangcn
        15
    songhuangcn  
    OP
       2022-08-27 18:46:17 +08:00 via iPhone
    @anubu 封装工具都有这个问题吧,一般也不会走到这一步(如果 docker 本身是约定大于配置的话)。但是现在实在是满足不了,我想解决的是 brew 这些包用户从迁移到 docker 服务最后一公里的事。

    现在基本自己和周边朋友先用着了,要解决封装后多余的学习成本问题,那就只能靠后期良好的文档啥的了,不过好在这个工具功能成本不大,大部分时间应该就是花在整理通用的包配置和文档上。

    感谢你的回复。
    shakaraka
        16
    shakaraka  
    PRO
       2022-08-27 19:02:11 +08:00
    那不就是 helm 么
    avenger
        17
    avenger  
       2022-08-27 20:29:45 +08:00
    `laravel/sail` 可以看看
    zhouwb
        18
    zhouwb  
       2022-08-27 22:06:46 +08:00 via iPhone
    其实对于小白和技术爱好者来说,还真需要这么个东西,他们不是搞技术的,但是偶尔需要弄个 docker 服务,比如自家安个 homebridge 、aliyunwebdav 等等,他们不需要高需求,只要能运行就 ok ,因为服务基本上只有自己用,所以我精神上支持楼主
    songhuangcn
        19
    songhuangcn  
    OP
       2022-08-27 23:47:45 +08:00 via iPhone
    @zhouwb 感谢支持,看了大家的回复,应该真是没有这类工具了。这个个人维护只能做成小众工具了,能找到个开源社区来做就好了
    baobao1270
        20
    baobao1270  
       2022-08-28 09:44:43 +08:00
    vagrant ?比 docker 重,但是似乎更符合你的需求
    Jzdoxc
        21
    Jzdoxc  
       2022-08-28 12:15:32 +08:00 via iPhone
    docker portainer 了解一下, 网页管理容器,先直接 run 容器在进行修改容器的各项参数就会显示
    nosugar
        22
    nosugar  
       2022-08-28 12:35:46 +08:00 via iPhone
    这个不是每次都要手动敲的,放脚本自动化
    glamoroGG
        23
    glamoroGG  
       2022-08-28 13:17:46 +08:00
    貌似大家都是手敲命令
    ByteCat
        24
    ByteCat  
       2022-08-28 14:34:15 +08:00
    docker compose 完全可以满足你说的这些东西,就算不是项目也行啊,单个容器,按 yaml 写你的 docker 启动参数就行了
    winglight2016
        25
    winglight2016  
       2022-08-28 15:22:10 +08:00
    lz 的标题是 docker 命令太长,需要短版本,仔细一看内容,又变成了配置繁琐,新人需要了解一堆概念。

    其实,lz 需要的是一个运维,能帮你把容器装好,对吧?
    onetown
        26
    onetown  
       2022-08-28 15:45:03 +08:00
    我们现在的应用基本上都是以容器方式交付的, 但是启动的方式还是试用的 systemd , 因为需要符合客户自己平时运维的系统, 以及他们自己也有一些运维工具, 例如通过 systemctl status $service_name 来判断服务的运行状况

    所以我们在交付的时候, 提供了 systemd 的描述文件, 也提供了 docker-compose, 用 systemd 也会用 After, Requires 来控制不同容器的启动顺序。

    [Unit]
    Description=Redis Container
    After=docker.service
    Requires=docker.service

    [Service]
    TimeoutStartSec=0
    Restart=always
    ExecStartPre=-/usr/bin/docker stop %n
    ExecStartPre=-/usr/bin/docker rm %n
    ExecStartPre=/usr/bin/docker pull redis
    ExecStart=/usr/bin/docker run --rm --name %n redis

    [Install]
    WantedBy=multi-user.target
    night98
        27
    night98  
       2022-08-28 16:55:00 +08:00
    portnaier ,里面有个应用市场,直接填参数就能运行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     973 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:59 PVG 02:59 LAX 11:59 JFK 14:59
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86