【问题标题】:How to make a docker container that is identical to my server如何制作与我的服务器相同的 docker 容器
【发布时间】:2018-12-24 16:38:33
【问题描述】:

我有一个在 ubuntu 16.04 上运行的亚马逊网络服务器。该服务器专用于运行由多个进程组成的模拟。我的任务是创建 docker 容器,以便可以在服务器上同时运行多个模拟实例。我知道运行多个容器需要为每个容器更改一些端口 ID,所以我的第一个任务是在容器中运行一个模拟实例。看来我可以在 dockerFile 中提取所有必要的软件图像来创建我的图像文件。但我想知道是否有更简单的方法来创建一个基本上是我服务器上当前所有软件的克隆的图像文件?

谢谢

【问题讨论】:

  • 答案是否定的。

标签: docker containers dockerfile


【解决方案1】:

注意:这可能行不通,但如果你想要一个精确的副本,这是你可以尝试的东西

你可以把整个文件系统变成一个 docker 容器(这就是基础镜像的构建方式,example

首先下载整个文件系统 (source)

ssh user@server "tar czpf - /" > file.gz

然后从中创建一个 docker-image:

FROM scratch
ADD file.gz /

注意:为此,您可能必须排除一些目录,例如 /dev 或 /tmp

【讨论】:

    【解决方案2】:

    首先从您的服务器获取已安装软件包的列表 (source)

    dpkg --get-selections > list.txt
    

    然后在您的 dockerfile 中使用该列表:

    from ubuntu:16.04
    add list.txt
    
    RUN dpkg --clear-selections &&\
      dpkg --set-selections < list &&\
      apt-get autoremove &&\
      apt-get dselect-upgrade 
    

    您可能还想从服务器复制一些文件夹(etc、var、log 等)。 (source)

    scp -r user@your.server.example.com:/var /home/user/Desktop/var
    

    并将其添加到您的 dockerfile:

    ADD /home/user/Desktop/var /var
    

    (重复您可能需要的其他文件夹)

    然后构建并排除故障:

    docker build -t my_tag . && docker run -it --rm my_tag bash
    

    注意:此过程将帮助您入门,但它非常容易出错。它也远非完美。我建议,在这样做之后,通过删除不需要的包和文件夹来迭代地改进你的图像。对于生产 docker 映像,您希望将其重写为使用 alpine

    注意 2:你不能得到一个与你的服务器相同的 docker 镜像。你的服务器有不同的硬件、不同的内核、不同的网络、不同的存储等等。

    【讨论】:

    • 您的解决方案不包括使用tar zxvf package.tar.gz; ./configure; make; make install 安装的软件包。所以,最好先做一个docker commit,然后是那个图像的docker save。然后生成一个 newimage.tar.gz 文件,您可以在其他主机上创建图像,执行docker load &lt; newimage.tar.gzdocker run
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2018-11-10
    • 2015-12-16
    • 2017-01-30
    相关资源
    最近更新 更多