灵活运用Docker--部署应用:Nextcloud&Ubuntu

灵活运用Docker–部署应用

简单来说就是为了方便,直接拉取镜像创建容器然后访问就可以用了,相当于是开箱即用。

Docker部署Nextcloud

无聊翻阅宝塔的Docker应用列表的时候发现了NextCloud:开源免费的私有云存储网盘项目 我觉得他最大的优点就是可以多端协作,在服务端部署后,安卓、windows、Web网页,豆可以操作。

安装与启动

其实没啥要说的,指令流程可以去搜一下,甚至如果你使用宝塔只需要在docker的应用列表那里搜Nextcloud就可直接安装了,但是安装好后要多等一会儿,我2c2g的服务器点击启动后需要等大概1分钟左右那个面板状态才显示已启动,才能访问,所以说如果你点了启动发现状态没更新,不要担心,多等一会就OK。访问进去后直接让你注册,你直接输入自己想用的输入用户名和密码,直接输入然后点击确定就可以了。

挂载第三方存储

这个值得一提,如果说你需要挂载第三方存储,例如对象存储,需要在部署好后,在**应用-已安装应用-外部存储支持(可能是英文,自己翻译一下)**启用后,就可以在左侧列表看到外部存储这个选项,然后根据实际情况配置外部存储即可。

PS:如果你选择S3存储,那么主机名就是存储桶的那个链接,不要带http://https://等协议头,后面结尾不要跟路径和/直接就写域名,下面端口如果http就写80,https就写443。

更多内容可以查看官方文档配置外部存储(GUI)

Docker部署Ubnutu(乌班图)

因为穷,所以没钱买服务器,或者说只是跑代码,不划算,所以找人花钱在别人服务器上部署一个Docker容器部署乌班图系统。

安装和部署SSH

直接搞个乌班图docker镜像创建容器即可,然后用伪终端在容器内执行代码安装ssh,配置一个端口转发暴露即可使用ssh连接容器。是的,没错,直接使用ssh -p 转发的容器SSH端口 root@宿主机IP就可以链接了。链接的不是宿主机,就是部署了乌班图系统的Docker容器。

访问容器

推荐使用指令对docker的容器端口进行转发到宿主机端口,转发后即可访问转发后的端口进行工作。当然也可以选择暴露全部端口,但是不安全,而且容易造成端口冲突。

关于systemctl

以下内容由AI总结

在 Docker 容器中使用伪终端来执行 systemctl 或类似的系统服务管理指令时,通常会遇到问题,主要是因为 Docker 容器的设计理念与传统的虚拟机或物理服务器有所不同。以下是一些关键原因:

1. Docker 容器的“最小化”特性

Docker 容器通常被设计为运行单一进程(或一个应用程序)。为了减少镜像体积和提高启动效率,容器内部不包含完整的操作系统服务管理框架(例如 systemdinit 系统)。因此,容器内无法使用 systemctl 来启动、停止服务或管理系统状态。

2. 缺少 systemd

systemd 是一种系统和服务管理器,通常用于管理 Linux 系统中的服务。Docker 容器默认并不包含 systemd,因为容器内只运行一个主进程(通常是某个应用或服务),没有像传统系统中那样的多个后台服务。所以,systemctl 无法在容器内正常工作,因为它依赖于 systemd 来启动和管理服务。

3. 容器的 PID 1 问题

容器的 PID 1 是应用程序本身,而不是一个管理系统(例如 systemd)。systemd 通常需要在主机的 PID 1 进程中运行才能正确管理服务和处理信号。然而,在 Docker 中,PID 1 只是你启动的应用进程,这意味着无法通过 systemctl 来管理其他进程。

4. systemctl 需要一个运行时环境

systemctl 和类似的服务管理命令通常需要访问一个完整的操作系统环境,包括系统日志、配置文件、进程管理等,而容器通常不具备这些环境。容器的文件系统和网络配置是有限制的,且通常不提供完整的系统环境来支持传统的服务管理。

解决方案:

  1. 使用 docker exec
    如果你希望在已经运行的容器中执行某些操作,可以使用 docker exec 来启动命令,而不是使用 systemctl。例如:

    1
    docker exec -it <container_id> bash

    然后在容器内运行所需的命令。

  2. 使用自定义启动脚本
    你可以为容器编写一个自定义的启动脚本,用于启动多个进程。你可以使用 supervisordtini 等工具来模拟服务管理。

  3. 使用 Docker Compose
    如果你需要管理多个服务,可以使用 Docker Compose 来定义多个容器,并且将它们作为服务进行管理。

  4. 为容器提供 systemd 支持(不推荐)
    如果确实需要 systemd,你可以在 Docker 容器中安装和配置它,但这通常不推荐,除非你有特定需求。安装 systemd 会使容器变得更加复杂,并且失去了 Docker 的轻量化优势。

总结:

systemctl 等工具依赖于传统的 Linux 系统环境和服务管理,而 Docker 容器设计上并没有提供这种环境。你可以使用其他方式(如 supervisord)来启动和管理多个进程,但这通常不是 Docker 的推荐做法。

关于我的解决方案:既然不能用那就不用,直接cd进程序的安装目录./可执行文件 指令执行命令

 

写在最后

Docker容器中部署Ubuntu后使用容器内ssh、伪终端跑代码再部署其他应用属实是无奈之举,这可能不符合docker的设计理念,甚至可能有一些安全隐患,所以请自行甄别是否合理,可行。

完结撒花!

 

鸣心/Write

灵活运用Docker--部署应用:Nextcloud&Ubuntu
https://b.wihi.top/posts/5c355465.html
作者
鸣心
发布于
2025年1月26日
许可协议
本站全部文章除在文章开头特别声明外,均采用:BY-NC许可协议。转载请标明出处!