如何制作与我的服务器相同的Docker容器

时间:2018-07-17 05:03:21

标签: docker containers dockerfile

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

谢谢

2 个答案:

答案 0 :(得分:0)

首先从您的服务器(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 

您可能还希望从服务器中复制一些文件夹(例如,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镜像结尾。您的服务器具有不同的硬件,不同的内核,不同的网络,不同的存储等。

答案 1 :(得分:0)

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

您可以将整个文件系统放入docker容器(这是构建基础映像的方式,example

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

 sudo su
 //enter password
 apt-get install python-software-properties

 add-apt-repository ppa:ondrej/php

 apt-get update

 apt-get install -y php7.0

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

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

注意:要使其正常工作,您可能必须排除一些目录,例如/ dev或/ tmp