V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
3141592653
V2EX  ›  Docker

请教一下在下面这种情况下我用 docker 来部署网站是不是会更方便?

  •  
  •   3141592653 · 253 天前 · 1827 次点击
    这是一个创建于 253 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是小白,跟着教程能部署网站的那种程度。

    我有个小 VPS ,安装了 caddy ,部署了一个 tiddlywiki 。因为我是小白,跟着教程安装的 caddy ,所以这个网站不想改 nginx 了,怕出错。

    现在我打算再装个 yourls 短网址。这需要 php 、nginx 、mysql 。

    我是不是要把 php 、nginx 、mysql 、yourls 都装在 docker 里?这是装在一个 docker 里,还是要分 4 个?
    有没有必要改一改,把 caddy 和 tiddlywiki 也装在 docker 里?
    开这么多 docker ,是不是对 VPS 消耗比较大,还不如直接装 VPS 上更好?

    说实话,不想把 tiddlywiki 改用 nginx ,对我来说还是比较折腾的。小白,你懂得。
    25 条回复    2024-06-11 15:58:51 +08:00
    shiny
        1
    shiny  
       253 天前   ❤️ 1
    装在四个 docker 容器里,用 docker-compose 编排。这点消耗很少,除非你想榨干硬件性能,否则没有必要直接装 vps 。
    3141592653
        2
    3141592653  
    OP
       253 天前
    @shiny 谢谢。还不会 docker-compose ,需要去学习一下。
    榨干是不可能榨干的,就我这水平和这需求,性能白白浪费的多。
    fishtocat
        3
    fishtocat  
       253 天前   ❤️ 1
    如果是小白的话,建议安装在 docker 里面
    优势:
    1. docker 提供了简单的自动重启机制,docker run -d --restart unless-stopped redis , 可以在 vps 重启的情况下自动启动服务,不用去学习较为复杂的 systemd 等机制
    2. docker 提供了环境隔离,小白容易配置出错导致服务异常,如果是 docker 的话,直接删除容器即可,不会担心会有残留的配置文件影响后续的部署

    至于性能,docker 本身并不会占用多少性能,参考 https://ieeexplore.ieee.org/document/7095802
    shiny
        4
    shiny  
       253 天前   ❤️ 1
    能够全部装 docker 里维护会更方便,比如要迁移机器,只要新机器上装上 docker ,旧机器上 docker 停下,直接拷文件到新机器吗,一个 docker compose up -d 就可以开起来。

    不用 docker 的话,时间久了自己怎么配置的都会不记得,一旦出现问题,回忆安装时候的路径什么的都是个麻烦事。
    确实学习略有成本,但是一旦掌握,投入在运维上的时间能大幅下降。
    3141592653
        5
    3141592653  
    OP
       253 天前
    @fishtocat 好的,感谢。我也隐隐感觉安装在 docker 里比较方便,但是因为还不会 docker ,需要花点时间学习,所以一直没有去做。最近想做个短网址网站给自己用,caddy 和 nginx 应该是冲突的,所以又想起来 docker 了。
    Baymaxbowen
        6
    Baymaxbowen  
       253 天前
    可以尝试在 WSL 折腾一下,跑通了再把 docker-compose 弄到线上服务器
    3141592653
        7
    3141592653  
    OP
       253 天前
    @shiny 谢谢,听人劝,吃饱饭。看来是有必要学学简单的 docker 操作的。各位大佬有没有快速上手的 docker 教程推荐?我一般都是直接搜网上的文章、教程,一步一步跟着做,到最后网站是能跑起来,好不好就不知道了哈哈哈
    3141592653
        8
    3141592653  
    OP
       253 天前
    @Baymaxbowen 再来个 WSL ,对我来说就有点操作压力了。
    Baymaxbowen
        9
    Baymaxbowen  
       253 天前   ❤️ 1
    @3141592653 #8 window 的 Linux 子系统,你能折腾到现在,搞这个应该很简单,
    shiny
        10
    shiny  
       253 天前
    我在 2016 年入门 docker 时候最大的体会:一开始理解它的好处很难,总觉得它很麻烦;但是一旦理解之后就再也没回到过去的操作方式了。

    我是通过纸质书学习的,内容几乎都是差不多的,网上文章也够丰富。
    docker compose 则是通过官方文档学习的 https://docs.docker.com/compose/
    它能把 docker 命令参数写入文件里,并让多个容器互通,这样不必每次都写具体的 docker 命令参数。

    另外补充下,国内使用最大的麻烦还是 dockerhub 速度太慢,而大多数国内镜像则不够稳定。当然,如果是境外 vps 就没有这种烦恼。
    3141592653
        11
    3141592653  
    OP
       253 天前
    @shiny 好的,再次感谢。回头好好学习一下。
    28Sv0ngQfIE7Yloe
        12
    28Sv0ngQfIE7Yloe  
       253 天前
    我用 docker 很久了,积累了很多单 pod 的初始化脚本,但是 docker compose 用的不多,上周末我突发奇想用 gpt-4 帮我改造下,最终结果我很满意,OP 可以试试,大概了解下 compose 是个什么东西,再把需求交给 gpt 输出
    3141592653
        13
    3141592653  
    OP
       253 天前
    @Morii 有 gpt 辅助,确实可以省不少精力。
    z1829909
        14
    z1829909  
       253 天前   ❤️ 1
    推荐这个, 先搭起来再去了解细节
    https://github.com/1Panel-dev/1Panel
    3141592653
        15
    3141592653  
    OP
       253 天前
    @z1829909 这个在站立搜索到了,也打算了解一下,谢谢推荐
    javalaw2010
        16
    javalaw2010  
       253 天前   ❤️ 1
    虽然但是。。。如果没有一定的 docker 和 linux 的实战经验,小白直接上手 docker 的话大概率会觉得 docker 挺难用的。而且你的 VPS 上已经装了 caddy 就没必要 Nginx 的容器了,这一来你可用的相关教程又少了一些。。。

    所以我建议先在虚拟机里多实验实验吧,然后把每一步命令都找个文档记下来。

    docker 并不是虚拟机方案,所以消耗的话你可以就当没有 docker ,直接在 vps 上运行这些应用的压力跟使用 docker 运行大差不差。
    3141592653
        17
    3141592653  
    OP
       253 天前
    @javalaw2010 确实是的,我就是多次听说 docker 的好,但是实际上手起来又有点难度,碰壁好几次,都没把它啃下来。
    其实我也不想装 nginx ,只是因为 yourls 这个程序的教程大多是用 nginx 的,当然道理是相通的,caddy 应该也能用,但对小白的我来说,更难啊。
    所以我想如果用 docker 的话,我是不是就可以放心在一台 VPS 上装多种环境了,至少 caddy 和 nginx 共存了,就能解决我的问题了。我就建几个站,常用的就 LAMP 、LNMP 那些东西,很基础很小白的,但遇到问题又烦死个人。
    javalaw2010
        18
    javalaw2010  
       253 天前   ❤️ 1
    @3141592653 #17 你所谓的 caddy 和 nginx 的共存问题其实是端口占用冲突吧?那么只要你想你的 caddy 站点和 nginx 站点同时监听在 80/443 端口就一定会冲突,docker 也不能解决这个问题的,如果不需要同时监听 80/443 端口,那么不需要 docker 也可以实现。如果你乐在其中的话可以慢慢磨,可以学习到很多东西,如果只是想尽快使用的话,找个懂一点的朋友帮你弄好吧。
    3141592653
        19
    3141592653  
    OP
       253 天前
    @javalaw2010 受教了,谢谢。可能真的是你说的“端口占用冲突”的问题。
    3141592653
        20
    3141592653  
    OP
       253 天前
    @javalaw2010 也就是说,如果我的网站需要同时监听 80/443 ,在一台服务器上,我就只能 caddy/nginx 二选一,对吗?
    我做个小网站,虽然是自己用的,但还是想“正常”访问,不想在域名上加端口号。
    如果只能二选一,那应该是选 nginx 更好吧,大众一点,资料多一点。话说现在用 caddy 还挺方便的,代码少,简单,证书自动续期。nginx 相比 caddy 就复杂多了。
    IvanLi127
        21
    IvanLi127  
       253 天前
    @3141592653 常见的用例下,caddy 配置比 nginx 简单很多,而且需要配的东西也少,省得去找资料改配置。改配置很容易疏忽踩出新坑。
    3141592653
        22
    3141592653  
    OP
       253 天前
    @IvanLi127 是的,caddy 确实比 nginx 简单得多,自动申请和续费证书这一点很省事
    javalaw2010
        23
    javalaw2010  
       253 天前   ❤️ 1
    @3141592653 #20 对的,只能二选一,但是这俩都支持 virtual host ,换个说法两个只要选择一个就够了。但也有折中的办法,叫做“反向代理”,假设你的 nginx 站点在 8080 端口上,那么你在 caddy 上配置一个 80/443 的站点反向代理到 localhost:8080 也可以实现“正常访问”,不过就是有点脱裤子放屁了。
    3141592653
        24
    3141592653  
    OP
       253 天前
    @javalaw2010 了解了,对我很有用,非常感谢。
    DT27
        25
    DT27  
       197 天前
    有现成的 docker 镜像: https://hub.docker.com/_/yourls
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.