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