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

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

  •  
  •   fescover · 1 天前 · 3251 次点击

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

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

    网上很多入侵案例,用 docker 的只需对容器 down 和 up 一下,如果本机安装就要重装系统工作量超大的。
    yinmin
        8
    yinmin  
       1 天前 via iPhone   ❤️ 13
    很多开源项目或多或少有 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  
       1 天前
    @yinmin #8 这段能不能展开讲讲
    ```
    2. 如果项目开 tcp 端口支持 unix socket ,可以把项目容器设置成无网卡,通过 volume 将 unix socket 文件夹分享给 nginx 、frp 的前置应用,黑客入侵到项目容器感知到的就是一个黑洞洞的孤立世界。 如果项目不支持 unix socket ,也可以将项目容器配置成无网卡,tcp 端口绑定到容器 127.0.0.1 ,然后使用 socat 转化成 unix socket
    ```
    defunct9
        10
    defunct9  
       1 天前
    500M 1CPU ,就问你怎么刀吧。
    yinmin
        11
    yinmin  
       1 天前 via iPhone
    @wu67 #6 256MB 内存的小 vps 就能很完美的跑 docker ce 了
    yinmin
        12
    yinmin  
       1 天前   ❤️ 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  
       1 天前
    某个服务用 systemctl 、journalctl 操作起来比 docker 方便的时候就不用 docker
    wu67
        14
    wu67  
       1 天前
    @yinmin 小鸡不只内存小, 硬盘也小, 每 1G 都要扣扣搜搜的用...拉个几十到 200M 的镜像, 真不如直接本地安装
    tars16
        15
    tars16  
       1 天前
    @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  
       1 天前   ❤️ 2
    docker 很好的解决了有些软件在你硬盘上随地拉屎的问题
    frayesshi1
        17
    frayesshi1  
       23 小时 23 分钟前
    会,比如 nginx ,一般都是直接装,docker 版本最多做一个测试环境,并且 Linux 的内核作为一个 part 很明显可见(不仅内核,其他模块都是这样),这个就对运维就很方便,不像 windows ,不仅有服务,还有注册表,还有 VC 库,.net 库,补丁等等,这个还只是针对应用程序,如果涉及驱动,更加恶心。
    qinqiuxu
        18
    qinqiuxu  
       22 小时 52 分钟前
    如果服务在本地配置比较复杂(要装数据库、配置 systemctl 等,而且还会容易污染宿主机环境,比如 gitea ),我会用 docker ,比较方便。如果是简单的 JS 脚本,我不会专门弄 docker 容器运行。docker 本来就是为了方便搭建环境的,像 nodejs 环境安装其实不复杂,我是用 nvm 管理 nodejs 的。
    IvanLi127
        19
    IvanLi127  
       22 小时 36 分钟前   ❤️ 1
    我基本上都是用 docker 了。
    我觉得,docker 一个是环境隔离安全点,另一个是 docker compose 和 Dockerfile
    能一定程度上代替部署文档。文档可能会没有及时更新变得不正确,但是这俩文件不会错。
    sfdev
        20
    sfdev  
       21 小时 16 分钟前
    能 docker 全 docker 。
    xuanbg
        21
    xuanbg  
       7 小时 13 分钟前
    Java 、PHP 、Node 、.NET……各种基础镜像都做好,然后就是简单写个 Dockerfile ,就做一件事,把代码或打包好的东西 ADD 进去。然后交给 Jenkins 就行了。
    baobao1270
        22
    baobao1270  
       5 小时 25 分钟前 via Android
    可以开一个 debian 的容器跑,主要是方便环境隔离
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:41 · PVG 15:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.