扩展Docker容器

5

我是Docker的新手,想问一下从Docker仓库拉取后是否可以扩展Docker镜像。我需要一个包含Ubuntu 14.04、Java和R的Docker镜像。我看到它们分别有单独的镜像。我的问题是新拉取的镜像的Dockerfile在哪里,这样我就可以扩展它们了。

5个回答

4
< p > docker pull 命令只是拉取预构建的镜像。您的本地计算机上没有 Dockerfile。但是,您可以从 Docker Hub 找到原始的 Dockerfile。如果您使用 itzg/ubuntu-openjdk-7 镜像,则可以访问其在线存储库。

https://registry.hub.docker.com/u/itzg/ubuntu-openjdk-7/

Dockerfile可以在Dockerfile选项卡上找到(只有“自动化构建”存储库在Docker Hub上才有Dockerfile选项卡)。

FROM ubuntu:trusty
MAINTAINER itzg
ENV APT_GET_UPDATE 2014-07-19
RUN apt-get update
RUN apt-get install -y openjdk-7-jre-headless
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64

下面是来自edwindj/docker-r的另一个Dockerfile。
FROM ubuntu:trusty
MAINTAINER Edwin de Jonge
RUN apt-get update
RUN apt-get install -y r-base

目前没有自动合并两个或多个Dockerfiles的方法,但是您可以像下面这样将这两个Dockerfile合并。

FROM ubuntu:trusty
RUN apt-get update

# Install java
RUN apt-get install -y openjdk-7-jre-headless
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64

# Install R
RUN apt-get install -y r-base

使用 docker build 命令构建它。

$ docker build nacyot/ubuntu-java-r .

尝试在基于nacyot/ubuntu-java-r镜像的容器上运行Java和R命令。
$ docker run -it nacyot/ubuntu-java-r cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

$ docker run -it nacyot/ubuntu-java-r java -version
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

$ docker run -it nacyot/ubuntu-java-r R --version
R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.

它运行良好。

没有什么魔法,但是您可以通过引用Docker Hub上的Dockerfiles来扩展和构建(几乎)任何具有您需要的软件包的映像。


3

0

自动合并多个图像不可能,但通常情况下,Dockerfiles很容易遵循,以创建您自己的版本,其中包括R和Java(如果这是您想要的)。

一些上游容器还使用其dockerfiles中的ONBUILDhttps://docs.docker.com/reference/builder/#onbuild条目,仅在通过FROM条目将其图像包含在另一个图像中时才运行某些内容。

如果您找到了一个满意的Java容器,只需创建一个dockerfile,并在顶部添加FROM java-something,然后添加R。即使通过FROM包含容器,所有使用的docker run ...参数(入口点和cmd)仍将起作用。

如果您需要对现有容器进行修改,也是可以的。请查看我创建的某些内容,以在gitlab容器上启用oauth(在官方支持之前)@ https://github.com/xeor/dockerfiles/tree/master/gitlab。在那里,我正在扩展原始图像并添加自己的一组配置调整..


0

仓库就是你的命名空间。所以你需要拉取镜像,这一步你已经完成了。如果你想一下,文件就在容器里。

  1. 列出所有镜像--sudo docker images--将会显示文件的位置。
  2. 列表项--在Docker容器中运行shell。$ sudo docker run "your filename"
  3. 现在我们在Docker容器内部。我们可以使用ls命令列出所有文件。
  4. 如果需要,可以创建自己的目录,但是为了回答你的问题,你可以停留在#3。
  5. 从这里开始,你可以将镜像添加到自己的注册表中,然后从那里拉取它,这样会更方便。

为了简单起见,你只需要做1和可能的2。当我尝试时,我也做了#2,但那个列表是要添加到你自己的目录中的文件。

如果需要,请查看这个“教程”:Docker Repository Tutorial

还要看看文档!Docker 文档


0

当然可以。 您可以下载一个Docker镜像,更改它并生成(也称为提交)一个新的带有新名称(和标签)的镜像。 要更改容器,您可以手动执行或使用Dockerfile。 我不确定我能在单个答案中给出所有步骤,但如果您遵循这个小指南,我相信您可以在10分钟或更短的时间内了解这个想法:https://docs.docker.com/userguide/dockerimages/#creating-our-own-images


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接