买来的服务器拿到手第一件事就是装 docker, 之后各种应用&服务都会通过 docker 或者 compose 跑,比如 nextjs 项目,nginx, mysql ,redis 等等。不过有些时候,应用比较小,举个例子,比如就一个单 js 文件的群机器人代码,用 docker 还要写 Dockerfile, 还要打 tag, push, pull, 如果涉及外部文件可能还得配置环境变量.env ,volume 挂载等等,一套操作下来也挺麻烦,尤其有时候境内服务器还拉不下来 dockerhub 里的 image 。这种情况大伙是否会选择在服务器本地 apt install nodejs 。然后直接用 pm2 来跑得了,快捷方便。缺点就是有服务器洁癖的会觉得有点不舒服吧。
1
maocat 35 天前 via iPhone
要不试试 docker-compose
还是不行上上 k8s ? |
2
Peter2Zhu 35 天前
用 nodejs 的基础镜像,把 js 文件挂载进去跑就行了,免得打镜像了
|
3
fox0001 35 天前 via Android
不打包 docker image ,使用 nodejs 镜像生成容器运行
|
4
InDom 35 天前 2
docker run --rm -it -v "$(pwd):/app" -w /app node node test.js
|
5
Puteulanus 35 天前
可以跑个青龙面板,有简易的代码在线编辑,跑点 nodejs 和 python 的小脚本挺好用的
|
6
wu67 35 天前 via Android
小内存的机器我选择自己装 node ,docker 根本跑不起来,本质上只是梯子服务器冗余资源再利用
|
7
yinmin 35 天前 via iPhone
如果接入 internet ,当然是用 docker ,安全啊
网上很多入侵案例,用 docker 的只需对容器 down 和 up 一下,如果本机安装就要重装系统工作量超大的。 |
8
yinmin 35 天前 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 |
9
sss15 35 天前
@yinmin #8 这段能不能展开讲讲
``` 2. 如果项目开 tcp 端口支持 unix socket ,可以把项目容器设置成无网卡,通过 volume 将 unix socket 文件夹分享给 nginx 、frp 的前置应用,黑客入侵到项目容器感知到的就是一个黑洞洞的孤立世界。 如果项目不支持 unix socket ,也可以将项目容器配置成无网卡,tcp 端口绑定到容器 127.0.0.1 ,然后使用 socat 转化成 unix socket ``` |
10
defunct9 35 天前
500M 1CPU ,就问你怎么刀吧。
|
12
yinmin 35 天前 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 容器,感知到的就是一个无网卡的黑洞洞的孤立世界。 |
13
qwq11 35 天前
某个服务用 systemctl 、journalctl 操作起来比 docker 方便的时候就不用 docker
|
15
tars16 35 天前
@wu67 #14 点了点了。小鸡只有网速好,其他都一般,刚刚让 gpt 教我如何清理 10G 磁盘空间
#进入根目录,查找占用最大的文件和目录 du -h --max-depth=1 / # 删除旧的日志文件 sudo find /var/log -type f -mtime +30 -delete # 综合清理所有未使用资源(包括镜像、容器、卷和缓存) docker system prune -a --volumes -f |
16
ofnh 35 天前 2
docker 很好的解决了有些软件在你硬盘上随地拉屎的问题
|
17
frayesshi1 35 天前
会,比如 nginx ,一般都是直接装,docker 版本最多做一个测试环境,并且 Linux 的内核作为一个 part 很明显可见(不仅内核,其他模块都是这样),这个就对运维就很方便,不像 windows ,不仅有服务,还有注册表,还有 VC 库,.net 库,补丁等等,这个还只是针对应用程序,如果涉及驱动,更加恶心。
|
18
qinqiuxu 35 天前
如果服务在本地配置比较复杂(要装数据库、配置 systemctl 等,而且还会容易污染宿主机环境,比如 gitea ),我会用 docker ,比较方便。如果是简单的 JS 脚本,我不会专门弄 docker 容器运行。docker 本来就是为了方便搭建环境的,像 nodejs 环境安装其实不复杂,我是用 nvm 管理 nodejs 的。
|
19
IvanLi127 35 天前 1
我基本上都是用 docker 了。
我觉得,docker 一个是环境隔离安全点,另一个是 docker compose 和 Dockerfile 能一定程度上代替部署文档。文档可能会没有及时更新变得不正确,但是这俩文件不会错。 |
20
sfdev 35 天前
能 docker 全 docker 。
|
21
xuanbg 34 天前
Java 、PHP 、Node 、.NET……各种基础镜像都做好,然后就是简单写个 Dockerfile ,就做一件事,把代码或打包好的东西 ADD 进去。然后交给 Jenkins 就行了。
|
22
baobao1270 34 天前 via Android
可以开一个 debian 的容器跑,主要是方便环境隔离
|