V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
CSGO
V2EX  ›  问与答

问个有关 Linux 使用 Docker 的问题

  •  
  •   CSGO · 2019-09-26 19:20:57 +08:00 · 2069 次点击
    这是一个创建于 1892 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    所以感觉很麻烦。

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

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

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

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

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

    commit 建议用来做小修小补。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:50 · PVG 00:50 · LAX 08:50 · JFK 11:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.