CSGO
V2EX  ›  问与答

问个有关 Linux 使用 Docker 的问题

  •  
  •   CSGO · Sep 26, 2019 · 2535 views
    This topic created in 2484 days ago, the information mentioned may be changed or developed.

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

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

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

    所以感觉很麻烦。

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

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

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

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

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

    commit 建议用来做小修小补。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   984 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 19:16 · PVG 03:16 · LAX 12:16 · JFK 15:16
    ♥ Do have faith in what you're doing.