1
hwdq0012 42 天前
等你 docker compose up -d 一下拉起一个服务,你就爽到了,我觉得你职业的后期阶段会是 devops ,kubernetes 肯定是必由之路,那么 docker 学一学是很有必要的, 等你 docker compose up -d 一下拉起 n 个服务组成的一个可用应用,如 gitlab ,kafka 之类的, 你就不会想直接在主要上部署了
docker 的 volumne 可以定义为 ntfs , 大部分存储都支持 ntfs , 你可以在做一个开发 docker, ssh 上去开发 ,生产的 docker 可以从开发的 docker 直接 commit 成为镜像,但建议最好写 docker 脚本, 理解一下 docker 的缓存机制, 每次增量 push 增量 pull 是最佳方案。 滚动更新,弹性扩容我也很想学,我没实践经验, 开多个负载均衡的 docker ,然后用 keeplive 让它们选举一个 ip 绑定到虚拟 ip 上, 实际的实例挂掉了其他的实例会再重新选举,绑定到虚拟 ip ,虚拟 ip 向外提供 无状态的这样搞应该没什么问题, 有状态的可能要在负载均衡上做粘性会话之类的东西 |
2
iloveayu 42 天前
1. 你都想后续扩容做集群了,建议直接 Docker 做部署,你可能需要详细设计一下哪些组件进容器。
2. RDS 和你连普通 MySQL 没区别,改 Java 的配置就可以了,直接装 MySQL 到 VM 里也是可以的,阿里云定期快照或者镜像,或者想办法单独备份数据库到 OSS 啥的。 3. 不用 Jenkins 就自己本地写脚本,打包代码时直接带上 docker build 步骤,然后每次 save image ,传输到你的服务器上去 run 。 4. 5M 固定带宽是瓶颈。 |
3
fzdoudou OP @hwdq0012 #1 没错,后期肯定是 devops ,我考虑用 docker 的时候也是这么想,因为这个项目只有我一个人负责,前端后端运维全套都要做,前端可以用 cursor ,运维方面是一点经验都没有。想到用 docker 就是想到大家都在说 docker 可以一键拉起整个项目,现在纠结的那些点可能还是在于对 docker 太不熟悉了。
|
4
fzdoudou OP 还有一个疑问是 docker 性能会比直接在宿主机部署有下降吗
|
5
fzdoudou OP @iloveayu #2 哪些组件进容器这个也是我最大的问题,我并不知道哪些适合进容器,哪些不适合进容器,如果有些不进容器,那么他们之间的通信会不会有什么问题,我在测试服务器上是把所有中间件和 nginx 代理前端都部署在了容器,Java 服务部署在了宿主机,结果前端一直访问不到后端服务,让 ChatGPT 教了两天都没解决
|
![]() |
6
jianghuan2 42 天前
@fzdoudou #4 可忽略不计
|
7
runinhard 42 天前 ![]() docker 玩到最后就是 k8s 干脆直接跳过 docker compose 算了
|
![]() |
8
jianghuan2 42 天前
@runinhard #7 个人感觉还是要学,因为在没有 k8s 环境下,最优选择就是 docker-compose
|
![]() |
9
jianghuan2 42 天前
@fzdoudou #5 什么叫部署在容器?正确操作方式是:一个组件一个镜像(再启动容器),再把端口映射出来。中间件、前端 nginx 、后端 java 皆是镜像(容器)
|
10
ala2008 42 天前
|
11
wangwaner 42 天前
docker 国内镜像被 ban 了之后学习曲线陡然就上去了,直接卡在拉镜像这步了
|
![]() |
15
defunct9 42 天前 ![]() 2C 4G ,还要跑这么多东西,用个鬼的 Docker 。直接部署。
|
![]() |
18
sagaxu 42 天前
1. Java 项目没必要用 Docker ,除了 JRE 并没有其它依赖,JRE 安装很方便,没必要用 Docker ,资源隔离用 systemd 就能做了。
2. RDS 当然要上,起码 1 主 1 从,省去自己折腾备份和监控的麻烦。 3. 做个 ssh 密钥登陆,写个 Makefile ,命令行一键部署。 4. 一天几十万请求量并不大,一般瓶颈在 DB 和网络,不在业务负载机。 |
![]() |
19
lucasj 42 天前
1. 生产环境,别乱搞,用自己最熟悉的方案。想用 Docker 先自己用熟了再上生产环境。
2. RDS 云数据库,有钱就上啊,反正上了比没上好。没钱也可以定期自己备份。 3. 最快部署?你当前最熟练的方式。 4. 先撑,撑不住再说。 |
20
julyclyde 42 天前
“容器是一个界限”
你要深刻理解这句话 不仅仅是静态的(文件系统 image )同时也有动态的(运行时 namespace 、cgroups ) 把应用程序向容器环境改造的过程,其实是梳理应用程序边界的过程 |
![]() |
21
mahone3297 41 天前
1. docker ,你觉得没那么方便,是因为你不懂 docker ,现在是学习的过程,心里肯定觉得老的方式好,方便
2. 肯定 rds 。不然,部署在 ecs 上?如果挂了,数据丢了怎么办?还是数据无所谓? rds 上有 host ,port ,账号密码,就这样连 3. 用了 docker ,改为代码需要 - push 代码到 git - docker build - docker image push to register - 线上 ecs ,docker pull image ,docker run - 前端应该有个 LB (可能是 nginx ),指向从老的 docker container-old 指向 docekr container-new 4. 不好说,要看你整个系统。如果真不行,就垂直升级 ecs 。再不行,水平扩容 ecs ## PS - 上面的 docker 方案,你用熟了,可以换 kubernetes - 我最近在看 serverless ,没觉得 kubernetes 哪里好,觉得应该 serverless 更方便。serverless 就是 kubernetes 未出现时的解决方案。比如阿里云的 fc ,aws 的 lamba 。你可以考虑试下。阿里云的也比较方便,只要起 1 个 http 服务就好 |
![]() |
22
chloerei 41 天前 via iPhone
推荐使用 docker ,它解决了环境依赖的问题。
单机部署可以用 docker compose ,简单。 多机部署需要一个管理镜像更新的部署工具,企业级方案是 k8s ,但这个会复杂到让你怀疑人生。我推荐用 https://kamal-deploy.org/ ,虽然它一开始用于 Rails 项目,但只要应用能 docker 化就能支持。 数据库推荐用云托管数据库,备份恢复更容易。 |
23
nananqujava 41 天前
强烈建议 docker 部署, 流水线就用阿里云效, 数据库直接买 RDS
|
![]() |
24
oneisall8955 41 天前
云服务配置太低,在我司,单个 JAVA 应用也 2C4G 了,像练习 docker ,本地起虚拟机搭建一套环境
|
![]() |
25
scoful 40 天前
1. 有人提到说用 k8s ,个人觉得个人项目使用这种重型管理工具,都是在浪费宝贵的个人服务器资源,运行起来 k8s ,就没剩下多少可以部署项目的资源了,就算是 k3s 或 rancher 也一样,除非是企业项目,有大把资源可以投入 CI/CD
2. 你这个项目看说明应该不是微服务,那扩容就简单粗暴使用 nginx 分流一下,起多几个后端服务 3. 这里面最需要考虑的是你的中间件,redis ,rabbitMQ ,mysql ,这 3 个到底要自己做高可用还是用云服务,还是前面的逻辑,自己做高可用配置的话,又占用了一堆个人服务器资源,如果项目刚起步的时候,其实很浪费 4. 如果只是前期验证业务逻辑的话,可以直接把 3 个中间件和后端服务直接编排进一个镜像里,然后用宿主机挂载数据目录的方式。这样就是 2 个镜像,1 个管理后台的,1 个 c 端的。 5. 使用云数据库,和你本地数据库连接的用法一样的,至于跟 docker ,就是挂载目录,挂载配置文件 6. 宿主机自己部署中间件,肯定有丢数据的风险,只是这个几率不高,如果担心,就是花钱买云厂商的服务 7. 分享一下我自己的项目,我是前端一个镜像,后端一个镜像,redis 一个镜像,mysql 一个镜像,然后使用 docker-compose 编排启动顺序,代码存在 github 私人项目里,然后在 github 里配置 action 脚本,每次我推送代码后,自动打包成新的镜像,然后我最后再去服务器上停了已经启动的服务,再手动修改一下 docker-compose 里的镜像标签,然后重启,就完事了,打包的镜像我推送到阿里云免费的空间里。属于半自动。 |