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

12 小时 58 分钟前
 fescover

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

2752 次点击
所在节点    程序员
20 条回复
maocat
12 小时 53 分钟前
要不试试 docker-compose
还是不行上上 k8s ?
Peter2Zhu
12 小时 51 分钟前
用 nodejs 的基础镜像,把 js 文件挂载进去跑就行了,免得打镜像了
fox0001
12 小时 49 分钟前
不打包 docker image ,使用 nodejs 镜像生成容器运行
InDom
12 小时 49 分钟前
docker run --rm -it -v "$(pwd):/app" -w /app node node test.js
Puteulanus
12 小时 46 分钟前
可以跑个青龙面板,有简易的代码在线编辑,跑点 nodejs 和 python 的小脚本挺好用的
wu67
12 小时 40 分钟前
小内存的机器我选择自己装 node ,docker 根本跑不起来,本质上只是梯子服务器冗余资源再利用
yinmin
12 小时 37 分钟前
如果接入 internet ,当然是用 docker ,安全啊

网上很多入侵案例,用 docker 的只需对容器 down 和 up 一下,如果本机安装就要重装系统工作量超大的。
yinmin
12 小时 21 分钟前
很多开源项目或多或少有 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
12 小时 16 分钟前
@yinmin #8 这段能不能展开讲讲
```
2. 如果项目开 tcp 端口支持 unix socket ,可以把项目容器设置成无网卡,通过 volume 将 unix socket 文件夹分享给 nginx 、frp 的前置应用,黑客入侵到项目容器感知到的就是一个黑洞洞的孤立世界。 如果项目不支持 unix socket ,也可以将项目容器配置成无网卡,tcp 端口绑定到容器 127.0.0.1 ,然后使用 socat 转化成 unix socket
```
defunct9
12 小时 15 分钟前
500M 1CPU ,就问你怎么刀吧。
yinmin
12 小时 13 分钟前
@wu67 #6 256MB 内存的小 vps 就能很完美的跑 docker ce 了
yinmin
11 小时 56 分钟前
@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
11 小时 45 分钟前
某个服务用 systemctl 、journalctl 操作起来比 docker 方便的时候就不用 docker
wu67
11 小时 27 分钟前
@yinmin 小鸡不只内存小, 硬盘也小, 每 1G 都要扣扣搜搜的用...拉个几十到 200M 的镜像, 真不如直接本地安装
tars16
10 小时 16 分钟前
@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
9 小时 59 分钟前
docker 很好的解决了有些软件在你硬盘上随地拉屎的问题
frayesshi1
9 小时 13 分钟前
会,比如 nginx ,一般都是直接装,docker 版本最多做一个测试环境,并且 Linux 的内核作为一个 part 很明显可见(不仅内核,其他模块都是这样),这个就对运维就很方便,不像 windows ,不仅有服务,还有注册表,还有 VC 库,.net 库,补丁等等,这个还只是针对应用程序,如果涉及驱动,更加恶心。
qinqiuxu
8 小时 42 分钟前
如果服务在本地配置比较复杂(要装数据库、配置 systemctl 等,而且还会容易污染宿主机环境,比如 gitea ),我会用 docker ,比较方便。如果是简单的 JS 脚本,我不会专门弄 docker 容器运行。docker 本来就是为了方便搭建环境的,像 nodejs 环境安装其实不复杂,我是用 nvm 管理 nodejs 的。
IvanLi127
8 小时 26 分钟前
我基本上都是用 docker 了。
我觉得,docker 一个是环境隔离安全点,另一个是 docker compose 和 Dockerfile
能一定程度上代替部署文档。文档可能会没有及时更新变得不正确,但是这俩文件不会错。
sfdev
7 小时 6 分钟前
能 docker 全 docker 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1091136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX