问个有关 Linux 使用 Docker 的问题

2019-09-26 19:20:57 +08:00
 CSGO

前言:本人不是运维之类,只是想快速使用 Linux 上的程序,怎么简单怎么来。

之前,比如阿里云上,我会建立好服务器,做好一些非常基础的软件安装,然后就赶紧做个快照;

然后比如看到好玩的程序就会安装,因为是小白,通常装完后,比如可能出现问题,或者想卸载(很好奇为什么大部分软件有安装教程,但是没有卸载命令也告诉我,我都得去百度);为了避免我安装后各种问题导致系统会有影响,我每次就得安装前做个快照;想删除就恢复快照。

所以感觉很麻烦。

就入门了 docker 这个东西,我也大约用了下: 就是我确实可以 docker pull centos 一个系统,然后 run 一个系统进去安装软件,之后,我也在里面弄好了这个软件,感觉不错,当似乎只能 commit 来保存成镜像来进行保存,这点让我感觉很麻烦,就是 run 一个出来后,我可能各种操作,有没办法保存这个容器?因为比如服务器断电了之类,容器似乎就没了(看的教程似乎说容器运行在内存里);在比如我安装一个软件,装完才告诉我需要一个 80 端口,这时候我只能保存成镜像,然后在 -p 来映射一下端口。

所以我这种需求,docker 是可以实现吗?如果不行,是不是有更贴合我使用的类似虚拟机的软件?因为我看的教程很长,看到大约现在 30%,感受到 docker 似乎更用于开发者,功能强大,还有什么连接,很复杂。

2068 次点击
所在节点    问与答
17 条回复
CSGO
2019-09-26 19:28:54 +08:00
因为作为小白+穷狗🐕,撸了个甲骨文真的很激动;
但是发现甲骨文没有类似快照一样的东西,又不想系统被我完坏;所以就希望有个这样的东西,我就使用干净的系统,然后装虚拟机,虚拟机运行 N 个,比如第一个就真的运行东西,然后在其他虚拟机中运行和测试软件,好了以后放到第一个虚拟机中。再哪天想重头来,就删了第一个虚拟机即可。系统依然很干净。毕竟我又不懂 Linux 原理等等,要是垃圾文件多了,又不会删。:)
noqwerty
2019-09-26 19:31:28 +08:00
你说的好像是 docker volume,但是这是让你持久化 docker 里数据的,不是设计来拉一个映像然后进去装新软件的
ai277014717
2019-09-26 19:40:00 +08:00
最近在研究 docker。目前已知最适合使用 docker 的系统和 osx 和 linux,不要想着去用什么 docker toolbox 会麻烦很多特别是 volume 方面。你可以配置好端口和 volume 用来持久化关键配置和数据。利用 docker-compose 来管理 docker 镜像的启动。
WordTian
2019-09-26 19:44:35 +08:00
可以,容器是能够做成镜像的。但是一般像这种需要持久化保存的数据,都建议用挂载的方式,然后容器一旦挂了,数据不会有损失
WordTian
2019-09-26 19:47:06 +08:00
又仔细看了下,感觉你应该用 docker run -d 参数
CSGO
2019-09-26 20:01:12 +08:00
@noqwerty
@ai277014717
@WordTian
就是比如我刚刚运行了一个 teamspeak 服务端,那么现在我理解,比如我定期 3 天可以给这个容器做个镜像,这样即使服务器重启了换断电了之类,我可以运行至少 3 天前的数据。

再比如我运行个容器,里面运行宝塔来建网站,那么我也可以定级来通过生产镜像来保存。

但就是没我们普通 win10 用的虚拟机那样,就类似比如容器应该不是可以保存成一个名为 “我的虚拟机 1” 的容器;我可以启动或者关闭这个“我的虚拟机 1”?来进行启动和关闭虚拟机。
Chingim
2019-09-26 20:06:13 +08:00
如果你需要数据持久化, 那就把数据放到容器外, 通过 volume 进行挂载.
Tink
2019-09-26 20:07:36 +08:00
数据库不应该是映射到本地吗?数据库文件千万别 存到容器里面
Buges
2019-09-26 20:10:41 +08:00
看了 lz 历史帖子,别这样瞎折腾服务器了,先去学一学 Linux 基础,随便找本书看看。用着什么宝塔,脚本,照着教程一条条敲多劳心劳力,报个错也不懂,你这样不难受吗?
noqwerty
2019-09-26 20:25:59 +08:00
@CSGO 你这种需要 docker compose 里通过 volume 挂载硬盘里的数据。9 楼说得对,先去学一下基础,好好看一遍文档再折腾吧。
kchum
2019-09-26 20:56:09 +08:00
写个 dockerfile 将你的软件安装好会有新的镜像出来 push 到 docker hub 上
到新机器 pull 你的镜像 启动 挂载
mikeguan
2019-09-26 22:33:14 +08:00
@kchum 感觉楼主现在的需求是 dockerfile,不过以后可能也需要挂载卷。折腾永无止境😂
suant0u
2019-09-27 01:43:16 +08:00
额 可能是楼主的打开方式的姿势不够优雅,一般来说 Dockerfile 才是 [安装] 软件的打开方式。至于 Commit 个人理解算是镜像的一种补救手段,不过这样打包镜像的成本有些大,而且也不利于存储。
suant0u
2019-09-27 01:46:20 +08:00
如果要是想持久化,就需要-v 挂载。 容器一般都是作为应用程序环境依赖的打包工具,如果要是作为虚拟机来使用。。。可能想要达到的结果可能不是那么尽人意,而且涉及到一些内核的操作就更恼火了,因为容器本质上就是一个运行在宿主机上的进程。。。
jakezh
2019-09-27 01:53:17 +08:00
持久化的 docker 容器不是让你 bash 进去装这装那的
把要装的东西、映射的端口、配置文件全部弄到 dockerfile 里、compose config 里面
一次付出永久使用
msg7086
2019-09-27 04:05:36 +08:00
Docker 的典型用法:
用 Dockerfile 生成一个完整的操作系统和应用程序镜像。
这个镜像不会再更改而且可以随时舍弃删除。
你就当成是去网吧上网,网吧的电脑就是 Docker 容器。
然后你要存数据就自己带移动硬盘( docker volume )。
每次启动的时候挂载硬盘然后跑。
下次启动说不定就是另一台电脑了,配置也不一样,但是软件都一样的,你移动硬盘插上去就能继续用了。
nvkou
2019-09-27 04:51:58 +08:00
习惯上是拿镜像当应用,而不是系统。比如 LAMP。你可以部署一个数据库实例,一个 Apache php 实例。然后内部网桥连接下。数据库持久化通过 volume 映射到宿主机,80 端口映射到宿主端口即可。有些开源软件甚至不用编排,单实例就能跑。

commit 建议用来做小修小补。

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

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

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

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

© 2021 V2EX