V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fescover
V2EX  ›  程序员

有了 docker 后大家还会安装本地版本吗?

  •  
  •   fescover · 31 天前 · 4051 次点击

    买来的服务器拿到手第一件事就是装 docker, 之后各种应用&服务都会通过 docker 或者 compose 跑,比如 nextjs 项目,nginx, mysql ,redis 等等。不过有些时候,应用比较小,举个例子,比如就一个单 js 文件的群机器人代码,用 docker 还要写 Dockerfile, 还要打 tag, push, pull, 如果涉及外部文件可能还得配置环境变量.env ,volume 挂载等等,一套操作下来也挺麻烦,尤其有时候境内服务器还拉不下来 dockerhub 里的 image 。这种情况大伙是否会选择在服务器本地 apt install nodejs 。然后直接用 pm2 来跑得了,快捷方便。缺点就是有服务器洁癖的会觉得有点不舒服吧。

    25 条回复    2024-11-27 17:35:49 +08:00
    maocat
        1
    maocat  
       31 天前 via iPhone
    要不试试 docker-compose
    还是不行上上 k8s ?
    Peter2Zhu
        2
    Peter2Zhu  
       31 天前
    用 nodejs 的基础镜像,把 js 文件挂载进去跑就行了,免得打镜像了
    fox0001
        3
    fox0001  
       31 天前 via Android
    不打包 docker image ,使用 nodejs 镜像生成容器运行
    InDom
        4
    InDom  
       31 天前   ❤️ 2
    docker run --rm -it -v "$(pwd):/app" -w /app node node test.js
    Puteulanus
        5
    Puteulanus  
       31 天前
    可以跑个青龙面板,有简易的代码在线编辑,跑点 nodejs 和 python 的小脚本挺好用的
    wu67
        6
    wu67  
       31 天前 via Android
    小内存的机器我选择自己装 node ,docker 根本跑不起来,本质上只是梯子服务器冗余资源再利用
    yinmin
        7
    yinmin  
       31 天前 via iPhone
    如果接入 internet ,当然是用 docker ,安全啊

    网上很多入侵案例,用 docker 的只需对容器 down 和 up 一下,如果本机安装就要重装系统工作量超大的。
    yinmin
        8
    yinmin  
       31 天前 via iPhone   ❤️ 15
    很多开源项目或多或少有 bug ,有些常用的开源项目很容易被入侵的。

    1. 选 base image 尽量选 debian 别选 alpine 。因为 alpine 基于 busybox 有 nc 、wget 、ping 等黑客入侵时做跳板用工具; debian 基础镜像没有 curl 、wget 、ping 等工具,入侵会困难很多,软件兼容性也好。(这条有点反常识,但是很关键)

    2. 如果项目开 tcp 端口支持 unix socket ,可以把项目容器设置成无网卡,通过 volume 将 unix socket 文件夹分享给 nginx 、frp 的前置应用,黑客入侵到项目容器感知到的就是一个黑洞洞的孤立世界。 如果项目不支持 unix socket ,也可以将项目容器配置成无网卡,tcp 端口绑定到容器 127.0.0.1 ,然后使用 socat 转化成 unix socket
    sss15
        9
    sss15  
       31 天前
    @yinmin #8 这段能不能展开讲讲
    ```
    2. 如果项目开 tcp 端口支持 unix socket ,可以把项目容器设置成无网卡,通过 volume 将 unix socket 文件夹分享给 nginx 、frp 的前置应用,黑客入侵到项目容器感知到的就是一个黑洞洞的孤立世界。 如果项目不支持 unix socket ,也可以将项目容器配置成无网卡,tcp 端口绑定到容器 127.0.0.1 ,然后使用 socat 转化成 unix socket
    ```
    defunct9
        10
    defunct9  
       31 天前
    500M 1CPU ,就问你怎么刀吧。
    yinmin
        11
    yinmin  
       31 天前 via iPhone
    @wu67 #6 256MB 内存的小 vps 就能很完美的跑 docker ce 了
    yinmin
        12
    yinmin  
       31 天前   ❤️ 9
    @sss15 #9 展开讲一下:容器无网卡用 unix socket 通讯

    举一个示例: 前置 nginx 接 python flask 的 web(GUNICORN),nginx 和 flask 都使用容器部署,flask 容器从绑定 tcp:5002 改成无网卡绑定/run/unix-socket/flask/flask.sock 。如果 flask 要访问 mysql 之类的,mysql 开启 unix socket 然后 volume 给 flask 容器即可。

    flask 容器的 compose 文件原来配置是:
    environment:
    - GUNICORN_CMD_ARGS=-w 8 -b 0.0.0.0:5002 -k gevent
    改成:
    network_mode: none
    environment:
    - GUNICORN_CMD_ARGS=-w 8 -b unix:/run/unix-socket/flask/flask.sock -k gevent
    volumes:
    - /run/unix-socket/flask:/run/unix-socket/flask

    nginx 容器的 compose 文件加入:
    volumes:
    - /run/unix-socket/flask:/run/unix-socket/flask

    nginx 的网站配置从:
    proxy_pass http://flaskcontainer1:5002/;
    改成:
    proxy_pass http://unix:/run/unix-socket/flask/flask.sock:/;
    (语法:nginx 的 url 域名部分替换成 unix:/run/unix-socket/flask/flask.sock)

    如果黑客入侵了 flask 容器,感知到的就是一个无网卡的黑洞洞的孤立世界。
    qwq11
        13
    qwq11  
       31 天前
    某个服务用 systemctl 、journalctl 操作起来比 docker 方便的时候就不用 docker
    wu67
        14
    wu67  
       31 天前
    @yinmin 小鸡不只内存小, 硬盘也小, 每 1G 都要扣扣搜搜的用...拉个几十到 200M 的镜像, 真不如直接本地安装
    tars16
        15
    tars16  
       31 天前
    @wu67 #14 点了点了。小鸡只有网速好,其他都一般,刚刚让 gpt 教我如何清理 10G 磁盘空间

    #进入根目录,查找占用最大的文件和目录
    du -h --max-depth=1 /

    # 删除旧的日志文件
    sudo find /var/log -type f -mtime +30 -delete


    # 综合清理所有未使用资源(包括镜像、容器、卷和缓存)
    docker system prune -a --volumes -f
    ofnh
        16
    ofnh  
       31 天前   ❤️ 2
    docker 很好的解决了有些软件在你硬盘上随地拉屎的问题
    frayesshi1
        17
    frayesshi1  
       31 天前
    会,比如 nginx ,一般都是直接装,docker 版本最多做一个测试环境,并且 Linux 的内核作为一个 part 很明显可见(不仅内核,其他模块都是这样),这个就对运维就很方便,不像 windows ,不仅有服务,还有注册表,还有 VC 库,.net 库,补丁等等,这个还只是针对应用程序,如果涉及驱动,更加恶心。
    qinqiuxu
        18
    qinqiuxu  
       31 天前
    如果服务在本地配置比较复杂(要装数据库、配置 systemctl 等,而且还会容易污染宿主机环境,比如 gitea ),我会用 docker ,比较方便。如果是简单的 JS 脚本,我不会专门弄 docker 容器运行。docker 本来就是为了方便搭建环境的,像 nodejs 环境安装其实不复杂,我是用 nvm 管理 nodejs 的。
    IvanLi127
        19
    IvanLi127  
       31 天前   ❤️ 1
    我基本上都是用 docker 了。
    我觉得,docker 一个是环境隔离安全点,另一个是 docker compose 和 Dockerfile
    能一定程度上代替部署文档。文档可能会没有及时更新变得不正确,但是这俩文件不会错。
    sfdev
        20
    sfdev  
       31 天前
    能 docker 全 docker 。
    xuanbg
        21
    xuanbg  
       30 天前
    Java 、PHP 、Node 、.NET……各种基础镜像都做好,然后就是简单写个 Dockerfile ,就做一件事,把代码或打包好的东西 ADD 进去。然后交给 Jenkins 就行了。
    baobao1270
        22
    baobao1270  
       30 天前 via Android
    可以开一个 debian 的容器跑,主要是方便环境隔离
    kero991
        23
    kero991  
       24 天前
    @yinmin #8 我觉得你这有点过于谨慎了。docker 只会开放固定的端口出来,而且还用着,哪里是那么容易跳进去的。跳进去怎么出来。有那功夫还不如直接搞宿主机
    yinmin
        24
    yinmin  
       24 天前 via iPhone
    @kero991 #23

    yinmin
        25
    yinmin  
       24 天前 via iPhone
    @kero991 例如#24 提及的案例,当你部署一套开源软件时不清楚是否有漏洞,为了避免开源软件被入侵危及主机,技术高手会用 docker 安装这个软件。

    但是如果软件被入侵,docker 容器被控制后,黑客可以利用这个容器做跳板,去尝试入侵内网的其他主机。通常,内网中不对外提供服务的机器相对安全较弱,易被入侵。

    我在#8 提到的 2 个措施,( 1 )使用 debian 基础镜像,没有 curl 和 wget ,#24 案例中提及的入侵方式就无法实施。 ( 2 )配置无网卡容器,黑客无法做跳板入侵其他内网主机。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:15 · PVG 21:15 · LAX 05:15 · JFK 08:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.