前言:本人不是运维之类,只是想快速使用 Linux 上的程序,怎么简单怎么来。
之前,比如阿里云上,我会建立好服务器,做好一些非常基础的软件安装,然后就赶紧做个快照;
然后比如看到好玩的程序就会安装,因为是小白,通常装完后,比如可能出现问题,或者想卸载(很好奇为什么大部分软件有安装教程,但是没有卸载命令也告诉我,我都得去百度);为了避免我安装后各种问题导致系统会有影响,我每次就得安装前做个快照;想删除就恢复快照。
所以感觉很麻烦。
就入门了 docker 这个东西,我也大约用了下: 就是我确实可以 docker pull centos 一个系统,然后 run 一个系统进去安装软件,之后,我也在里面弄好了这个软件,感觉不错,当似乎只能 commit 来保存成镜像来进行保存,这点让我感觉很麻烦,就是 run 一个出来后,我可能各种操作,有没办法保存这个容器?因为比如服务器断电了之类,容器似乎就没了(看的教程似乎说容器运行在内存里);在比如我安装一个软件,装完才告诉我需要一个 80 端口,这时候我只能保存成镜像,然后在 -p 来映射一下端口。
所以我这种需求,docker 是可以实现吗?如果不行,是不是有更贴合我使用的类似虚拟机的软件?因为我看的教程很长,看到大约现在 30%,感受到 docker 似乎更用于开发者,功能强大,还有什么连接,很复杂。
1
CSGO OP 因为作为小白+穷狗🐕,撸了个甲骨文真的很激动;
但是发现甲骨文没有类似快照一样的东西,又不想系统被我完坏;所以就希望有个这样的东西,我就使用干净的系统,然后装虚拟机,虚拟机运行 N 个,比如第一个就真的运行东西,然后在其他虚拟机中运行和测试软件,好了以后放到第一个虚拟机中。再哪天想重头来,就删了第一个虚拟机即可。系统依然很干净。毕竟我又不懂 Linux 原理等等,要是垃圾文件多了,又不会删。:) |
2
noqwerty 2019-09-26 19:31:28 +08:00 via Android
你说的好像是 docker volume,但是这是让你持久化 docker 里数据的,不是设计来拉一个映像然后进去装新软件的
|
3
ai277014717 2019-09-26 19:40:00 +08:00
最近在研究 docker。目前已知最适合使用 docker 的系统和 osx 和 linux,不要想着去用什么 docker toolbox 会麻烦很多特别是 volume 方面。你可以配置好端口和 volume 用来持久化关键配置和数据。利用 docker-compose 来管理 docker 镜像的启动。
|
4
WordTian 2019-09-26 19:44:35 +08:00 via Android
可以,容器是能够做成镜像的。但是一般像这种需要持久化保存的数据,都建议用挂载的方式,然后容器一旦挂了,数据不会有损失
|
5
WordTian 2019-09-26 19:47:06 +08:00 via Android
又仔细看了下,感觉你应该用 docker run -d 参数
|
6
CSGO OP @noqwerty
@ai277014717 @WordTian 就是比如我刚刚运行了一个 teamspeak 服务端,那么现在我理解,比如我定期 3 天可以给这个容器做个镜像,这样即使服务器重启了换断电了之类,我可以运行至少 3 天前的数据。 再比如我运行个容器,里面运行宝塔来建网站,那么我也可以定级来通过生产镜像来保存。 但就是没我们普通 win10 用的虚拟机那样,就类似比如容器应该不是可以保存成一个名为 “我的虚拟机 1” 的容器;我可以启动或者关闭这个“我的虚拟机 1”?来进行启动和关闭虚拟机。 |
7
Chingim 2019-09-26 20:06:13 +08:00
如果你需要数据持久化, 那就把数据放到容器外, 通过 volume 进行挂载.
|
8
Tink 2019-09-26 20:07:36 +08:00 via iPhone
数据库不应该是映射到本地吗?数据库文件千万别 存到容器里面
|
9
Buges 2019-09-26 20:10:41 +08:00 via Android 3
看了 lz 历史帖子,别这样瞎折腾服务器了,先去学一学 Linux 基础,随便找本书看看。用着什么宝塔,脚本,照着教程一条条敲多劳心劳力,报个错也不懂,你这样不难受吗?
|
10
noqwerty 2019-09-26 20:25:59 +08:00 via Android
@CSGO 你这种需要 docker compose 里通过 volume 挂载硬盘里的数据。9 楼说得对,先去学一下基础,好好看一遍文档再折腾吧。
|
11
kchum 2019-09-26 20:56:09 +08:00 via iPhone
写个 dockerfile 将你的软件安装好会有新的镜像出来 push 到 docker hub 上
到新机器 pull 你的镜像 启动 挂载 |
12
mikeguan 2019-09-26 22:33:14 +08:00 via Android
@kchum 感觉楼主现在的需求是 dockerfile,不过以后可能也需要挂载卷。折腾永无止境😂
|
13
suant0u 2019-09-27 01:43:16 +08:00 via Android
额 可能是楼主的打开方式的姿势不够优雅,一般来说 Dockerfile 才是 [安装] 软件的打开方式。至于 Commit 个人理解算是镜像的一种补救手段,不过这样打包镜像的成本有些大,而且也不利于存储。
|
14
suant0u 2019-09-27 01:46:20 +08:00 via Android
如果要是想持久化,就需要-v 挂载。 容器一般都是作为应用程序环境依赖的打包工具,如果要是作为虚拟机来使用。。。可能想要达到的结果可能不是那么尽人意,而且涉及到一些内核的操作就更恼火了,因为容器本质上就是一个运行在宿主机上的进程。。。
|
15
jakezh 2019-09-27 01:53:17 +08:00
持久化的 docker 容器不是让你 bash 进去装这装那的
把要装的东西、映射的端口、配置文件全部弄到 dockerfile 里、compose config 里面 一次付出永久使用 |
16
msg7086 2019-09-27 04:05:36 +08:00
Docker 的典型用法:
用 Dockerfile 生成一个完整的操作系统和应用程序镜像。 这个镜像不会再更改而且可以随时舍弃删除。 你就当成是去网吧上网,网吧的电脑就是 Docker 容器。 然后你要存数据就自己带移动硬盘( docker volume )。 每次启动的时候挂载硬盘然后跑。 下次启动说不定就是另一台电脑了,配置也不一样,但是软件都一样的,你移动硬盘插上去就能继续用了。 |
17
nvkou 2019-09-27 04:51:58 +08:00 via Android
习惯上是拿镜像当应用,而不是系统。比如 LAMP。你可以部署一个数据库实例,一个 Apache php 实例。然后内部网桥连接下。数据库持久化通过 volume 映射到宿主机,80 端口映射到宿主端口即可。有些开源软件甚至不用编排,单实例就能跑。
commit 建议用来做小修小补。 |